COMPSCI 230 S Programming Techniques

Slides:



Advertisements
Similar presentations
Pearson Education, Inc. All rights reserved. 1.. Exception Handling.
Advertisements

Exception Handling Chapter 15 2 What You Will Learn Use try, throw, catch to watch for indicate exceptions handle How to process exceptions and failures.
Introduction to Exceptions in Java. 2 Runtime Errors What are syntax errors? What are runtime errors? Java differentiates between runtime errors and exceptions.
Index Exception handling Exception In Java Exception Types
MIT-AITI Lecture 14: Exceptions Handling Errors with Exceptions Kenya 2005.
Exception Handling 1 CISC6795, Spring Introduction 2 Exception – an indication of a problem that occurs during a program’s execution, for examples:
For use of Cleveland State's IST410 Students only 1 Exception.
Slides prepared by Rose Williams, Binghamton University ICS201 Exception Handling University of Hail College of Computer Science and Engineering Department.
Exceptions Briana B. Morrison CSE 1302C Spring 2010.
COP 2800 Lake Sumter State College Mark Wilson, Instructor.
Exception Handling. Introduction An exception is an abnormal condition that arises in a code sequence at run time. In computer languages that do not support.
Exceptions in Java Fawzi Emad Chau-Wen Tseng Department of Computer Science University of Maryland, College Park.
Exceptions. Errors and Exceptions An error is a bug in your program –dividing by zero –going outside the bounds of an array –trying to use a null reference.
1 Lecture#8: EXCEPTION HANDLING Overview l What exceptions should be handled or thrown ? l The syntax of the try statement. l The semantics of the try.
Exceptions. Many problems in code are handled when the code is compiled, but not all Some are impossible to catch before the program is run  Must run.
Exceptions COMPSCI 105 S Principles of Computer Science.
Java Software Solutions Foundations of Program Design Sixth Edition
What is an exception? An exception is: – an event that interrupts the normal processing of the program. –an error condition that violates the semantic.
Chapter 13 Exception Handling F Claiming Exceptions F Throwing Exceptions F Catching Exceptions F Rethrowing Exceptions  The finally Clause F Cautions.
Object Oriented Programming
06 Exception Handling. 2 Contents What is an Exception? Exception-handling in Java Types of Exceptions Exception Hierarchy try-catch()-finally Statement.
Exception Handling in Java Exception Handling Introduction: After completing this chapter, you will be able to comprehend the nature and kinds.
Java Programming Exception Handling. The exception handling is one of the powerful mechanism provided in java. It provides the mechanism to handle the.
Slides Credit Umair Javed LUMS Web Application Development.
Exception Handling Unit-6. Introduction An exception is a problem that arises during the execution of a program. An exception can occur for many different.
Android How to Program, 2/e © Copyright by Pearson Education, Inc. All Rights Reserved.
Exceptions in Java. Exceptions An exception is an object describing an unusual or erroneous situation Exceptions are thrown by a program, and may be caught.
Sheet 3 HANDLING EXCEPTIONS Advanced Programming using Java By Nora Alaqeel.
Exceptions and Assertions Chapter 15 – CSCI 1302.
Exception Handling in Java Topics: Introduction Errors and Error handling Exceptions Types of Exceptions Coding Exceptions Summary.
Exceptions in Java. What is an exception? An exception is an error condition that changes the normal flow of control in a program Exceptions in Java separates.
Exception-Handling Fundamentals  A Java exception is an object that describes an exceptional (that is, error) condition that has occurred in a piece of.
Lecture10 Exception Handling Jaeki Song. Introduction Categories of errors –Compilation error The rules of language have not been followed –Runtime error.
ECE122 L23: Exceptions December 6, 2007 ECE 122 Engineering Problem Solving with Java Lecture 24 Exceptions.
Garbage Collection It Is A Way To Destroy The Unused Objects. To do so, we were using free() function in C language and delete() in C++. But, in java it.
Agenda Introduction Errors and Exception Exception Hierarchy Classification of Exceptions Built in Exceptions Exception Handling in Java User defined.
Object Throwable ErrorException RuntimeException.
Appendix H Exception Handling: A Deeper Look
Java Exceptions a quick review….
Chapter 14 – Exception Handling
Exceptions In this lecture:
Chapter 10 – Exception Handling
OBJECT ORIENTED PROGRAMMING II LECTURE 10 GEORGE KOUTSOGIANNAKIS
MIT AITI 2003 Lecture14 Exceptions
Introduction to Exceptions in Java
Introduction Exception handling Exception Handles errors
Introduction to Exceptions in Java
Exception Handling and Format output-CS1050-By Gayani Gupta
Introduction to OO Program Design
Exceptions 10-Nov-18.
Advanced Programming Behnam Hatami Fall 2017.
E x c e p t i o n s Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. — Martin Golding.
Exception Handling Chapter 9.
ATS Application Programming: Java Programming
Abdulmotaleb El Saddik University of Ottawa
Exception Handling and Reading / Writing Files
Exception Handling Chapter 9 Edited by JJ.
Web Design & Development Lecture 7
Exception Handling in Java
Managing Errors and Exceptions
Lecture 11 Objectives Learn what an exception is.
Errors and Exceptions Error Errors are the wrongs that can make a program to go wrong. An error may produce an incorrect output or may terminate the execution.
Java Programming Exceptions CSC 444 By Ralph B. Bisland, Jr.
Chapter 12 Exception Handling and Text IO Part 1
Exceptions 10-May-19.
Exceptions References: Jacquie Barker, Beginning Java Objects; Rick Mercer, Computing Fundamentals With Java; Wirfs-Brock et. al., Martin Fowler, OOPSLA.
Java Basics Exception Handling.
Exception Objects An exception is an abnormal condition that arises in a code sequence at rum time. Exception is a way of signaling serious problem.
Exception Handling.
Java Programming: From Problem Analysis to Program Design, 4e
Presentation transcript:

