Upload
jerome-douglas
View
249
Download
1
Embed Size (px)
Citation preview
Syntax errors A syntax error is a violation of the notational rules ofthe programming language. (synonym: compile-
time errors)
Programming errors (faults) occur in two basic forms:
Logic errors A logic error results in potentially faulty
behavior. Some logic errors are detected by the Java
VM.
The Object of Data Abstraction and Structure, David D. Riley© Addison Wesley pub.
Java run-time errors produce exceptions.
Three Example Exceptions
A detected error is generally called a run-time error.
An exception is an abnormal condition that occurs during software execution.
String str = null;str = str.toLowerCase();
When an exception occurs, it is said that “the exception is ”___________”.
int j = 0;int k = 25/j;
double[ ] arr = new double[3];arr[3] = 29.4;
The Object of Data Abstraction and Structure, David D. Riley© Addison Wesley pub.
Exception reports
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)).
String str = null;str = str.toLowerCase();
int j = 0;int k = 25 / j;
double[ ] arr = new double[3];arr[3] = 29.4;
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>
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>
Exception traceback
Exception occurs in line of methodin class
doSomething called from line of constructor
<init>
Thing constructor called from
line of method of class.
The Object of Data Abstraction and Structure, David D. Riley© Addison Wesley pub.
throw ExceptionObject;
Example
It is also possible to simulate an exception by executing a throw instruction.
where ExceptionObject is an object reference conforming to Exception (Exception is a class from java.lang.)
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()); }
}
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; } . . .}
The Object of Data Abstraction and Structure, David D. Riley© Addison Wesley pub.
???
exceptionhandler
executes
programterminates
program is interrupted
exceptionis thrown
program executing normally
The Object of Data Abstraction and Structure, David D. Riley© Addison Wesley pub.
try Syntaxtry {
tryInstructionBody
} catchClausesfinallyClause
...Body denotes a sequence of instructions.
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.
The Object of Data Abstraction and Structure, David D. Riley© Addison Wesley pub.
try Semantics
Execution of the try begins by executing the tryInstructionBody.
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.
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” );}
Trace the following:
What if this line is deleted?The Object of Data Abstraction and Structure, David D. Riley© Addison Wesley pub.
Details of Exception Handling BehaviorWhen 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.
The Object of Data Abstraction and Structure, David D. Riley© Addison Wesley pub.
Example
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" );}
Start trace by executing cud.
The Object of Data Abstraction and Structure, David D. Riley© Addison Wesley pub.
All Java exceptions are represented by objects. (These objects are automatically passed as parameters to the exception handler.)
Unchecked Exceptions are often severe, unpredictable. may (or may not) be handled by a try
instruction.
Exceptions partitioned into two categories.
The superclass of all exception objects is _________________.
Throwable
«constructor» + Throwable() . . .
«other» + String getMessage() + void printStackTrace() + String toString() . . .
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.)
The Object of Data Abstraction and Structure, David D. Riley© Addison Wesley pub.
Unchecked
Object
Throwable
Error Exception
RuntimeExceptionChecked
Unchecked
Error subclasses (abridged) OutOfMemoryErrorStackOverflowError
Exception subclasses (abridged)
IOException
RuntimeException (abridged) ArithmeticExceptionClassCastExceptionIllegalArgumentExceptionIndexOutOfBoundsExceptionNegativeArraySizeExceptionNullPointerExceptionSecurityException
Classes from java.lang.
The Object of Data Abstraction and Structure, David D. Riley© Addison Wesley pub.
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 ); }
The Object of Data Abstraction and Structure, David D. Riley© Addison Wesley pub.
When a method is called that can potentially throw a checked exception,then the code must do one of two things:
Example
1) Be enclosed within a try instruction with a matching catch clause.
2) The surrounding method must include a throws suffix.
OR
public void cud() throws IOException { . . .}
The Object of Data Abstraction and Structure, David D. Riley© Addison Wesley pub.
Exceptions provide the opportunity to capture runtime errors.
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;}
Such errors are best reported in method preconditions.
The Object of Data Abstraction and Structure, David D. Riley© Addison Wesley pub.