Компьютерные книги
Главное меню
Главная Поиск по сайту Добавить материал О нас Карта книг Карта сайта
Реклама
computersbooks.net -> Добавить материал -> Языки программирования -> Карабин П. -> "Язык программирования Java- Создание интерактивных приложений для Internet " -> 26

Язык программирования Java- Создание интерактивных приложений для Internet - Карабин П.

Карабин П. Язык программирования Java- Создание интерактивных приложений для Internet — М.: Бук Пресс, 2006. — 112 c.
ISBN 5-8321-0143-9
Скачать (прямая ссылка): yazikprogramirovnajava2006.pdf
Предыдущая << 1 .. 20 21 22 23 24 25 < 26 > 27 28 29 30 31 32 .. 35 >> Следующая

161
C:\> java ThrowDemo caught inside demoproc recaught :
java.lang.NullPointerException: demo throws
Если метод способен возбуждать исключения, которые он сам не обрабатывает, он должен объявить о таком поведении, чтобы вызывающие методы могли защитить себя от этих исключений. Для задания списка исключений, которые могут возбуждаться методом, используется ключевое слово throws. Если метод в явном виде (т.е. с помощью оператора throw) возбуждает исключение соответствующего класса, тип класса исключений должен быть указан в операторе throws в объявлении этого метода. С учетом этого наш прежний синтаксис определения метода должен быть расширен следующим образом:
тип имя_метода(список аргументов) throws список_исключений {}
Ниже приведен пример программы, в которой метод procedure пытается возбудить исключение, не обеспечивая ни программного кода для его перехвата, ни объявления этого исключения в заголовке метода. Такой программный код не будет оттранслирован.
class ThrowsDemol {
162
static void procedure() {
System.out.println("inside procedure");
throw new
IllegalAccessException("demo");
}
public static void main(String args[]) {
procedure();
} }
Для того, чтобы мы смогли оттранслировать этот пример, нам придется сообщить транслятору, что procedure может возбуждать исключения типа IllegalAccessException и в методе main добавить код для обработки этого типа исключений:
class ThrowsDemo {
static void procedure() throws IllegalAccessException {
System.out.println(" inside procedure");
throw new
IllegalAccessException("demo");
}
public static void main(String
163
a rgs [ ] ) { try {
procedure();
}
catch (IllegalAccessException e) { System.out.println("caught " + e);
}
} }
Ниже приведен результат выполнения этой программы.
С:\> java ThrowsDemo inside procedure caught
java.lang.IllegalAccessException: demo
finally
Иногда требуется гарантировать, что определенный участок кода будет выполняться независимо от того, какие исключения были возбуждены и перехвачены. Для создания такого участка кода используется ключевое слово finally. Даже в тех случаях, когда в методе нет соответствующего возбужденному исключению раздела catch, блок finally будет выполнен до того, как управление перейдет к операторам, следующим за разделом try. У каждого раздела try должен быть по крайней мере или один раздел catch или блок finally.
164
Блок finally очень удобен для закрытия файлов и освобождения любых других ресурсов, захваченных для временного использования в начале выполнения метода. Ниже приведен пример класса с двумя методами, завершение которых происходит по разным причинам, но в обоих перед выходом выполняется код раздела finally.
class FinallyDemo { static void procA() { try {
System.out.printin("inside procA"); th row new RuntimeException("demo");
}
finally {
System.out.println("procA's finally"); } }
static void procB() { try {
System.out.printin("inside procB"); return;
}
finally {
System.out.println("procB's finally"); } }
165
public static void main(String args[]) {
try {
procA();
}
catch (Exception e) {} procB();
} }
В этом примере в методе ргосА из-за возбуждения исключения происходит преждевременный выход из блока try, но по пути «наружу» выполняется раздел finally. Другой метод ргосВ завершает работу выполнением стоящего в try-блоке оператора return, но и при этом перед выходом из метода выполняется программный код блока finally. Ниже приведен результат, полученный при выполнении этой программы.
С:\> java FinallyDemo inside ргосА procA's finally inside procB procB's finally
Подклассы Exception
Только подклассы класса Throwable могут быть возбуждены или перехвачены. Простые
166
типы — int, char и т.п., а также классы, не являющиеся подклассами Throwable, например, String и Object, использоваться в качестве исключений не могут. Наиболее общий путь для использования
исключений — создание своих собственных подклассов класса Exception.
Ниже приведена программа, в которой объявлен новый подкласс класса Exception.
class MyException extends Exception
{
private int detail;
MyException(int a) { detail = a:
}
public String toStringO { return "MyException[ " + detail +
}
}
class ExceptionDemo {
static void compute(int a) throws MyException {
System.out.println("called computer + a +
if (a > 10)
167
throw new MyException(a);
System.out.println("normal exit.");
}
public static void main(String args[]) {
try {
compute(1);
compute(20);
}
catch (MyException e) {
System.out.printin("caught” + e);
}
} }
Этот пример довольно сложен. В нем сделано объявление подкласса MyException класса Exception. У этого подкласса есть специальный конструктор, который записывает в переменную объекта целочисленное значение, и совмещенный метод toString, выводящий значение, хранящееся в объекте-исключении. Класс ExceptionDemo определяет метод compute, который возбуждает исключение типа MyExcepton. Простая логика метода compute возбуждает исключение в том случае, когда значение параметра метода больше 10. Метод main в защищенном блоке вызывает метод compute сначала с допустимым
Предыдущая << 1 .. 20 21 22 23 24 25 < 26 > 27 28 29 30 31 32 .. 35 >> Следующая
Книги
Web-программирован-
ие
Аппаратное обеспечение Графика Руководство по П.О. Самоучитель Теория программирования Фотошоп Языки программирования
Новые книги
Вирт Н. "Систематическое программирование " (Теория программирования)

Эком "Microsoft Excel 2000 шаг за шагом Русская версия самоучитель " (Самоучитель)

Поляков А.Ю. "Методы и алгоритмы компьютерной графики в примерах Vizual C++" (Графика)

Баяковский Ю.М. "Графическая библиотека Open GL " (Графика)

Валиков А. "Технология " (Языки программирования)
Авторские права © 2013 ComputersBooks. Все права защищены.