186.50K
Category: programmingprogramming

Lection_Exceptions

1.

Виды исключений
Throwable — базовый класс для всех
исключительных ситуаций.
Error — базовый класс для исключительных
ситуаций, вызванных серъезными сбоями в
работе виртуальной машины Java.
Exception — это базовый класс для всех тех
исключений, с которыми мы имеем дело в
программах.
RuntimeException – ошибка времени
выполнения. Ее обработка не обязательна.

2.

Иерархия исключений

3.

Генерация исключений
Два варианта генерации исключений –
автоматическая и программная.
• Автоматическая генерация исключения
производится, если Java-машина обнаруживает
некоторую ошибку, например, деление на ноль,
ошибку приведения типов или обращение к полям и
методам объекта по объектной ссылке, значение
которой null.
str.equals(“abc”)

4.

Программная генерация исключений
Программная генерация производится с помощью
оператора throw:
throw new IllegalArgumentException("Параметр age
должен быть положительным числом");
При этом, если исключение не обрабатывается в
данном методе, в описании метода должна стоять
директива throws.
public InputStream getFileStream() throws IOException{
return new FileInputStream(“dummy.txt”);
}

5.

Обработка исключений
try{

}catch(SomeException1 e){

}catch(SomeException2 e){

}finally{

}

6.

Пример обработки исключений
try {
function1();
} catch (FileNotFoundException e) {
System.out.println("FileNotFoundException");
} catch (IOException e) {
System.out.println(''IOException'');
} catch (ArithmeticException e) {
System.out.println(''ArithmeticException'');
} finally {
System.out.println("finally");
}

7.

В описание исключения добавляйте
информацию о причине его возникновения
public void savePerson(String name, int age) throws SQLException{
if (age < 0 && age > 200){
throw new IllegalArgumentException(“Incorrect value for age ”
+ age);
}
if (name == null && “”.equals(name)){
throw new IllegalArgumentException(“Name must not be
empty”);
}

}

8.

Stacktrace
org.eclipse.core.runtime.CoreException: Plug-in org.eclipse.jdt.ui was unable to load class
org.eclipse.jdt.internal.ui.packageview.PackageExplorerPart.
at org.eclipse.core.internal.RegistryStrategyOSGI.throwException(RegistryStrategyOSGI.java:194)
at org.eclipse.RegistryStrategyOSGI.createExecutableExtension(RegistryStrategyOSGI.java:176)
at org.eclipse.ExtensionRegistry.createExecutableExtension(ExtensionRegistry.java:905)
at org.eclipse.ConfigurationElement.createExecutableExtension(ConfigurationElement.java:243)
Caused by:
org.eclipse.core.runtime.internal.adaptor.EclipseLazyStarter$TerminatingClassNotFoundException: An error
occurred while automatically activating bundle org.eclipse.jdt.ui (199).
at org.eclipse..EclipseLazyStarter.postFindLocalClass(EclipseLazyStarter.java:124)
at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClass(ClasspathManager.java:469)
at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53)
Caused by: org.osgi.framework.BundleException: The activator org.eclipse.jdt.internal.ui.JavaPlugin for bundle
org.eclipse.jdt.ui is invalid
at org.eclipse.osgi.framework.internal.core.AbstractBundle.loadBundleActivator(AbstractBundle.java:172)
Caused by: org.eclipse.swt.SWTException: Invalid thread access
at org.eclipse.swt.SWT.error(SWT.java:4397)
... 71 more

9.

Custom Exception
public class MyException extends Exception {
private static final long serialVersionUID = -5698L;
public MyException() {
}
public MyException(String message) {
super(message);
}
public MyException(Throwable cause) {
super(cause);
}
public MyException(String message, Throwable cause) {
super(message, cause);
}
public MyException(String message, Throwable cause,
boolean enableSuppression, boolean writableStackTrace){
super(message, cause, enableSuppression,
writableStackTrace);
}
}

10.

Важные методы классов исключений
String getMessage()
Возвращает текстовое сообщение
String getLocalizedMessage()
Возвращает локализованное сообщение
(для разных локалей)
Throwable getCause()
Источник исключения
Throwable initCause(Throwable
cause)
Инициализация источника исключения
void printStackTrace()
Выводит stacktrace в поток вывода
StackTraceElement[]
getStackTrace()
Возвращает массив элементов stacktrace
English     Русский Rules