Главная страница

АБОБА. Справочник по программированию на Java Методическое пособие


Скачать 242.41 Kb.
НазваниеСправочник по программированию на Java Методическое пособие
АнкорАБОБА
Дата20.02.2022
Размер242.41 Kb.
Формат файлаdocx
Имя файла12642_java_method_1.docx
ТипСправочник
#368066
страница60 из 67
1   ...   56   57   58   59   60   61   62   63   ...   67

Сцепленные исключения


Начиная с J2SE 1.4, в подсистему исключений было добавлено новое средство: сцепленные исключения (chained exceptions). Это средство позволяет ассоциировать с одним исключением другое исключение. Второе исключение описывает причину появления первого. Например, представьте ситуацию, когда метод возбуждает исключение ArithmeticException, поскольку была предпринята попытка деления на ноль. Однако реальная причина проблемы заключается в ошибке ввода-вывода, что приводит к неправильному делению. И хотя метод должен возбуждать ArithmeticException, так как произошла именно эта ошибка, вы можете также позволить вызывающему коду узнать о том, что в основе лежит ошибка ввода-вывода. Сцепленные исключения позволяют справиться с этой, а также с любой другой ситуацией, в которой присутствуют уровни исключений. Чтобы разрешить сцепленные исключения, были добавлены два конструктора и два метода к Throwable.

// Демонстрация сцепленных исключений.

class ChainExcDemo {

static void demoproc() {

// создать исключение

NullPointerException e = new NullPointerException("верхний уровень");

// добавить причину

e.initCause(new ArithmeticException("причина"));

throw e;

}

public static void main(String args[]) {

try {

demoproc();

} catch(NullPointerException e) {

BookNew_JAVA-7.indb 250 02.06.2007 1:07:00

Глава 10. Обработка исключений 251

// отобразить исключение верхнего уровня

System.out.println("Перехвачено: " + e);

// отобразить исключение-причину

System.out.println("Исходная причина: " + e.getCause());

}

}}

Эта программа создает следующий вывод:

Перехвачено: java.lang.NullPointerException: верхний уровень

Исходная причина: java.lang.ArithmeticException: причина

В этом примере исключением верхнего уровня является NullPointerException. К нему добавлено исключение-причина – ArithmeticException. Когда исключение возбуждается из demoproc(), оно перехватывается в main(). Затем исключение верхнего уровня отображается, а за ним следует исключение, лежащее в основе, которое извлекается методом getCause().

Сцепленные исключения могут вкладываться на любую глубину. То есть исключениепричина может иметь собственную причину. Но имейте в виду, что слишком длинные цепочки сцепленных исключений, скорее всего, свидетельствуют о плохом дизайне.

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

Потоки данных в Java


Как вы могли заметить, до сих пор в примерах программ было задействовано не так много операций ввода-вывода. Фактически помимо print() и println(), никаких методов ввода-вывода в общем-то и не применялось. Причина этого проста: большинство реальных Java-приложений не являются текст-ориентированными консольными программами. Вместо этого они являются графически-ориентированными программами, которые основаны на Abstract Window Toolkit (AWT) или Swing для взаимодействия с пользователем. Хотя текст-ориентированные программы великолепны в качестве учебных примеров, они не занимают сколько-нибудь значительную часть в мире реальных программ. К тому же поддержка консольного ввода-вывода в Java ограничена и не слишком удобна в использовании — даже для простейших программ. Текстовый консольный ввод-вывод не является важным при программировании на Java. Тем не менее, Java обеспечивает мощную и гибкую поддержку ввода-вывода, когда это касается файлов и сетей. Система ввода-вывода Java целостна и последовательна. Фактически, если однажды разобраться с ее базовыми принципами, все остальное для профессионала становится простым.

Потоки


Java-программы создают потоки ввода-вывода. Поток (stream) — это абстракция, которая либо порождает, либо принимает информацию. Поток связан с физическим устройством с помощью системы ввода-вывода Java. Все потоки ведут себя на один манер, даже несмотря на то, что реальные физические устройства, к которым они подключены, отличаются друг от друга. Таким образом, одни и те же классы и методы ввода-вывода применимы к устройствам разного типа. Аналогично выходной поток может ссылаться на консоль, дисковый файл или сетевое подключение. Потоки — это ясный способ обращения с вводом-выводом без необходимости для вашего кода разбираться с разницей, например, между клавиатурой и сетью. Java реализует потоки внутри иерархии классов, определенных в пакете java.io.
1   ...   56   57   58   59   60   61   62   63   ...   67


написать администратору сайта