Cop 3503 fall 2012 shayan javed lecture 11
This presentation is the property of its rightful owner.
Sponsored Links
1 / 89

COP 3503 FALL 2012 Shayan Javed Lecture 11 PowerPoint PPT Presentation


  • 79 Views
  • Uploaded on
  • Presentation posted in: General

COP 3503 FALL 2012 Shayan Javed Lecture 11. Programming Fundamentals using Java. Exception Handling. Errors. Syntax Errors Logic Errors Runtime Errors. Syntax Errors. Arise because language rules weren’t followed. Syntax Errors. Arise because language rules weren’t followed.

Download Presentation

COP 3503 FALL 2012 Shayan Javed Lecture 11

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.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


COP 3503 FALL 2012ShayanJavedLecture 11

Programming Fundamentals using Java


Exception Handling


Errors

  • Syntax Errors

  • Logic Errors

  • Runtime Errors


Syntax Errors

  • Arise because language rules weren’t followed.


Syntax Errors

  • Arise because language rules weren’t followed.

  • Detected by the compiler

    • javac for Java

    • g++ for C++


Logic Errors

  • Program compiles and runs, but results are wrong.


Logic Errors

  • Program compiles and runs, but results are wrong.

  • Detected and fixed through testing.


Logic Errors

  • Program compiles and runs, but results are wrong.

  • Detected and fixed through testing.

  • Arise because logic coded by the programmer was incorrect.


Logic Errors

  • Program compiles and runs, but results are wrong.

  • Detected and fixed through testing.

  • Arise because logic coded by the programmer was incorrect.

    • Example: wrote c = a - b instead of c = a + b


Runtime Errors

  • Occur when program is running – environment detects it and can’t carry it out


Runtime Errors

  • Occur when program is running – environment detects it and can’t carry it out

  • Examples of Code Errors:

    • Divide by zero


Runtime Errors

  • Occur when program is running – environment detects it and can’t carry it out

  • Examples of Code Errors:

    • Divide by zero

    • Array out of bounds


Runtime Errors

  • Occur when program is running – environment detects it and can’t carry it out

  • Examples of Code Errors:

    • Divide by zero

    • Array out of bounds

    • Accessing a null pointer (reference)


Runtime Errors

  • Occur when program is running – environment detects it and can’t carry it out

  • Examples of Code Errors:

    • Divide by zero

    • Array out of bounds

    • Accessing a null pointer (reference)

    • Integer overflow


Runtime Errors

  • Occur when program is running – environment detects it and can’t carry it out

  • Examples of Code Errors:

    • Divide by zero

    • Array out of bounds

    • Accessing a null pointer (reference)

    • Integer overflow

  • Programs crash when such exceptions are not handled


Errors

int[] numbers = { 1.5, 5, 7 };

System.out.prntln(numbers[numbers.length]);

Try to point out all the errors in this code


Errors

int[] numbers = { 1.5, 5, 7 };

System.out.prntln(numbers[numbers.length]);

Syntax Error(s)


Errors

int[] numbers = { 1.5, 5, 7 };

System.out.prntln(numbers[numbers.length]);

Syntax Error(s)


Errors

int[] numbers = { 1.5, 5, 7 };

System.out.prntln(numbers[numbers.length]);

Syntax Error(s)

Runtime Error(s)


Exception

An exception is an event, which occurs during the execution of a program, that disrupts the normal flow of the program’s instructions.


Exception Handling in Java

  • Mechanism for handling exceptions by detecting and responding to them in a systematic, uniform and reliable manner.


Exception Handling in Java

  • Mechanism for handling exceptions by detecting and responding to them in a systematic, uniform and reliable manner.

  • Any exceptions not handled within the Java program are “caught” by the Java Runtime Environment (JRE)


Exception

  • A method in Java throws Exceptions

    • “Something went wrong”


Exception

  • A method in Java throws Exceptions

    • “Something went wrong”

  • Exceptions are Objects

    • Every Exception is a subclass of the Exception class


Unchecked Exceptions/Errors


