Загрузка...

Исключения в Java

Держите небольшой массив int с именем slots, где лежат 2 и 4. Напечатайте slots[0], чтобы экран показал 2. Затем узнайте, что будет, если вместо этого запросить slots[5]: Java бросает ArrayIndexOutOfBoundsException, и программа останавливается. Сначала скомпилируйте Alarm.java и запустите java Alarm для безопасного файла. Увидеть остановку во время выполнения из‑за нарушенного правила — а не из‑за пропущенной точки с запятой — вот чему учит эта страница. Оставьте try и catch для следующей страницы.

Безопасное чтение, которое завершается

Исключение — способ Java сказать, что правило нарушилось, пока программа работала. До сих пор большинство демо печатали ясную строку и тихо заканчивались. Эта страница сначала держит тихое демо, затем демо, которое останавливается с именем исключения.
Откройте Alarm.java. Оставьте имя публичного класса Alarm, чтобы оно совпадало с именем файла. Удалите остатки ArrayList<Integer>, nums.add(9), демо Crate и любой for-each по oak и pine. Удалите также любой Scanner или nextLine. Программа не должна ждать ввода. Этой странице не нужна строка import.
В main сохраните два целых числа:
int[] slots = {2, 4};
Затем напечатайте первый слот:
System.out.println(slots[0]);
Номера слотов начинаются с нуля. В слоте ноль лежит 2. Сохраните перед компиляцией.

Alarm safe slots zero

java
public class Alarm {
    public static void main(String[] args) {
        int[] slots = {2, 4};
        System.out.println(slots[0]);
    }
}

Из папки, где лежит Alarm.java, выполните javac Alarm.java. Когда скобки, фигурные скобки и точки с запятой совпадают, javac не пишет своей строки. Затем запустите java Alarm — не java Alarm.java. Уберите окончание .java из команды запуска.
Программа должна напечатать одну строку и остановиться: 2. Она не должна просить вас печатать. Если терминал ждёт ввода с клавиатуры, в файле ещё остался вызов nextLine из старого упражнения. Удалите этот вызов и оставьте массив плюс System.out.println(slots[0]);.
Пройдите запуск один раз. Java начинает с Alarm.main. В массиве два значения. Печать читает слот ноль. Экран показывает 2. Больше ничего печататься не должно. Если видите 9, ещё работает демо wrappers из Crate — переключитесь на java Alarm. Если видите 4, вы напечатали slots[1]; безопасный учебный файл держит slots[0].

Плохой индекс, который бросает

Измените только строку печати, чтобы она запросила слот, который никогда не записывали: slots[5]. В массиве по‑прежнему только два слота. Во время выполнения Java бросает исключение вместо печати числа.

Alarm bad index throws

java
public class Alarm {
    public static void main(String[] args) {
        int[] slots = {2, 4};
        System.out.println(slots[5]);
    }
}

Скомпилируйте через javac Alarm.java, затем запустите java Alarm. На этот раз программа не печатает 2. Терминал показывает отчёт об ошибке с именем ArrayIndexOutOfBoundsException. Запуск останавливается. Строки, которые вы могли представить после этой печати, не выполняются, потому что исключение уже остановило программу. Заметьте: javac всё ещё может пройти — плохой индекс это проблема времени выполнения, а не пропущенная точка с запятой.
Эта остановка и есть урок. Вы не чините индекс на этой странице через try. Вы учитесь узнавать, что нарушенное правило во время выполнения становится исключением и обрывает обычный путь. Прочитайте имя исключения в отчёте. Держите файл с плохим индексом только чтобы увидеть эту остановку. Предпочитайте безопасный файл, когда нужен тихий экран с 2. Если вернуть плохой индекс к slots[0], тихий экран вернётся; это доказывает, что остановка шла от индекса, а не от имени класса Alarm.
Не считайте отчёт стека обычным результатом println. Java сообщает, что пошло не так. Написание типа исключения важно, когда вы о нём говорите: ArrayIndexOutOfBoundsException. Сказать только «ошибка» для этого урока слишком расплывчато — держите полное имя типа, описывая остановку.

Остаток wrappers — не этот сбой

Третий файл напоминает список Integer с предыдущей страницы. То демо печатает 9 и заканчивается. Это не история исключения.

Alarm wrappers leftover contrast

java
import java.util.ArrayList;

public class Alarm {
    public static void main(String[] args) {
        ArrayList<Integer> nums = new ArrayList<Integer>();
        nums.add(9);
        System.out.println(nums.get(0));
    }
}

Этот контраст печатает 9 и заканчивается без броска. Используйте его только чтобы отделить завершённый путь wrappers от пути Alarm с плохим индексом. Для урока исключений на этой странице учебная пара — безопасная печать slots[0] и бросающая печать slots[5]. Не придумывайте try или catch вокруг любой демо массива на этой странице вообще.

Сравнение с массивами и с wrappers

На странице массивов вы оставались внутри записанных слотов. Эта страница нарочно выходит наружу, чтобы вы увидели исключение. На странице wrappers список Integer печатал 9 без сбоя. Это всё ещё работает как история. Для этой страницы держите Alarm и историю индекса массива.
Есть и другие исключения — например деление на ноль может бросить ArithmeticException. Эта страница держит одно ясное имя: ArrayIndexOutOfBoundsException от плохого индекса. Сегодня вам не нужен каталог всех типов исключений. Одного крепкого примера достаточно, прежде чем следующая страница научит обработке.
Когда рядом ещё лежат старые Crate.java, оставьте их или удалите только если они путают, какой класс вы запускаете. Запускайте java Alarm после компиляции файла нужного демо. Меняйте файлы намеренно, чтобы безопасная печать и бросающая печать не смешивались в одном main во время учёбы.

Что остаётся для try и catch

Эта страница показывает, что исключение может остановить программу во время выполнения. Следующая страница вводит try и catch, чтобы вы могли обработать некоторые проблемы без завершения всего запуска. Оставайтесь здесь с узнаванием остановки и имени исключения. Пока не придумывайте блок catch как требование на этой странице.

Перед try и catch

Вы можете напечатать slots[0] из {2, 4} и увидеть 2. Вы можете напечатать slots[5] и увидеть остановку запуска с ArrayIndexOutOfBoundsException. Компилируйте Alarm.java и запускайте java Alarm по очереди для каждого сохранённого демо. Исключение ясно назвало нарушенное правило. Следующая страница — try и catch, где обработанный путь может продолжаться после некоторых ошибок.
Держите безопасное демо для тихого экрана. Держите плохой индекс, чтобы видеть остановку. Держите try вне этой страницы. Эти три привычки — контрольная точка перед движением дальше. Когда вы можете назвать ArrayIndexOutOfBoundsException после запуска с плохим индексом через java Alarm, исключения сделали свою работу для этого урока, и вы готовы к следующей теме об обработке.

🧠 Проверьте Свои Знания

Готов к Началу

Проверьте Свои Знания

Бросьте себе вызов с помощью этой интерактивной викторины и узнайте, насколько хорошо вы понимаете тему

❓
6
Вопросы
🎯
70%
Для Прохождения
♾️
∞
Время
🔄
∞
Попытки

📝 Инструкции

  • Внимательно прочитайте каждый вопрос
  • Выберите лучший ответ на каждый вопрос
  • Вы можете пересдавать тест столько раз, сколько захотите
  • Ваш прогресс будет показан вверху