Зарегистрируйтесь для доступа к 15+ бесплатным курсам по программированию с тренажером

Отладка Java: Core

Видео может быть заблокировано из-за расширений браузера. В статье вы найдете решение этой проблемы.

Стектрейс

static void myMethod1() {
    System.out.println("----- myMethod1 [START] -----");
    myMethod2();
    System.out.println("----- myMethod1 [FINISH] -----");
}

static void myMethod2() {
    System.out.println("----- myMethod2 [START] -----");
    myMethod3();
    System.out.println("----- myMethod2 [FINISH] -----");
}

static void myMethod3() {
    System.out.println("----- myMethod3 [START] -----");
    System.out.println("----- myMethod3 [FINISH] -----");
}

myMethod1(); // =>
// ----- myMethod1 [START] -----
// ----- myMethod2 [START] -----
// ----- myMethod3 [START] -----
// ----- myMethod3 [FINISH] -----
// ----- myMethod2 [FINISH] -----
// ----- myMethod1 [FINISH] -----

System.out.println(10 / 0);
// Exception in thread "main" java.lang.ArithmeticException: / by zero
//     at Main.main(Main.java:8)

static int divideByZero(int input) {
    return input / 0;
}

divideByZero(10);
// Exception in thread "main" java.lang.ArithmeticException: / by zero
//     at Main.divideByZero(Main.java:100)
//     at Main.main(Main.java:9)

Отладка

static int getFibbonaciNumber(int input) {
    System.out.println("getFibbonaciNumber [START] input = " + input);
    if (input < 1) {
        System.out.println("getFibbonaciNumber return value = " + input + " [1]");
        return input;
    }
    System.out.println("getFibbonaciNumber return input value = " + input + "[2]");
    return getFibbonaciNumber(input - 2) + getFibbonaciNumber(input - 1);
}

// Отладочная печать
int index = 3;
int fib = getFibbonaciNumber(index);
System.out.println("Число Фибоначчи с индексом " + index + " равно " + fib); // =>
// getFibbonaciNumber [START] input = 3
// getFibbonaciNumber return input value = 3[2]
// getFibbonaciNumber [START] input = 1
// getFibbonaciNumber return value = 1 [1]
// getFibbonaciNumber [START] input = 2
// getFibbonaciNumber return input value = 2[2]
// getFibbonaciNumber [START] input = 0
// getFibbonaciNumber return value = 0 [1]
// getFibbonaciNumber [START] input = 1
// getFibbonaciNumber return value = 1 [1]
// Число Фибоначчи с индексом 3 равно 2

Ошибки

// Синтаксическая ошибка

// Строка не взята в кавычки
System.out.println(Hello, world!);

// Ошибка Reference error

// Переменная не определена
System.out.println(myVar);

// Ошибка типизации

// Переопределение константы
final int MY_CONSTANT = 22;
MY_CONSTANT = MY_CONSTANT + 1;

// Логическая ошибка

// Конкатенация строк вместо сложения чисел
String num1 = "1";
String num2 = "2";
System.out.println(num1 + num2); // => "12"

Коды ошибок и исключения

// Исключения

int apples = 10;
int kids = 0;

// Исключение ArithmeticException: / by zero
System.out.println("Каждый ребёнок получит по " + apples / kids + " яблок (яблока)");
// Exception in thread "main" java.lang.ArithmeticException: / by zero

// Методы, возвращающие коды ошибок
static int divideWithCode(int input1, int input2) {
    if (input2 == 0) {
        return -1;
    }
    return input1 / input2;
}

static int divideApplesForKids(int apples, int kids) {
    int applePerPerson = divideWithCode(apples, kids);
    if (applePerPerson == 0) {
        return -3;
    }
    return applePerPerson == -1 ? -2 : applePerPerson;
}

// Обработка кодов ошибок

int res = divideWithCode(10, 0);
if (res == -1) {
    System.out.println("[err] Dividing by zero is not allowed!");
}
else {
    System.out.println("result of dividing = " + res);
}

int applePerPerson = divideApplesForKids(10, 11);
if (applePerPerson == -2) {
    System.out.println("Ой, кажется детей нет - некому раздавать яблоки...");
}
else if (applePerPerson == -3) {
    System.out.println("К сожалению, яблок на всех не хватит...");
}
else {
    System.out.println("Каждый ребёнок получит " + applePerPerson + " шт (ябл.)");
}

Дополнительные материалы

  1. Отладочная печать
  2. Как эффективно отлаживать код

Аватары экспертов Хекслета

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты.

Ошибки, сложный материал, вопросы >
Нашли опечатку или неточность?

Выделите текст, нажмите ctrl + enter и отправьте его нам. В течение нескольких дней мы исправим ошибку или улучшим формулировку.

Что-то не получается или материал кажется сложным?

Загляните в раздел «Обсуждение»:

  • задайте вопрос. Вы быстрее справитесь с трудностями и прокачаете навык постановки правильных вопросов, что пригодится и в учёбе, и в работе программистом;
  • расскажите о своих впечатлениях. Если курс слишком сложный, подробный отзыв поможет нам сделать его лучше;
  • изучите вопросы других учеников и ответы на них. Это база знаний, которой можно и нужно пользоваться.
Об обучении на Хекслете

Для полного доступа к курсу нужен базовый план

Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.

Получить доступ
900
упражнений
2000+
часов теории
3200
тестов

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно.

  • 130 курсов, 2000+ часов теории
  • 900 практических заданий в браузере
  • 360 000 студентов
Отправляя форму, вы соглашаетесь c «Политикой конфиденциальности» и «Условиями оказания услуг»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff

Используйте Хекслет по максимуму!

  • Задавайте вопросы по уроку
  • Проверяйте знания в квизах
  • Проходите практику прямо в браузере
  • Отслеживайте свой прогресс

Зарегистрируйтесь или войдите в свой аккаунт

Отправляя форму, вы соглашаетесь c «Политикой конфиденциальности» и «Условиями оказания услуг»