System Errors


System Errors

  • Thrown by the Java Virtual Machine (JVM)


System Errors

  • Thrown by the Java Virtual Machine (JVM)

  • Represented by the Error class


System Errors

  • Thrown by the Java Virtual Machine (JVM)

  • Represented by the Error class

  • Describes internal system errors


System Errors

  • Thrown by the Java Virtual Machine (JVM)

  • Represented by the Error class

  • Describes internal system errors

  • Rarely occur – if they do you can’t do much other than terminating


Runtime Exceptions (Unchecked)


Checked Exceptions


Checked Exceptions

Need to explicitly deal with

Checked Exceptions:

try and catch them, or throw them


Exception Handling

  • Keywords:

    • try some code, catch any Exceptions


Exception Handling

  • Keywords:

    • try some code, catch any Exceptions

    • or throw an Exception


Exception Handling

  • Keywords:

    • try some code, catch any Exceptions

    • or throw an Exception

    • finally execute some code


Exception Handling

  • Java forces you to deal with checked Exceptions


Exception Handling

  • Java forces you to deal with checked Exceptions

  • Two ways to deal with them:

void p1 () {

try {

riskyMethod();

}

catch (Exception ex) {

....

}

}

(a)


Exception Handling

  • Java forces you to deal with checked Exceptions

  • Two ways to deal with them:

void p1 () {

try {

riskyMethod();

}

catch (Exception ex) {

....

}

}

(a)

void p1 () throws Exception {

riskyMethod();

}

(b)


Exception Handling

  • Remember the clone() method?


Exception Handling

  • Remember the clone() method?

  • Can be written in two ways:

Object clone() {

try {

return super.clone();

}

catch (CloneNotSupportedException ex) {

....

}

}

(a)


Exception Handling

  • Remember the clone() method?

  • Can be written in two ways:

Object clone() {

try {

return super.clone();

}

catch (CloneNotSupportedException ex) {

....

}

}

(a)

Object clone() throws CloneNotSupportedException {

return super.clone();

}

(b)


Exception Handling

  • In the first case, we are catching and handling the Exception


Exception Handling

  • In the first case, we are catching and handling the Exception

  • In the second case we are throwing it – needs to be caught and handled by the calling method


Catching Exceptions

  • A try-catch statement:

    try {

    // Statement(s) which throw Exceptions

    } catch (Exception1exception1) {

    // Handles Exceptions of type Exception1

    } catch (Exception2exception2) {

    // Handles Exceptions of type Exception2

    } catch (Exceptionexception) {

    // Handles Exceptions of type Exception

    // ALL Exceptions

    }

    // Any code after the try-catch block


Catching Exceptions

  • A try-catch statement:

    try {

    // Statement(s) which throw Exceptions

    } catch (CloneNotSupportedException exception1) {

    // Handles Exceptions of type CloneNotSupportedException

    } catch (NullPointerException exception2) {

    // Handles Exceptions of type NullPointerException

    } catch (Exceptionexception) {

    // Handles Exceptions of type Exception

    // ALL Exceptions

    }

    // Any code after the try-catch block


Catching Exceptions

  • A try-catch statement:

    try {

    Circle clone = circle1.clone();

    } catch (CloneNotSupportedException exception1) {

    // Handles Exceptions of type CloneNotSupportedException

    } catch (NullPointerException exception2) {

    // Handles Exceptions of type NullPointerException

    } catch (Exceptionexception) {

    // Handles Exceptions of type Exception

    // ALL Exceptions

    }

    // Any code after the try-catch block


Catching Exceptions

  • ThrownExceptions have to be eventually caught somewhere in your code


Exception Information

  • So an Exception has been caught – what can we do with it?

    try {

    // Statements which throw Exceptions

    } catch (Exceptionexception) {

    // ALL Exceptions

    }


Exception Information

  • Some useful methods in the Throwable class:


Exception Information

  • Some useful methods in the Throwable class:

  • StringtoString():

    • Returns a short description of the Exception