COMPSCI 230 S2 2017 Programming Techniques Exceptions

Agenda & Reading Topics: Reading Introduction Exceptions Handling Multiple catch Clauses Nested try Propagating an Exception finally throw throws Reading The Java Tutorial: https://docs.oracle.com/javase/tutorial/essential/exceptions/ The Catch or Specify Requirement Catching and Handling Exceptions Specifying the Exceptions Thrown by a Method How to Throw Exceptions 04

1.Introduction Errors occur in software programs. The Java programming language uses exceptions for error handling With exception handling, a program can continue executing (rather than terminating) after dealing with a problem. i.e. improve your program’s readability, reliability and maintainability. Exception examples: ArithmeticException: attempt to divide by ZERO ArrayIndexOutOfBoundException: use of an invalid array index NullPointerException: an attempt to use an object reference that hasn’t yet been assigned to an object FileNotFoundException: couldn’t find the specific file to read The Java run-time system will attempt to handle the exception (default exception handler), usually by displaying an error message and terminating the program. For example: > java Example1 Exception in thread "main" java.lang.ArithmeticException: / by zero at Example1.main(Example1.java:4) 04

1.Introduction What is an Exception? An exception is an event that occurs during the execution of a program that disrupts the normal flow of instructions during the execution of a program. When an error occurs within a method, the method creates an exception object and hands it off to the runtime system (we called “Exceptions are thrown” ) The exception object contains information about the error, including its type and the state of the program when the error occurred. Information includes: The name of the exception in a descriptive message that indicates the problem that occurred The method-call stack (i.e., the call chain) at the time it occurred. Represents the path of execution that led to the exception method by method. This information helps you debug the program. 04

1.Introduction Java Exception Hierarchy Class Exception and its subclasses represent exceptional situations that can occur in a Java program These can be caught and handled by the application. Class Error and its subclasses represent abnormal situations that happen in the JVM. Errors happen infrequently. These should not be caught by applications. Applications usually cannot recover from Errors. Serious and unrecoverable exceptions, such as running out of memory or Unable to load a needed class Mistake arise in the course of program execution Throwable Exception Error IOException FileNotFoundException RuntimeException ArithmeticException NullPointerException … 04

