Download presentation
Presentation is loading. Please wait.
Published byKelsey Farren Modified over 10 years ago
1
Java Exception Very slightly modified from K.P. Chow University of Hong Kong (some slides from S.M. Yiu)
2
Exception Example public class test { public static void main(String[] args) { int temp[] = new int[3]; temp[3] = 4; ….. } C:\> java test Exception in thread “main” java.lang.ArrayIndexOutOfBoundsException at test.main(test.java:4) An event that occurs during the execution of a program that disrupts the normal flow of instructions javac test.java Error detected in runtime.
3
Example import java.io.*; public class test2 { public static void main(String[] args) { File input = new File(“input.txt”); FileInputStream in = new FileInputStream(input); ….. } C:\> javac test.java test2.java:5: unreported exception java.io.FileNotFoundException; must be caught or declared to be thrown FileInputStream in = new FileInputStream(input); ^ 1 error Detected in compile time
4
Mechanism for handling exceptions Call Stack Example method1 { call method2; } method2 { call method3; } method3 { call method4; } method4 { ………. } method1 method2 method3 Exception!! Throwing an exception Create an exception object and runtime system take over Runtime system N method3? Y N method2? Y N method1? Y method4? Exception handler in Y Catch the exception N Sys. stops
5
Two Types of Exception runtime exceptions checked exceptions occurs within Java runtime system e.g. Division by zero ArrayIndexOutofBounds occurs outside the control of Java runtime system e.g. IO exception FileNotFoundException compile time checking run time checking Must be caught or thrown implement exception handler Notify calling methods Q: what exception to worry For each method?
6
Exception Hierarchy (part of) Exception IOException InterruptedException RuntimeException NullPointerException ClassCastException
7
Exceptions can be thrown by a method Exception thrown by this method Exception thrown by called methods Example(1) in java.io.InputStream class, public int read(byte[], b) throws IOException (Exception Type, must be a class inherits from the “Throwable” class) Example(2) import java.io.*; public void m1( ){ int b = System.in.read( ); } similar for read( ) Error!!! m1 has to either catch or throw IOException Leave it to calling method to handle
8
Example(3) import java.io.*; public void m1( ){ m2( ); } public void m2( ){ m3( ); } public void m3( ) throws IOException { int b = System.in.read( ); } Error!! m2 has to either catch or throw IOException public void m2( ) throws IOException { m3( ); } Error!! m1 has to either catch or throw IOException public void m1( ) throws IOException { m2( ); } Compile ok, but do not handle the exception….
9
import java.io.*; import java.util.Vector; public class ListOfNumbers { private Vector v; private static final int SIZE = 10; public ListOfNumbers( ) { v = new Vector(SIZE); for (int i=0; i < SIZE; i++) { v.addElement(new Integer(i)); } public void writeList() { PrintWriter out = new PrintWriter(new FileWriter(“out.txt”)); for (int i=0; i<SIZE; i++) { out.println(v.elementAt(i)); } out.close(); } public FileWriter(String fileName) throws IOException runtime exception: ArrayIndexOutOfBoundsException REQUIRED to catch or throw NOT required to catch or you can
10
Catch the exception – exception handler try { block of statements } catch (ExceptionType name) { exception handler 1 } catch (ExceptionType name) { exception handler 2 } statements that may throw exceptions Each catch block is an exception handler taking care of different exceptions
11
public void writeList() { PrintWriter out = new PrintWriter(new FileWriter(“out.txt”)); for (int i=0; i<SIZE; i++) { out.println(v.elementAt(i)); } out.close(); } public void writeList() { try { PrintWriter out = new PrintWriter(new FileWriter(“out.txt”)); for (int i=0; i<SIZE; i++) { out.println(v.elementAt(i)); } out.close( ); } catch (ArrayIndexOutOfBoundsException e) { System.err.println(“Caught ArrayIndexOutOfBoundsException”); } catch (IOException e) { System.err.println(“Caught IOException”); }
12
public void writeList() { try { PrintWriter out = new PrintWriter(new FileWriter(“out.txt”)); for (int i=0; i<SIZE; i++) { out.println(v.elementAt(i)); } out.close( ): } catch (ArrayIndexOutOfBoundsException e) { System.err.println(“Caught ArrayIndexOutOfBoundsException”); } catch (IOException e) { System.err.println(“Caught IOException”); } May not get executed! use a finally block (always will execute, even if we jump out of try block)
13
public void writeList() { try { PrintWriter out = new PrintWriter(new FileWriter(“out.txt”)); for (int i=0; i<SIZE; i++) { out.println(v.elementAt(i)); } } catch (ArrayIndexOutOfBoundsException e) { System.err.println(“Caught ArrayIndexOutOfBoundsException”); } catch (IOException e) { System.err.println(“Caught IOException”); } finally { if (out != null) { out.close( ); } How about if writeList do not want to handle it? public void writeList() throws IOException { public void writeList() throws IOException, ArrayIndexOutOfBoundsException { If throw, an old exception might be lost
14
Can I create my own Exception classes? Object Throwable Exception RuntimeException Example public class NewException extends Exception { ……} differentiate your exceptions from existing ones…. Example public class NewException extends RuntimeException { ……} Not required to catch or throw
15
Example: Assign 1 in Integer class: public static int parseInt(String s) throws NumberFormatException; … public static void main( String[] args) { int j; j = Integer.parseInt(args[0]); ….. } public static void main( String[] args) { int j; try { j = Integer.parseInt(args[0]); } catch (NumberFormatException e) { System.out.println(“wrong input format”); } …..
16
exception.printStackTrace() prints: –Error message –Exception class name –Descriptive string stored in the exception throw new Exception(“descriptive string”); –List of methods that had not completed execution exception.getMessage() –Returns the descriptive string stored in the exception exception.getStackTrace() –Used to output to other forms (see next page)
17
StackTraceElement[] trace = exception.getStackTrace(); For(int I=0; I<trace.length;I++){ StackTraceElement current = trace[I]; System.out.print(current.getClassName() + “\t” ); System.out.print(current.getFileName() + “\t” ); System.out.print(current.getLineNumber () + “\t” ); System.out.print(current.getMethodName() + “\n” ); }
18
Storing chained exception info. Catch one- throw another, but can keep the info of the old one. catch (NumberFormatException e) { throw new Exception(“descriptive string”,e); }
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.