Exception Information

  • Some useful methods in the Throwable class:

  • StringtoString():

    • Returns a short description of the Exception

  • StringgetMessage():

    • Returns a detailed description of the Exception


Exception Information

  • Some useful methods in the Throwable class:

  • StringtoString():

    • Returns a short description of the Exception

  • StringgetMessage():

    • Returns a detailed description of the Exception

  • voidprintStackTrace():

    • Prints the stacktrace information on the console


Exception Information

  • Some useful methods in the Throwable class:

  • voidprintStackTrace():

    • Prints the stacktrace information on the console

      Sample output:

      java.lang.NullPointerExceptionat MyClass.method2(MyClass.java:9) at MyClass.method1(MyClass.java:6) at MyClass.main(MyClass.java:3)


Exception Information

  • Example:

    java.io.PrintWriter output = null;

    try {

    output = newjava.io.PrintWriter(“text.txt”);

    output.println(“Welcome to Java”);

    output.close();

    }

    catch (java.io.IOException ex){

    System.out.println(ex.toString());

    ex.printStackTrace() ;

    }


Problems

  • Example:

    java.io.PrintWriter output = null;

    try {

    output = newjava.io.PrintWriter(“text.txt”);

    output.println(“Welcome to Java”);

    output.close();

    }

    catch (java.io.IOException ex){

    System.out.println(ex.toString());

    ex.printStackTrace() ;

    }

    Must execute output.close() even if Exception occurs


Solution

  • Use the finally clause – for code that must be executed “no matter what”


Solution

  • Use the finally clause – for code that must be executed “no matter what”

    try {

    // Statement(s) which throw Exceptions

    } catch (Exception1exception1) {

    // Handles Exceptions of type Exception1

    } catch (Exceptionexception) {

    // Handles Exceptions of type Exception

    } finally {

    // code executed whether there is an Exception or not

    }


Solution

  • Example:

    java.io.PrintWriter output = null;

    try {

    output = newjava.io.PrintWriter(“text.txt”);

    output.println(“Welcome to Java”);

    }

    catch (java.io.IOException ex){

    ex.printStackTrace() ;

    } finally {

    if (output != null)

    output.close();

    }


The finally block

  • Executed when try block is exited in these ways:


The finally block

  • Executed when try block is exited in these ways:

    • After last statement of try block


The finally block

  • Executed when try block is exited in these ways:

    • After last statement of try block

    • After last statement of the catch block (if an Exception was caught)


The finally block

  • Executed when try block is exited in these ways:

    • After last statement of try block

    • After last statement of the catch block (if an Exception was caught)

    • When an Exception is thrown in try but NOTcaught


The finally block

  • Executed when try block is exited in these ways:

    • After last statement of try block

    • After last statement of the catch block (if an Exception was caught)

    • When an Exception is thrown in try but NOTcaught

      Executed even if there is a return statement prior to reaching the finally block


Throwing Exceptions

  • If written code could encounter a runtime error:


Throwing Exceptions

  • If written code could encounter a runtime error:

  • It creates an Exception object and throws it


Throwing Exceptions

  • If written code could encounter a runtime error:

  • It creates an Exception object and throws it

  • and must also declare it in the method description


Throwing Exceptions

  • If written code could encounter a runtime error:

  • It creates an Exception object and throws it

  • and must also declare it in the method description

    • Only if the Exception is a checked Exception

    • Optional for unchecked


Throwing Exceptions

  • Example:

    publicvoidsetRadius(double newRadius)

    {

    if (newRadius >= 0)

    radius = newRadius;

    else

    throw new IllegalArgumentException(

    "Radius cannot be negative");

    }


Throwing Exceptions

  • Example:

    OPTIONAL

    publicvoidsetRadius(double newRadius) throwsIllegalArgumentException

    {

    if (newRadius >= 0)

    radius = newRadius;

    else

    throw new IllegalArgumentException(

    "Radius cannot be negative");

    }


Throwing Exceptions

try {

Circle c1 = newCircle(5);

c1.setRadius(-5);

}