2.Exceptions Handling exceptions When errors occur, your program ought to Either return to a safe state and enable the user to execute other commands, or Allow user to save all his work and terminate the program gracefully. How? After a method throws an exception, the runtime system attempts to find something to handle it. If the runtime system could not find an appropriate exception handler, the runtime system (and, consequently, the program) terminates. When an appropriate handler is found, the run-time system passes the exception to the handler. An exception handler is considered appropriate if the type of the exception object thrown matches the type that can be handled by the handler. The exception handler chosen is said to catch the exception 04

2.Exceptions No Exception Handler Examples: Example1.java Example2.java The exception is caught by the default Exception Handler The java run-time system displays a string describing the exception and prints a stack trace from the point at which the exception occurred, and terminates the program. Example 1 Example 2 > java Example1 Exception in thread "main" java.lang.ArithmeticException: / by zero at Example1.main(Example1.java:4) int value = 0; int answer = 100 / value; System.out.println("This will not be printed"); > java Example2 Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1 at Example2.main(Example2.java:6) int[] array = new int[1]; array[0] = 1; array[1] = 2; // ERROR System.out.println("This will not be printed"); 04

2.Exceptions Basic try-catch block try block Place the code that might cause the exception in a try block When error happens, Java ignore the rest of the code in the try block and jumps to the catch block catch block Specify the exception that you wish to catch, or catch the general exception (e.g. Exception e) Since all exceptions are subclasses of the Exception class, you can catch all exceptions using this way. Execute the code if the exception is thrown Skip the code if no exception Statements after the catch block Execute if either the exception is not thrown or if it is thrown try { ... } catch (Exception e) { System.out.println("Error"); } System.out.println("continue to run..."); 04

2.Exceptions try-catch Note: > java Example3 _________ <- 2 ____________________________ <- 3 Note: “This will not be printed” – this statement is never executed //1 (in case of error, control jumps out from the try block to the catch block) The catch block catches all types of exception. It prints an error message. //2 By catching the exception, it allows the program to continue executing. try { value = 0; int answer = 100 / value; System.out.println("This will not be printed"); //1 } catch (Exception e) { System.out.println("Error"); //2 value = -1; } System.out.println("Program can continue to run..."); //3 Example: Example3.java 04

2.Exceptions Example 4 Note: “This will not be printed” – this statement is never executed. The catch block catches the ArrayIndexOutOfBoundException. The argument type of the catch block, ExceptionType, declares the type of exception that the handler can handle and It must be the name of a class that inherits from the Throwable class. The system considers it a match if the exception object can legally be assigned to the exception handler's argument. By catching the exception, it allows the program to continue executing. try { int[] array = new int[1]; array[0] = 1; array[1] = 2; // ERROR System.out.println("This will not be printed"); } catch (ArrayIndexOutOfBoundsException e) { System.out.println("ERROR!"); } System.out.println("Finish! "); Example: Example4.java > java Example4 ________ __________ 04

2.Exceptions Exercise 1 What is the output of the following code fragment? int result; int[] nums = { 2, 3, 4, 2, 4 }; try { result = nums[ nums.length ]; System.out.println( "See you" ); } catch( ArrayIndexOutOfBoundsException e ) { System.out.println( "Index error" ); result = -1; } System.out.println( " Result: " + result ); 04

3.Multiple catch clauses Handling Multiple catch clauses You can put two or more catch clauses, each catch block is an exception handler and handles the type of exception indicated by its argument in a program. No code can be between the end of the try block and the beginning of the first catch block: The runtime system invokes the exception handler when the handler is the first one matches the type of the exception thrown. It executes the statement inside the matched catch block, the other catch blocks are bypassed and continues after the try-catch block. Consider the following cases: No Exception Exception (e.g. NumberFormatException) Uncaught exception - there are no matching catch blocks. General Exception (Superclass) Order of Catch Clauses try { ... } catch (ExceptionType name) {... } ... 04

