Читаем Философия Java3 полностью

at LoggingExceptions.main(LoggingExceptions.java:19)

Перехвачено LoggingException

Aug 30, 2005 4.02.31 PM LoggingException

SEVERE LoggingException

at Loggi ngExcepti ons.mai n(Loggi ngExcepti ons.j ava:24)

Перехвачено LoggingException */// -

Статический метод Logger.getLogger() создает объект Logger, ассоциируемый с аргументом String (обычно имя пакета и класса, к которому относятся ошибки); объект передает свой вывод в System.err. Простейший способ записи информации в Logger заключается в вызове метода, соответствующего уровню ошибки; в нашем примере используется метод severe(). Нам хотелось бы создать String для регистрируемого сообщения из результатов трассировки стека, но метод printStackTrace() по умолчанию не создает String. Для получения String необходимо использовать перегруженную версию printStackTrace() с аргументом java.io.PrintWriter (за подробными объяснениями обращайтесь к главе «Ввод/вывод»). Если передать конструктору PrintWriter объект java.io. StringWriter, для получения вывода в формате String достаточно вызвать toString().

Подход LoggingException чрезвычайно удобен (вся инфраструктура регистрации встроена в само исключение, и все работает автоматически без вмешательства со стороны клиента), однако на практике чаще применяется перехват и регистрация «сторонних» исключений, поэтому сообщение должно генерироваться в обработчике исключения:

//: exceptions/LoggingExceptions2.java // Регистрация перехваченных исключений, import java.util.logging.*; import java.io.*:

public class LoggingExceptions2 { private static Logger logger =

Logger.getLogger("Loggi ngExcepti ons2"): static void logException(Exception e) {

StringWriter trace = new StringWriter(); e.printStackTrace(new PrintWriter(trace)): 1ogger.severe(trace.toStri ng());

}

public static void main(String[] args) { try {

throw new NullPointerException(); } catch(NullPointerException e) { logException(e):

}

}

} /* Output: (90* match)

Aug 30, 2005 4:07:54 PM LoggingExceptions2 logException

SEVERE: java.lang.NullPointerException продолжение &

at LoggingExceptions2 main(LoggingExceptions2 java:16)

*///.-

На этом процесс создания собственных исключений не заканчивается — исключение можно снабдить дополнительными конструкторами и элементами:

//: exceptions/ExtraFeatures.java // Дальнейшее расширение классов исключений, import static net.mindview.util.Print.*:

class MyException2 extends Exception { private int x; public MyException2() {} public MyException2(String msg) { super(msg): } public MyException2(String msg, int x) { super(msg): this.x = x:

}

public int valО { return x: } public String getMessageO {

return "Подробное сообщение: "+ x + " " + super getMessageO:

public class ExtraFeatures {

public static void f() throws MyException2 { print("MyException2 в f()"), throw new MyException2():

}

public static void g() throws MyException2 {

System out.println("MyException2 в g()"); throw new MyException2("Возбуждено в g()");

}

public static void h() throws MyException2 {

System out.println("MyException2 в h()"): throw new MyException2("Возбуждено в h()", 47);

}

public static void main(String[] args) { try {

f():

} catch(MyException2 e) {

e.printStackTrace(System.out);

}

try {

g():

} catch(MyException2 e) {

e.printStackTrace(System out):

}

try {

h():

} catch(MyException2 e) {

e.printStackTrace(System.out):

System out.printlnC'e.valO = " + e.valO):

}

}

} /* Output: MyException2 в f()

MyException2: Подробное сообщение: 0 null

at ExtraFeatures.f(ExtraFeatures.java•22)

at ExtraFeatures.main(ExtraFeatures.java.34) MyException2 в g()

MyException2: Подробное сообщение: 0 Возбуждено в g()

at ExtraFeatures.g(ExtraFeatures.java:26) at ExtraFeatures.main(ExtraFeatures.java:39) MyException2: Подробное сообщение: 47 Возбуждено в h() at ExtraFeatures.h(ExtraFeatures.java:30) at ExtraFeatures.main(ExtraFeatures.java:44)

e.valO = 47 *///:-

Было добавлено поле данных х вместе с методом, считывающим его значение, а также дополнительный конструктор для инициализации х. Переопределенный метод Throwable.getMessage() выводит более содержательную информацию об исключении. Метод getMessage() для классов исключений — аналог toStringO в обычных классах.

Так как исключение является просто видом объекта, расширение возможностей классов исключений можно продолжить. Однако следует помнить, что все эти программисты, использующие ваши библиотеки, могут попросту проигнорировать все «украшения» — нередко программисты ограничиваются проверкой типа исключения (как чаще всего бывает со стандартными исключениями Java).

Спецификации исключений

Перейти на страницу:

Похожие книги

Access 2002: Самоучитель
Access 2002: Самоучитель

В книге рассматривается широкий круг вопросов, связанных с использованием программной среды Access 2002, которая является составной частью пакета Office 2002 и предназначена для создания банка данных в самых различных предметных областях.Подробно описывается методика проектирования объектов базы данных (таблицы, формы, отчеты, страницы доступа к данным, запросы, модули).Детально обсуждаются вопросы создания интегрированной базы данных в единой среде Access 2002: формирование БД с нуля, конвертирование в программную среду баз данных, созданных в ином программном окружении – Clarion, FoxPro.Особое внимание уделяется формированию разнообразных запросов к интегрированной базе данных Access 2002 с использованием языков программирования SQL, VBA и макросов.Приводятся общие сведения о возможностях языка обмена данными между различными компьютерами и приложениями (XML). Описываются возможности использования гиперссылок, связывающих базу данных с другими программными продуктами. Объясняется, как можно работать с базой данных Access 2002 без установки ее на компьютер, используя технологию ODBC (Open Data Base Connectivity). В приложениях приводятся количественные параметры Access 2002 и связанная с этой СУБД терминология.Предлагаемая книга будет полезна специалистам, занимающимся практической разработкой банков данных и приложений на их основе, а также студентам вузов, изучающим информатику.

Павел Юрьевич Дубнов

Программирование, программы, базы данных / ОС и Сети / Книги по IT