Programming in Java Exceptions Handling Errors using Exceptions

Werbung
Fachbereich Informatik und Elektrotechnik
Java
Programming in Java
Exceptions
Handling Errors using Exceptions
Programming in Java,  Helmut Dispert
Fachbereich Informatik und Elektrotechnik
Exceptions
Exception = Exceptional Event
Exceptions are:
objects,
derived from java.lang.Throwable.
Throwable Objects:
Errors
(Java Structure Violation)
Exceptions
(Java Logic Violations)
Runtime Exceptions
Programming in Java,  Helmut Dispert
Fachbereich Informatik und Elektrotechnik
Exceptions
Creating an Exception
Throw an Exception
Exception handler appropriate to handle the
thrown exception:
Catch the Exception
Exception
Throw
Programming in Java,  Helmut Dispert
Catch
Fachbereich Informatik und Elektrotechnik
Exception Types
Object
Throwable
Exception
Error
RuntimeException
...
...
Programming in Java,  Helmut Dispert
...
Fachbereich Informatik und Elektrotechnik
Exception Types
Errors:
Dynamic Linking Error, hard failure in the virtual machine
VM throws an Error.
Exceptions:
Indication of a not very serious systematic problem
Program throws an Exception.
Runtime Exceptions:
Exceptions that occur within the Java virtual machine
during runtime
(e.g. NullPointerException).
VM throws a Runtime Exception.
Programming in Java,  Helmut Dispert
Fachbereich Informatik und Elektrotechnik
Exception Types
Advantages of Java's Error Handling
1. Error Handling Code is separated from regular code.
2. Error Propagation up the Call Stack.
3. Grouping Error Types and Error Differentiation.
Programming in Java,  Helmut Dispert
Fachbereich Informatik und Elektrotechnik
Call Stack
method1
{
x = method2(...)
}
method2
{
y = method3(...)
}
method3
{
z = method4(...)
}
Programming in Java,  Helmut Dispert
Fachbereich Informatik und Elektrotechnik
Error Differentiation
Exception
⇒
Instances of Throwable
or subclass of Throwable
Object
Throwable
ArrayException
InvalidIndexException
NoSuchElementException
ElementTypeException
Programming in Java,  Helmut Dispert
Fachbereich Informatik und Elektrotechnik
Error Differentiation
Leaf Class (class without subclass):
represents a specific type of exception,
specialized handler.
Node Class (class with one or more subclass):
represents a group of related exceptions,
general handler.
Leaf Class:
catch (InvalidIndexException e)
{
...
}
Node Class:
catch (ArrayException e)
{
...
}
Programming in Java,  Helmut Dispert
Fachbereich Informatik und Elektrotechnik
Catch or Specify Requirement
Catch
Specify Checked Exception
Exception Types:
Runtime Exceptions
I/O-Exceptions
Own Exceptions
A method either has to catch or specify all checked exceptions
that can be thrown within it's scope.
Runtime Exceptions:
Don't have to be caught or specified.
Checked Exceptions:
Not runtime exceptions, checked by the compiler;
checked exceptions must be caught or specified.
Programming in Java,  Helmut Dispert
Fachbereich Informatik und Elektrotechnik
Catch or Specify Requirement
Checked Exceptions:
Due to external circumstances that the programmer cannot
prevent
Compiler checks that these exceptions are handled
All IOExceptions are checked exceptions
Unchecked Exceptions:
Programmers fault, can be prevented
Included exceptions:
e.g. NullPointerException, ArithmeticException
e.g. to avoid the NullPointerException the reference can be
checked for “null”
Programming in Java,  Helmut Dispert
Fachbereich Informatik und Elektrotechnik
Try and Catch
Critical statements are capsuled in
try-catch statements
try
{
<some dangerous action>
}
catch (Exception e)
{
<some reasonable behaviour>
}
.
.
.
finally
{
<something absolutely necessary>
}
Programming in Java,  Helmut Dispert
Fachbereich Informatik und Elektrotechnik
Try and Catch: Syntax Diagram
Syntax Diagram:
try
block
Programming in Java,  Helmut Dispert
catch
(object)
finally
block
catch
(object)
block
block
finally
block
Fachbereich Informatik und Elektrotechnik
Exception Handler Parameter
e: exception handler parameter (variable)
type of exception,
exception message,
stack trace.
Available methods:
e.toString()
e.getMessage()
e.printStackTrace()
Programming in Java,  Helmut Dispert
Fachbereich Informatik und Elektrotechnik
Try and Catch
Example: HelloWorld with Exception Handling
// Hello program with exception handling
class ExceptionalHello2
{
public static void main (String args[])
{
try
/* Now let's say hello */
{
System.out.println("Hello " + args[0]); // line 9
}
catch (Exception e)
{
System.out.println("Hello! Who are you?!");
// e.printStackTrace();
}
}
}
Java
continue
Programming in Java,  Helmut Dispert
Fachbereich Informatik und Elektrotechnik
Try and Catch
continued
java ExceptionalHello2
Output:
Hello! Who are you?!
with (inside catch block):
e.printStackTrace();
Output:
Hello! Who are you?!
java.lang.ArrayIndexOutOfBoundsException:
at
ExceptionalHello2.main(ExceptionalHello2.java:9)
Programming in Java,  Helmut Dispert
Fachbereich Informatik und Elektrotechnik
Writing your own Exception / Example
class SampExcept extends Exception
{
SampExcept (String Message) // Constructor
{
super(Message);
// pass message to parent
}
}
public class ExTest
{
static void range(int numb) throws SampExcept
{
if(numb < 0 || numb > 100)
{
throw new SampExcept("0-100 expected"); // line 15
}
else
{
System.out.println("Number is " + numb);
}
}
continue
Programming in Java,  Helmut Dispert
Fachbereich Informatik und Elektrotechnik
Writing your own Exception / Example
Version 1
public static void main (String args[])
{
try
{
range(75);
range(250);
// line 28
}
catch(SampExcept e)
{
System.out.println("Err: " + e.getMessage());
}
}
}
Output
Number is 75
Err: 0-100 expected
Java
Programming in Java,  Helmut Dispert
Fachbereich Informatik und Elektrotechnik
Writing your own Exception / Example
Version 2
public static void main (String args[])
{
try
{
range(75);
range(250);
// line 28
}
catch(SampExcept e)
{
System.out.println("\n\nError Messages:");
System.out.println("\nErr1:\n" + e.getMessage());
System.out.println("\nErr2:\n" + e.toString());
System.out.println("\nErr3: " );
e.printStackTrace();
}
}
}
Programming in Java,  Helmut Dispert
Fachbereich Informatik und Elektrotechnik
Writing your own Exception / Example
Output
Version 1
Class
Number is 75
Error Messages:
Err1:
0-100 expected
Method
Class
Class
Class
Class
Object
Err2:
SampExcept: 0-100 expected
Err3:
SampExcept: 0-100 expected
at ExTest2.range(ExTest2.java:15)
at ExTest2.main(ExTest2.java:28)
Programming in Java,  Helmut Dispert
Object
Fachbereich Informatik und Elektrotechnik
I/O-Programmierung
catch
import java.io.*;
public class IOTest2
{
public static void main(String[] args)
{
try
{
byte bArray[] = new byte[128];
System.out.print("Texteingabe: ");
System.in.read(bArray);
String s = new String(bArray,0);
System.out.print("Eingabe: ");
System.out.println(s);
}
catch(IOException ioe)
{
System.out.println(ioe.toString());
ioe.printStackTrace();
}
}
}
Programming in Java,  Helmut Dispert
Java
Fachbereich Informatik und Elektrotechnik
I/O-Programmierung
specify
Java
import java.io.*;
public class IOTest22
{
public static void main(String[] args) throws IOException
{
byte bArray[] = new byte[128];
System.out.print("Texteingabe: ");
System.in.read(bArray);
String s = new String(bArray,0);
System.out.print("Eingabe: ");
System.out.println(s);
}
}
Programming in Java,  Helmut Dispert
Herunterladen