Similar presentations:
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.
Stacktraceorg.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 Exceptionpublic 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