©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter Chapter 8 Exception Handling Sections 1-5, 7
©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter Definition An exception represents an error condition that occurs during the normal course of program execution. –Exceptions are error conditions that are not the fault of the programmer When an exception occurs, (we say it is thrown), the normal sequence of flow is terminated. When an exception-handling routine is executed, we say the exception is caught.
©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter Programming with Exceptions As a programmer, you have control over what happens when an exception is thrown –If you do nothing, the program will quit –You can add code to recover from the exception where it occurs in any method on the call stack when the exception is thrown You can create and throw exceptions when errors occur in the program You can create your own exception classes –Extend Exception or RuntimeException
©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter Ignoring Exceptions String inputStr; int age; inputStr = JOptionPane.showInputDialog(null, "Age:"); age = Integer.parseInt(inputStr); java.lang.NumberFormatException: ten at java.lang.Integer.parseInt(Integer.java:405) at java.lang.Integer.parseInt(Integer.java:454) at Ch8Sample1.main(Ch8Sample1.java:20) Error message for invalid input
©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter Catching an Exception trycatch inputStr = JOptionPane.showInputDialog(null, "Age:"); try { age = Integer.parseInt(inputStr); } catch (NumberFormatException e){ JOptionPane.showMessageDialog(null, "’" + inputStr + "‘ is invalid\n" + "Please enter digits only"); }
©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter try-catch Control Flow
©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter Exception Methods The Exception class has two methods we can call to get information about the thrown exception: –getMessage returns a String describing the error –printStackTrace returns a list of all the methods on the call stack and the line numbers being executed try {... } catch (NumberFormatException e){ System.out.println(e.getMessage()); e.printStackTrace(); }
©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter Multiple catch Blocks A single try-catch statement can include multiple catch blocks, one for each type of exception. try {... age = Integer.parseInt(inputStr);... val = cal.get(id); //cal is a GregorianCalendar... } catch (NumberFormatException e){... } catch (ArrayIndexOutOfBoundsException e){... }
©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter Multiple catch Control Flow
©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter The finally Block There are situations where we need to take certain actions regardless of whether an exception is thrown or not. We place statements that must be executed regardless of exceptions in the finally block.
©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter try-catch-finally Control Flow
©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter Propagating Exceptions Instead of catching a thrown exception by using the try-catch statement, we can propagate the thrown exception back to the caller of our method. The method header includes the reserved word throws. public int getAge( ) throws NumberFormatException {... int age = Integer.parseInt(inputStr);... return age; }
©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter Throwing Exceptions We can write a method that throws an exception directly, i.e., this method is the origin of the exception. Use the throw reserved to create a new instance of the Exception or its subclasses. The method header includes the reserved word throws. public void doWork(int num) throws Exception {... if (num != val) throw new Exception("Invalid value");... }
©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter Sample Call Sequence
©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter Exception Types All types of thrown errors are instances of the Throwable class or its subclasses. Serious errors are represented by instances of the Error class or its subclasses. Exceptional cases that common applications should handle are represented by instances of the Exception class or its subclasses. There are over 60 classes in the hierarchy.
©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter Checked vs. Runtime Exceptions A checked exception is an exception that is checked at compile time. –The compiler requires that you either have a try-catch statement or a throws clause –ParseException is a checked exception All other exceptions are unchecked, or runtime, exceptions. As the name suggests, they are detected only at runtime. –You don't have to handle runtime exceptions unless you want to.
©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter Handling Checked Exceptions
©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter Programmer-Defined Exceptions Using the standard exception classes, we can use the getMessage method to retrieve the error message. By defining our own exception class, we can pack more useful information –for example, we might define an OutOfStock exception class and include information such as how many items to order AgeInputException is defined as a subclass of Exception and includes public methods to access three pieces of information it carries: lower and upper bounds of valid age input and the (invalid) value entered by the user.