catch (IllegalArgumentException ex) { System.out.println(ex);

}


Throwing Exceptions

try {

Circle c1 = newCircle(5);

c1.setRadius(-5);

}

catch (IllegalArgumentException ex) { System.out.println(ex);

}

Output:

Radius cannot be negative


Creating Custom Exceptions

  • Create custom Exception classes if predefined classes not sufficient


Creating Custom Exceptions

  • Create custom Exception classes if predefined classes not sufficient

  • To create a custom class:

    • class should extend Exception


Creating Custom Exceptions

  • Create custom Exception classes if predefined classes not sufficient

  • To create a custom class:

    • class should extend Exception

    • Good practice to add:

      • A default (empty) constructor

      • A constructor with one String parameter


Creating Custom Exceptions

public class InvalidRadiusExceptionextends Exception {

private double radius;publicInvalidRadiusException() {

super(“Invalid radius!”);

}

publicInvalidRadiusException(double radius) {

super("Invalid radius!”);

this.radius = radius;

}

publicdoublegetRadius() {

return radius;

}

}


Creating Custom Exceptions

  • Example:

    publicvoidsetRadius(double newRadius) throwsIllegalArgumentException

    {

    if (newRadius >= 0)

    radius = newRadius;

    else

    throw new IllegalArgumentException(

    "Radius cannot be negative");

    }


Creating Custom Exceptions

  • Example:

    publicvoidsetRadius(double newRadius) throwsInvalidRadiusException

    {

    if (newRadius >= 0)

    radius = newRadius;

    else

    throw new InvalidRadiusException(radius);

    }


Creating Custom Exceptions

try {

Circle c1 = newCircle(5);

c1.setRadius(-5);

}

catch (IllegalArgumentException ex) { System.out.println(ex);

}


Creating Custom Exceptions

try {

Circle c1 = newCircle(5);

c1.setRadius(-5);

}

catch (InvalidRadiusException ex) { System.out.println(“Invalid Radius: “ + ex.getRadius());

}


Creating Custom Exceptions

try {

Circle c1 = newCircle(5);

c1.setRadius(-5);

}

catch (InvalidRadiusException ex) { System.out.println(“Invalid Radius: “ + ex.getRadius());

}

Output:

Invalid Radius: -5.0


When to create Custom Exceptions

  • Use the exception classes in the API whenever possible.


When to create Custom Exceptions

  • Use the exception classes in the API whenever possible.

  • Write your own custom exception class if you answer yes to one of the following:


When to create Custom Exceptions

  • Use the exception classes in the API whenever possible.

  • Write your own custom exception class if you answer yes to one of the following:

    • Do you need an exception type that isn’t represented by Java?


When to create Custom Exceptions

  • Use the exception classes in the API whenever possible.

  • Write your own custom exception class if you answer yes to one of the following:

    • Do you need an exception type that isn’t represented by Java?

    • Would it help users if they can differentiate your exceptions from those thrown by classes from other vendors?


When to create Custom Exceptions

  • Use the exception classes in the API whenever possible.

  • Write your own custom exception class if you answer yes to one of the following:

    • Do you need an exception type that isn’t represented by Java?

    • Would it help users if they can differentiate your exceptions from those thrown by classes from other vendors?

    • Do you want to pass more than just a string to the exception handler?


When to use Exceptions

  • Use if the event is exception and truly an error


When to use Exceptions

  • Use if the event is exception and truly an error

  • Do not use it to deal with simple, expected situations

  • Example:

try {

System.out.println(refVar.toString());

}

catch (NullPointerException ex) {

System.out.println("refVar is null");

}


When to use Exceptions

  • Use if the event is exception and truly an error

  • Do not use it to deal with simple, expected situations

  • Example:

  • Replace with:

try {

System.out.println(refVar.toString());

}

catch (NullPointerException ex) {

System.out.println("refVar is null");

}

if (refVar != null)

System.out.println(refVar.toString());

else

System.out.println("refVar is null");


  • Login