3.Multiple catch clauses Case 1: No Exception Example: Example5_1.java Note: No exception occurs in the above program The runtime system executes all statements within the try block It skips all statements in all catch blocks It continues to run with the first statement after the catch blocks until the end >java Example5_1 ___________ try { String c = "10"; int r1 = Integer.parseInt(c); } catch (NumberFormatException e) { System.out.println("Incorrect Format!"); } catch (Exception e) { System.out.println("General Exception Error!"); } System.out.println("Finished!"); 04

3.Multiple catch clauses Case 2: Exception >java Example5_2 ______________ ____________ Note: If an exception occurs in a try block, the try block terminates immediately. The java run-time system scan sequentially for an exception type matching the exception that was thrown By catching the NumberFormatException, it executes the code in the matching catch block, skips any remaining catch blocks, continues after the try-catch block. try { String c = "abacde"; int r1 = Integer.parseInt(c); } catch (NumberFormatException e) { System.out.println("Incorrect Format!"); } catch (Exception e) { System.out.println("General Exception Error!"); } System.out.println("Finished!"); 04

3.Multiple catch clauses Case 3: Uncaught exception Example: Example5_3.java Note: If no matching catch block is found, the Java run-time system will attempt to handle the exception, by terminating the program. try { String c = "abacde"; int r1 = Integer.parseInt(c); } catch (ArrayIndexOutOfBoundsException e) { System.out.println("Error!"); } catch (ArithmeticException e) { System.out.println("Calculation Error!"); } System.out.println("Finished!"); throws NumberFormatException >java Example5_3 Exception in thread "main" java.lang.NumberFormatException: For input string: "abcde" ... 04

3.Multiple catch clauses Case 4: General Exception Example: Example5_4.java Note: Exceptions are arranged in an inheritance hierarchy. A catch specifying an Exception near the top of the hierarchy (a very general Exception) are match any Exception in the subtree. try { String c = "abacde"; int r1 = Integer.parseInt(c); } catch (ArithmeticException e) { System.out.println("Calculation Error !"); } catch (Exception e) { System.out.println("General Exception Error!"); } System.out.println("Finished!"); throws NumberFormatException matched java Example5_4 ___________________ ___________ 04

