1 / 15

Error Handling

Error Handling. Run-time Errors. A detected error is generally called a run-time error . . Java run-time errors produce exceptions . . An exception is an abnormal condition that occurs during software execution. . Three Example Exceptions. String str = null; str = str.toLowerCase();.

tod
Download Presentation

Error Handling

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Error Handling

  2. Run-time Errors A detected error is generally called a run-time error. Java run-time errors produce exceptions. An exception is an abnormal condition that occurs during software execution. Three Example Exceptions String str = null; str = str.toLowerCase(); int j = 0; int k = 25/j; double[ ] arr = new double[3]; arr[3] = 29.4; When an exception occurs, it is said that “the exception is ”___________”.

  3. Exception reports driley>java Driver Exception in thread "main" java.lang.NullPointerException at Driver.main(Driver.java:5) driley> driley>java Driver Exception in thread "main" java.lang.ArithmeticException: / by zero at Driver.main(Driver.java:8) driley> driley>java Driver Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException at Driver.main(Driver.java:11) driley> String str = null; str = str.toLowerCase(); int j = 0; int k = 25 / j; double[ ] arr = new double[3]; arr[3] = 29.4; • The Exception message includes the following information: • • name of the method executing when the exception is thrown. • • type of exception that occurred. • • traceback of all active methods (and class(es), line number(s)).

  4. Exception occurs in line of method in class doSomething called from line of constructor <init> Thing constructor called from line of method of class. Exception traceback driley>java Driver Exception in thread "main" java.lang.NullPointerException at Thing.doSomething(Thing.java:9) at Thing.<init>(Thing.java:5) at Driver2.main(Driver2.java:3) driley>

  5. throw Instruction It is also possible to simulate an exception by executing a throw instruction. throwExceptionObject; where ExceptionObject is an object reference conforming to Exception (Exception is a class from java.lang.) Example public class SimpleFraction { private int numerator, denominator; public SimpleFraction(int n, int d) { IllegalArgumentException error; if (d != 0) { numerator = n; denominator = d; } else { error = new IllegalArgumentException( “Fraction denominator of 0”); throw error; } } public double realValue() { return (double)numerator / denominator; } . . . } public class runFractTest { public static void main(String[ ] args) { SimpleFraction myFrac; myFrac = new SimpleFraction(1, 2); System.out.println(myFrac.realValue()); myFrac = new SimpleFraction(1, 0); System.out.println(myFrac.realValue()); } }

  6. program executing normally exception is thrown program is interrupted exception handler executes program terminates ??? Exception Flow

  7. try Instruction ...Body denotes a sequence of instructions. try Syntax try { tryInstructionBody }catchClauses finallyClause catchClauses Syntax(zero or more repetitions of the following) catch (exceptionClassName parmName ) { exceptionHandlerBody } finallyClause Syntax (optional) finally { finallyBody } exceptionClassName - class conforming to Throwable. parmName - serves as a parameter passed into catch.

  8. What if this line is deleted? try Semantics  Execution of the try begins by executing the tryInstructionBody. Trace the following: System.out.println( “La Crosse” ); try { System.out.println( “River Falls” ); String str; System.out.println( str.trim() ); System.out.println( “Eau Claire” ); } catch ( NullPointerException e) { System.out.println( “Platteville” ); } catch ( ArithmeticException e) { System.out.println( “Oshkosh” ); } finally { System.out.println( “Whitewater” ); }  During the execution of tryInstructionBody the catchClauses serve as exception handlers. The appropriate catchClause is selected by conformance to a catchClauseName  If a finallyClause is included, then it always executes after the try.

  9. Details of Exception Handling Behavior When an exception is thrown execution proceeds as follows: 1)Normal instruction execution is suspended. 2)If the immediately enclosing try contains a matching catch, then the conforming catch clause serves as the exception handler. Otherwise, the current try body is aborted and the thrown exception is forwarded to the next instruction after the try. (If this is the last instruction in a method, then the exception is forwarded to the location of the call.) 3)Repeat Step 2 until an exception handler is located or all try instructions are exhausted. 4)The exception handler is executed, followed by finallyClause (if present). The remainder of the try instruction containing the catchClause is aborted and execution proceeds with the next instruction after the try. 5)If no matching catchClause is found, then this is considered to be an uncaught exception and the program terminates with a traceback.

  10. public void cud() { • try { • System.out.println( "cud: before horn" ); • horn(); • System.out.println( "cud: after horn" ); • udder(); • System.out.println( "cud: after udder" ); • } • catch ( Exception e ) { • System.out.println( "cud handler" ); • } • } • public void horn() { • try { • System.out.println( "horn: before udder" ); • udder(); • System.out.println( "horn: after udder" ); • } • catch ( Exception e ) { • System.out.println( "horn handler" ); • } • } • public void udder() { • System.out.println( ”udder: before exception" ); • throw( new ArithmeticException() ); • System.out.println( ”udder: after exception" ); • } Example Start trace by executing cud.

  11. Throwable «constructor» + Throwable() . . . «other» + String getMessage() + void printStackTrace() + String toString() . . . Exception Types All Java exceptions are represented by objects. (These objects are automatically passed as parameters to the exception handler.) The superclass of all exception objects is _________________. Exceptions partitioned into two categories. Unchecked Exceptions  are often severe, unpredictable.  may (or may not) be handled by a try instruction. Checked Exceptions  should be used for user-created exceptions.  must either be handled by a catch or included in a throws declaration. (throws explained later.)

  12. Object Throwable Error Exception RuntimeException Checked Unchecked Unchecked Exception Types Classes from java.lang. Error subclasses (abridged) OutOfMemoryError StackOverflowError Exception subclasses (abridged) IOException RuntimeException(abridged) ArithmeticException ClassCastException IllegalArgumentException IndexOutOfBoundsException NegativeArraySizeException NullPointerException SecurityException

  13. Example try { . . . } catch ( NullPointerException e ) { System.out.println( ”null handler" ); } catch ( IndexOutOfBoundsException e ) { System.out.println( ”index handler" ); } catch ( OutOfMemoryError e ) { System.out.println( ”memory handler" ); } catch (Exception e ) { System.out.println( e ); }

  14. OR 2) The surrounding method must include a throws suffix. throws When a method is called that can potentially throw a checked exception, then the code must do one of two things: 1) Be enclosed within a try instruction with a matching catch clause. Example public void cud() throws IOException { . . . }

  15. Exceptions in Specifications Exceptions provide the opportunity to capture runtime errors. Such errors are best reported in method preconditions. Example /* pre:arr.length != 0 (throws ArithmeticException) * post: result = (summation of arr[0] through arr[arr.length-1]) / arr.length */ private double arrayAve(int[ ] arr) { int total == 0; for( int j = 0; j != arr.length; j++) { total = total + arr[j]; } return total / arr.length; }

More Related