3.Multiple catch clauses Order of catch clauses Example: Example5_5.java try { String c = "abacde"; int r1 = Integer.parseInt(c); } catch (Exception e) { System.out.println("General Exception Error!"); } catch (NumberFormatException e) { System.out.println("Incorrect Format!"); } System.out.println("Finished!"); Note: Specific exceptions are derived from more general types Both the specific and general types from which they are derived will handle exceptions of the more specific type So Exception subclass (specific type of exception) must come before any of their superclass (general Exception) If not, the program can’t be compiled Example5_5.java:10: exception java.lang.NumberFormatException has already been caught } catch (NumberFormatException e) { ^ 04

3.Multiple catch clauses Exercise 2 What is the output of the following code fragment? int num = 0; try { num = Integer.parseInt( "0" ); num = 100 / num; System.out.println( "A" ); } catch( NumberFormatException e ) { System.out.println( "User error" ); num = -1; } catch( ArithmeticException e ) { System.out.println( "Division by 0" ); } System.out.println( "Number: " + num ); 04

4.Nested try-catch Nested try-catch In Java, a try statement can be inside the block of another try. Example: If an inner try statement does not have a matching catch statement for a particular exception, the next try statement’s catch handlers are inspected for a match. This continues until one of the catch statements succeeds, or until all of the nested try statements are exhausted. If no catch statements match, then the Java run-time system will handle the exception. try { ... } catch (Exception e) { } Outer Try-catch block Inner Try-catch block 04

4.Nested try-catch Caught by Inner Try Example: Example6_1.java Note: The exception is caught by the inner exception handler when i is 1. It prints out the error message and continues to run for the next iteration (i=2). Again, the exception is handled when i is equals to 2. And the program continues to run to the last iteration. int number[] = {4, 8, 16, 32}; int denom[] = {2, 0, 0, 4}; try { for (int i =0; i< number.length; i++) { System.out.println( number[i]+"/"+ denom[i]+" is "+number[i]/denom[i]); } catch (ArithmeticException e) { System.out.println("Can't divide by ZERO!"); } } catch (ArrayIndexOutOfBoundsException ex) { System.out.println("No matching element found."); Throws an exception when 8 is divided by 0 catch the ArithmeticExcpetion >java Example6_1 _________ ____________________ 04

4.Nested try-catch Caught by Outer Try Example: Example6_2.java >java Example6_2 _________ ____________________ Note: If no matching catch block is found in the inner block, the next catch handlers in the outer try block is inspected for a match. If no catch statements match, then the Java run-time system will handle the exception. But if a matching block is found, the system will jump out of the outer try block (and the for-loop) int number[] = {4, 8, 16, 32}; int denom[] = {2}; try { for (int i =0; i< number.length; i++) { System.out.println( number[i]+"/"+ denom[i]+“ is "+number[i]/denom[i]); } catch (ArithmeticException e) { System.out.println("Can't divide by ZERO!"); } } catch (ArrayIndexOutOfBoundsException ex) { System.out.println("No matching element found."); Throws an ArrayIndexOutOfBound when i=1 catch the ArrayIndexOutOfBound 04

4.Nested try-catch Exercise 3 What is the output of the following code fragment? int num = 0; String s = null; try { num = s.length(); System.out.println( "A" ); num = 200/num; System.out.println( "B" ); } catch( NullPointerException e ) { System.out.println( "C Error" ); } System.out.println( "D" ); } catch( ArithmeticException e ) { System.out.println( "E Error" ); System.out.println( "F" ); 04

5.Exception Propagation If it is not appropriate to handle the exception where it occurs, it can be handled at a higher level When an exception occurs, the Java run-time system propagates to each of the calling methods to see whether the exception is being handled (by a try- catch block). This is called exception propagation. The first method it finds that catches the exception will have its catch block executed. At this point the exception has been handled, and the propagation stops (no other catch blocks will be executed). Execution resumes normally after this catch block. But if we get all the way back to main and no method catches this exception, then it is caught by the default exception handler and program terminates. Consider the following cases: Propagation Normal catch Exception is not found 04

5.Exception Propagation Propagation Example: Example7_2.java >java Example7_2 main+ Method1+ Format Error! Finished! Note: The main method calls method1. A NumberFomratException occurs in method1. It is not caught by the handler in method1. The exception is propagated to the method caller and it it is caught by the catch block in the main method. "Method-”, “main-” are not printed. try { System.out.println("main+"); method1(); System.out.println("main-"); } catch (NumberFormatException e) { System.out.println("Format Error!"); } System.out.println("Finished!"); public static void method1() { try { System.out.println("Method1+"); String c = "abcde"; int r1 = Integer.parseInt(c) / Integer.parseInt(c); } catch (ArithmeticException e) { System.out.println("Calculation Error!"); } System.out.println("Method1-"); Caught the exception Throws a NumberFormatException No matching catch block 04

5.Exception Propagation Example: Normal Example: Example7_1.java >java Example7_1 main+ Method1+ Calculation Error! Method1- Main- Finished! Note: The main method calls method1. Method1 throws an ArithmeticException. It is caught by the handler in method1. The program continues to run until the end. try { System.out.println("main+"); method1(); System.out.println("main-"); } catch (NumberFormatException e) { System.out.println("Format Error!"); } System.out.println("Finished!"); public static void method1() { try { System.out.println("Method1+"); String c = "0"; int r1 = Integer.parseInt(c) / Integer.parseInt(c); } catch (ArithmeticException e) { System.out.println("Calculation Error!"); } System.out.println("Method1-"); no exception Throws a ArithmeticException the catch block 04

5.Exception Propagation Example: Not Matched Example: Example7_3.java >java Example7_3 main+ Method1+ Exception in thread "main" java... Note: The main method calls method1. Method1 throws an NumberFormatException. It is not caught by the handler in method1 and in the main method either. The exception is handled by the default exception handler. The program terminates. "Method-”, “main-”, “Finished” are not printed. try { System.out.println("main+"); method1(); System.out.println("main-"); } catch (ArrayIndexOutOfBoundsException e) { System.out.println("Format Error!"); } System.out.println("Finished!"); public static void method1() { try { System.out.println("Method1+"); String c = "abcde"; int r1 = Integer.parseInt(c) / Integer.parseInt(c); } catch (ArithmeticException e) { System.out.println("Calculation Error!"); } System.out.println("Method1-"); No matching catch block Throws a NumberFormatException No matching catch block 04

5.Exception Propagation Exercise 4 What is the output of the following method? try { method1( 0, "" ); System.out.println( "A" ); } catch( ArithmeticException e ) { System.out.println( "B Error" ); } public static void method1(int num, String s) { System.out.println("Method1+"); try { num = s.length(); num = 200/num; System.out.println( "D" ); } catch( NullPointerException e ) { System.out.println( "E Error" ); } System.out.println("Method1-"); 04

6.Finally Code within a finally block is guaranteed to be executed if any part of the associated try block is executed regardless of an exception being thrown or not. It allows for cleanup of actions that occurred in the try block but may remain undone if an exception is caught Guaranteed to be executed in the event that code in the associated try executes a return, continue, or break Consider the following cases: No Exception Exception Exception is Not Matched Return 04

Example: Example8_1.java 6.Finally No Exception Example: Example8_1.java >java Example8_1 _____________ Note: The try block runs to the end and no exception is thrown. The finally block runs after the try block/. try { String a = "100"; int r2 = Integer.parseInt(a) / Integer.parseInt(a); } catch (ArithmeticException e) { System.out.println("Calculation Error"); } catch (Exception e) { System.out.println("General Exception"); } finally { System.out.println("Finally"); } System.out.println("Finished"); 04

Example: Example8_2.java 6.Finally Exception >java Example8_2 _____________ Example: Example8_2.java Note: An exception is thrown in the try block and caught in the matching catch block The finally block runs after the catch block try { String a = "0"; int r2=Integer.parseInt(a) / Integer.parseInt(a); } catch (ArithmeticException e) { System.out.println("Calculation Error"); } catch (Exception e) { System.out.println("General Exception"); } finally { System.out.println("Finally"); } System.out.println("Finished"); 04

Example: Example8_3.java 6.Finally Not Matched Example: Example8_3.java >java Example8_3 _____________ Exception in thread ... Note: An exception is thrown in the try block and there is no matching catch block The finally block is executed before the method ends Code that is after the catch block but not in a finally block would not be executed in this situation (“Finished” is not shown) The exception is caught by the default exception handler and program terminates try { String a = "abcde"; int r2=Integer.parseInt(a) / Integer.parseInt(a); } catch (ArrayIndexOutOfBoundsException e) { System.out.println("Error"); } catch (ArithmeticException e) { System.out.println("Calculation Error!"); } finally { System.out.println("Finally block"); } System.out.println("Finished"); 04

Example: Example8_4.java 6.Finally Return Example: Example8_4.java try { String a = "0"; int r2 = Integer.parseInt(a) / Integer.parseInt(a); } catch (ArithmeticException e) { System.out.println("Calculation Error"); return; } catch (Exception e) { System.out.println("General Exception"); } finally { System.out.println("Finally block"); } System.out.println("Finished"); >java Example8_4 _____________ Note: Code within a finally block is guaranteed to be executed, even in return The finally block is executed before the method ends Code that is after the catch block but not in a finally block would not be executed in this situation (“Finished” is not shown) 04

6.Finally Exercise 5 What is the output of the following code fragment? int num = 0; System.out.println( "A" ); try { num = 200/num; System.out.println( "B" ); } finally { System.out.println( "D Finally" ); } System.out.println( "E" ); 04

7.Explicitly Throw Exceptions We can throw an exception explicitly using the throw statement The throw statement requires a single argument: a throwable object. Throwable objects are instances of any subclass of the Throwable class. Result: The program stops immediately after the throw statement; and any subsequent statements are not executed. It is normally used in testing and debugging purpose if (condition) throw new Exception(“Exception occurs.”); 04

7.throw Example >java Example9 _____________ java.lang.Exception: Throw an error Example: Example9.java Note: The program throw an exception explicitly when i is equals to 0. The code after the exception is not executed. (“main-” is not shown) The exception is caught by the catch block and the program continues to run until the end. try { System.out.println("main+"); int i = 0; if (i <= 0) throw new Exception("Throw an error"); System.out.println("main-"); } catch (Exception e) { System.out.println(e); } finally { System.out.println("Finally block!"); } System.out.println("Finished!"); 04

7.throw Re-throw If the catch handler catches an exception and cannot process it or the exception need further processing outside of the handler. The catch handler can simply rethrow the exception with a throw statement Since you already have the reference to the current exception, you can just simply rethrow it Such a throw statement rethrows the exception to the next enclosing try block. Any further catch clauses for the same try block are still ignored. Everything about the exception object is preserved try { ... } catch (Exception e) { throw e; } 04

7.throw Example Example: Example10.java try { System.out.println("main+"); method1(); System.out.println("main-"); } catch (Exception e) { System.out.println("caught from main"); } >java Example10 main+ method1+ rethrow an exception finally block caught from main Note: Rethrow the exception from the exception handler. You must declare the exception in the method declaration The rethrows statement throws the exception to the next enclosing try block from the main method. public static void method1() throws Exception{ try { System.out.println("method1+"); throw new Exception(); } catch (Exception e) { System.out.println("rethrow an exception"); throw e; } finally { System.out.println("finally block"); } Caught the exception Throws a Exception catch and re-throw 04

7.throw Exercise 6 What is the output of the following code fragment? int num = 8; if (num % 2 == 0) { throw new ArithmeticException("Incorrect input"); } try { System.out.println("A"); } catch(ArithmeticException e) { System.out.println(e); System.out.println("B"); 04

8.throws A throws clause lists the exceptions that can be thrown by a method Sometimes, it’s better to not catch the exception and to allow a method further up to handle it. The method must specify the exceptions that it can throw instead of catching them Add a throws clause to the method declaration. The throws clause comprises the throws keyword followed by a comma-separated list of all the exceptions thrown by that method. public void method1() throws IOException { ... } public void method2() throws IOException, ArrayIndexOutOfBoundsException{ ... } 04

8.throws Checked Exceptions Compiler enforces a catch-or-declare requirement for checked exceptions. If a method throws a checked exception, it expects the catch block to be in that method unless it is deferred by a throws-clause. If the catch-or-declare requirement is not satisfied, the compiler will issue an error message. If the calling method also defers with a throw-clause, its calling program is expected to have the catch block, etc., up the line all the way to the main method, until a catch block is found. Runtime exceptions: Occur within the Java runtime system: arithmetic exceptions, pointer exceptions and indexing exceptions Non-runtime exceptions Occur in code outside of the Java runtime system. (e.g. exceptions that occur during I/O) The compiler ensures that non-runtime exceptions are caught or specified; thus, they are also called checked exceptions. 04

8.throws Exceptions Throwable Error Exception IOException RuntimeException OutOfMemoryError StackOverflowError ArithmeticException NullPointerException NumberFormatException Checked exceptions FileNotFoundException IndexoutOfBoundsException ArrayIndexoutOfBoundsException StringIndexoutOfBoundsException 04

8.throws try & catch Vs throws Examples: Example11_1.java Example11_2.java Which one should I use? Use try and catch If it’s clear what action should be taken and if the local block can perform that action. The java runtime system catches the exception and continues to run until the end even it reaches an error. Use throws Where it’s not clear what action should be taken The program terminates when an exception is thrown inside the main method. public static void main(String[] args) { try { throw new Exception("Throw an error"); } catch (Exception e) { System.out.println(e); } public static void main(String[] args) throws Exception { throw new Exception("Throw an error"); } 04

8.throws Exercise 7 Rewrite the following method by using a “throws” clause try { System.out.println("main+"); method1(); System.out.println("main-"); } catch (Exception e) { System.out.println("Error!"); } System.out.println("Finished!"); public static void method1() { try { System.out.println("Method1+"); String c = "abcde"; int r1 = Integer.parseInt(c) / Integer.parseInt(c); } catch (ArithmeticException e) { System.out.println("Calculation Error!"); } System.out.println("Method1-"); 04