James Tam Java Exception Handling Handling errors using Java’s exception handling mechanism.

Slides:



Advertisements
Similar presentations
Chapter 17 Failures and exceptions. This chapter discusses n Failure. n The meaning of system failure. n Causes of failure. n Handling failure. n Exception.
Advertisements

Exceptions & exception handling Use sparingly. Things you can do with exceptions: 1. Define a new exception class. 2. Create an exception instance. 3.
Lecture 23 Input and output with files –(Sections 2.13, 8.7, 8.8) Exceptions and exception handling –(Chapter 17)
CSM-Java Programming-I Spring,2005 Exceptions Lesson - 7.
CS102--Object Oriented Programming
Exceptions Don’t Frustrate Your User – Handle Errors KR – CS 1401 Spring 2005 Picture – sysprog.net.
Introduction to Exceptions in Java. 2 Runtime Errors What are syntax errors? What are runtime errors? Java differentiates between runtime errors and exceptions.
Java Exception Very slightly modified from K.P. Chow University of Hong Kong (some slides from S.M. Yiu)
COMP 121 Week 5: Exceptions and Exception Handling.
Java Exceptions. Exceptions Often in computing, operations cannot properly execute because some sort of error has occurred. Some examples: Often in computing,
Exception Handling1. 2 Exceptions  Definition  Exception types  Exception Hierarchy  Catching exceptions  Throwing exceptions  Defining exceptions.
For use of Cleveland State's IST410 Students only 1 Exception.
Exceptions Any number of exceptional circumstances may arise during program execution that cause trouble import java.io.*; class IOExample { public static.
Exception Handling Chapter 12.  Errors- the various bugs, blunders, typos and other problems that stop a program from running successfully  Natural.
Slides prepared by Rose Williams, Binghamton University ICS201 Exception Handling University of Hail College of Computer Science and Engineering Department.
MSc IT Programming Methodology (2). THROWS an EXCEPTION Errors?
James Tam Simple File Input And Output Types of Java Files Simple File Output in Java Simple File Input in Java.
Lecture 27 Exceptions COMP1681 / SE15 Introduction to Programming.
James Tam Simple File Input And Output Types of Java Files Simple File Output in Java Simple File Input in Java.
James Tam Exception handling in Java Java Exception Handling Dealing with errors using Java’s exception handling mechanism.
James Tam Simple file handling in Java Simple File Input And Output Types of Java files Simple file output in Java Simple file input in Java.
CPSC150 Click to edit Master title style Click to edit Master text styles Second level Third level Fourth level Fifth level 1 CPSC150 Exceptions When things.
James Tam Java Exception Handling Handling errors using Java’s exception handling mechanism.
©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter Chapter 8 Exception Handling Sections 1-5, 7.
Exceptions Used to signal errors or unexpected situations to calling code Should not be used for problems that can be dealt with reasonably within local.
1 LECTURE#7: Console Input Overview l Introduction to Wrapper classes. l Introduction to Exceptions (Java run-time errors). l Console input using the BufferedReader.
16-Jun-15 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.
James Tam Simple File Input And Output You will learn how to write to and read from text and serialized files in Java.
James Tam Java Exception Handling Handling errors using Java’s exception handling mechanism.
Files and Streams CS 21a Chapter 11 of Horstmann.
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.
James Tam Java Exception Handling Handling errors using Java’s exception handling mechanism.
James Tam Simple File Input And Output Types of Java Files Simple File Output in Java Simple File Input in Java.
1 Exception Handling  Introduction to Exceptions  How exceptions are generated  A partial hierarchy of Java exceptions  Checked and Unchecked Exceptions.
©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter Chapter 8 Exception Handling Sections 1-5, 7.
James Tam Simple File Input And Output Types of Java Files Simple File Output in Java Simple File Input in Java Writing and reading objects to and from.
Chapter 11: Handling Exceptions and Events J ava P rogramming: From Problem Analysis to Program Design, From Problem Analysis to Program Design, Fourth.
Java Exception Handling Handling errors using Java’s exception handling mechanism.
Example 1 :- Handling integer values public class Program1 { public static void main(String [] args) { int value1, value2, sum; value1 = Integer.parseInt(args[0]);
Chapter 13 Exception Handling F Claiming Exceptions F Throwing Exceptions F Catching Exceptions F Rethrowing Exceptions  The finally Clause F Cautions.
Exceptions 1. Your computer takes exception Exceptions are errors in the logic of a program (run-time errors). Examples: Exception in thread “main” java.io.FileNotFoundException:
Basic Java Programming CSCI 392 Week Two. Stuff that is the same as C++ for loops and while loops for (int i=0; i
Exceptions. Exception Abnormal event occurring during program execution Examples –Manipulate nonexistent files FileReader in = new FileReader("mumbers.txt“);
Exception. Runtime Error Consider the following program: public class BadArray { public static void main(String[] args) { // Create an array with three.
Chapter 10 Exceptions. Chapter Scope The purpose of exceptions Exception messages The call stack trace The try-catch statement Exception propagation The.
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.
Exceptions By the end of this lecture you should be able to: explain the term exception; distinguish between checked and unchecked exception classes in.
Java Exception Handling Handling errors using Java’s exception handling mechanism.
Sheet 3 HANDLING EXCEPTIONS Advanced Programming using Java By Nora Alaqeel.
Java Programming: From Problem Analysis to Program Design, 4e Chapter 11 Handling Exceptions and Events.
Programming and Problem Solving With Java Copyright 1999, James M. Slack Exceptions Handling Exceptions with try and catch The finally-block The throws.
CSI 3125, Preliminaries, page 1 Java I/O. CSI 3125, Preliminaries, page 2 Java I/O Java I/O (Input and Output) is used to process the input and produce.
ICS3U_FileIO.ppt File Input/Output (I/O)‏ ICS3U_FileIO.ppt File I/O Declare a file object File myFile = new File("billy.txt"); a file object whose name.
Exceptions. Exception  Abnormal event occurring during program execution  Examples Manipulate nonexistent files FileReader in = new FileReader("mumbers.txt“);
Exception and Exception Handling. Exception An abnormal event that is likely to happen during program is execution Computer could run out of memory Calling.
Exceptions and Error Handling. Exceptions Errors that occur during program execution We should try to ‘gracefully’ deal with the error Not like this.
Java Exception Handling
Introduction to Exceptions in Java
CS1101: Programming Methodology Recitation 7 – Exceptions
הרצאה 12: קבצים וחריגות (Exceptions)
Exceptions Exception handling is an important aspect of object-oriented design Chapter 10 focuses on the purpose of exceptions exception messages the.
Exception Handling.
Web Design & Development Lecture 7
Lecture 11 Objectives Learn what an exception is.
Chapter 12 Exception Handling and Text IO Part 1
Exception Handling Contents
Exceptions.
Exceptions.
Java Programming: From Problem Analysis to Program Design, 4e
Java Exception Handling
Presentation transcript:

James Tam Java Exception Handling Handling errors using Java’s exception handling mechanism

James Tam Approaches For Dealing With Error Conditions Use branches/decision making and return values Use Java’s exception handling mechanism

James Tam Class Inventory : An Earlier Example public class Inventory { public final int MIN = 0; public final int MAX = 100; public final int CRITICAL = 10; public boolean add(int amount) { int temp; temp = stockLevel + amount; if (temp > MAX) { System.out.print("Adding " + amount + " item will cause stock "); System.out.println("to become greater than " + MAX + " units (overstock)"); return(false); }

James Tam Class Inventory : An Earlier Example (2) else { stockLevel = stockLevel + amount; return(true); } } // End of method add()...

James Tam Some Hypothetical Method Calls: Condition/Return store.addToInventory(int amt) if (temp > MAX) return(false); reference2.method2() if (store.addToInventory(amt) == false) return(false); reference1.method1() if (reference2.method2() == false) return(false);

James Tam Some Hypothetical Method Calls: Condition/Return store.addToInventory(int amt) if (temp > MAX) return(false); reference2.method2() if (store.addToInventory(amt) == false) return(false); reference1.method1() if (reference2.method2() == false) return(false); Problem 1: The calling method may forget to check the return value

James Tam Some Hypothetical Method Calls: Condition/Return store.addToInventory(int amt) if (temp > MAX) return(false); reference2.method2() if (store.addToInventory(amt) == false) return(false); reference1.method1() if (reference2.method2() == false) return(false); Problem 2: A long series of method calls requires many checks/returns

James Tam Some Hypothetical Method Calls: Condition/Return store.addToInventory(int amt) if (temp > MAX) return(false); reference2.method2() if (store.addToInventory(amt) == false) return(false); reference1.method1() if (reference2.method2() == false) return(false); Problem 3: The calling method may not know how to handle the error ??

James Tam Approaches For Dealing With Error Conditions Use branches/decision making constructs and return values Use Java’s exception handling mechanism

James Tam Handling Exceptions Format: try { // Code that may cause an error/exception to occur } catch (ExceptionType identifier) { // Code to handle the exception }

James Tam Handling Exceptions: Reading Input Location of the online example: /home/219/examples/exceptions/handlingExceptions/inputExample public class Driver { public static void main (String [] args) { BufferedReader stringInput; InputStreamReader characterInput; String s; int num; characterInput = new InputStreamReader(System.in); stringInput = new BufferedReader(characterInput);

James Tam Handling Exceptions: Reading Input (2) try { System.out.print("Type an integer: "); s = stringInput.readLine(); System.out.println("You typed in..." + s); num = Integer.parseInt (s); System.out.println("Converted to an integer..." + num); } catch (IOException e) { System.out.println(e); } catch (NumberFormatException e) {... } } }

James Tam Handling Exceptions: Where The Exceptions Occur try { System.out.print("Type an integer: "); s = stringInput.readLine(); System.out.println("You typed in..." + s); num = Integer.parseInt (s); System.out.println("Converted to an integer..." + num); } The first exception can occur here

James Tam Handling Exceptions: Result Of Calling BufferedReader. ReadLine() try { System.out.print("Type an integer: "); s = stringInput.readLine(); System.out.println("You typed in..." + s); num = Integer.parseInt (s); System.out.println("Converted to an integer..." + num); }

James Tam Where The Exceptions Occur In Class BufferedReader For online documentation for this class go to: - l l public class BufferedReader { public BufferedReader(Reader in); public BufferedReader(Reader in, int sz); public String readLine() throws IOException;... }

James Tam Handling Exceptions: Result Of Calling Integer.ParseInt () try { System.out.print("Type an integer: "); s = stringInput.readLine(); System.out.println("You typed in..." + s); num = Integer.parseInt (s); System.out.println("Converted to an integer..." + num); } The second exception can occur here

James Tam Where The Exceptions Occur In Class Integer For online documentation for this class go to: public class Integer { public Integer(int value); public Integer(String s) throws NumberFormatException;... public static int parseInt(String s) throws NumberFormatException;... }

James Tam Handling Exceptions: The Details try { System.out.print("Type an integer: "); s = stringInput.readLine(); System.out.println("You typed in..." + s); num = Integer.parseInt (s); System.out.println("Converted to an integer..." + num); } catch (IOException e) { System.out.println(e); } catch (NumberFormatException e) {... } } }

James Tam Handling Exceptions: Tracing The Example Driver.main () try { num = Integer.parseInt(s); } : catch (NumberFormatException e) { : } Integer.parseInt(String s) { }

James Tam Handling Exceptions: Tracing The Example Integer.parseInt(String s) { } Driver.main () try { num = Integer.parseInt(s); } : catch (NumberFormatException e) { : } Oops! The user didn’t enter an integer

James Tam Handling Exceptions: Tracing The Example Driver.main () try { num = Integer.parseInt(s); } : catch (NumberFormatException e) { : } Integer.parseInt(String s) { } NumberFormatException e = new NumberFormatException ();

James Tam Handling Exceptions: Tracing The Example Driver.main () try { num = Integer.parseInt(s); } : catch (NumberFormatException e) { : } Integer.parseInt(String s) { } NumberFormatException e = new NumberFormatException ();

James Tam Handling Exceptions: Tracing The Example Driver.main () try { num = Integer.parseInt(s); } : catch (NumberFormatException e) { } Integer.parseInt(String s) { } NumberFormatException e = new NumberFormatException (); Exception must be dealt with here

James Tam Handling Exceptions: Catching The Exception catch (NumberFormatException e) {... } } }

James Tam Catching The Exception: Error Messages catch (NumberFormatException e) { System.out.println(“You entered a non-integer value.”); System.out.println(e.getMessage()); System.out.println(e); e.printStackTrace(); } } }

James Tam Catching The Exception: Error Messages catch (NumberFormatException e) { System.out.println(“You entered a non-integer value.”); System.out.println(e.getMessage()); System.out.println(e); e.printStackTrace(); } } } For input string: "james tam" java.lang.NumberFormatException: For input string: "james tam" at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48) at java.lang.Integer.parseInt(Integer.java:426) at java.lang.Integer.parseInt(Integer.java:476) at Driver.main(Driver.java:39)

James Tam Avoid Squelching Your Exceptions try { s = stringInput.readLine(); num = Integer.parseInt (s); } catch (IOException e) { System.out.println(e); } catch (NumberFormatException e) { // Do nothing here but set up the try-catch block to // bypass the “annoying” compiler error }

James Tam Avoid Squelching Your Exceptions try { s = stringInput.readLine(); num = Integer.parseInt (s); } catch (IOException e) { System.out.println(e); } catch (NumberFormatException e) { // Do nothing here but set up the try-catch block to // bypass the “annoying” compiler error } NO!

James Tam The Finally Clause An additional part of Java’s exception handling model ( try - catch - finally ). Used to enclose statements that must always be executed whether or not an exception occurs.

James Tam The Finally Clause: Exception Thrown try { f.method(); } catch { } finally { } f.method () { }

James Tam The Finally Clause: Exception Thrown try { f.method(); } catch { } finally { } f.method () { } 1) Attempt to execute the method in the try block that may throw an exception 2) Exception thrown here 3) Exception is caught here 4) A the end of the catch block control transfers to the finally clause

James Tam The Finally Clause: No Exception Thrown try { f.method(); } catch { } finally { } f.method () { } 1) Attempt to execute the method in the try block that may throw an exception 3) A the end of f.method () control transfers to the finally clause 2) Code runs okay here

James Tam Try - Catch - Finally : An Example Location of the online example: /home/219/examples/exceptions/handlingExceptions/tryCatchFinallyExample public class Driver { public static void main (String [] args) { TCFExample eg = new TCFExample (); eg.method(); } }

James Tam Try - Catch - Finally : An Example (2) public class TCFExample { public void method () { BufferedReader br; String s; int num; try { System.out.print("Type in an integer: "); br = new BufferedReader(new InputStreamReader(System.in)); s = br.readLine(); num = Integer.parseInt(s); return; }

James Tam Try - Catch - Finally : An Example (3) catch (IOException e) { e.printStackTrace(); return(); } catch (NumberFormatException e) { e.printStackTrace (); return(); } finally { System.out.println("<<<This code will always execute>>>"); return; } } }

James Tam When The Caller Can’t Handle The Exceptions main () method 1 ()method 2 () Exception thrown! ???

James Tam When The Caller Can’t Handle The Exceptions: An Example Location of the online example: /home/219/examples/exceptions/handlingExceptions/delegatingExceptions

James Tam When The Caller Can’t Handle The Exceptions: An Example (2) Tracing the method calls when no exception occurs: Driver.main() TCFExample. method() Integer. parseInt() BufferedReader. readLine() User enters 10 Yes indeed it is an integer! Break out of loop

James Tam When The Caller Can’t Handle The Exceptions: An Example (3) Tracing the method calls when an exception does occur: Driver.main() TCFExample. method() Integer. parseInt() BufferedReader. readLine() User enters 1.9 This string is not an integer. Return to the top of loop and start the calls again

James Tam When The Caller Can’t Handle The Exceptions: An Example (4) public class Driver { public static void main (String [] args) { TCExample eg = new TCExample (); boolean inputOkay = true;

James Tam When The Caller Can’t Handle The Exceptions: An Example (5) do { try { eg.method(); inputOkay = true; } catch (IOException e) { e.printStackTrace(); } catch (NumberFormatException e) { inputOkay = false; System.out.println("Please enter a whole number."); } } while(inputOkay == false); }// End of main }// End of Driver class

James Tam When The Caller Can’t Handle The Exceptions: An Example (6) public class TCExample { public void method () throws IOException, NumberFormatException { BufferedReader br; String s; int num; System.out.print("Type in an integer: "); br = new BufferedReader(new InputStreamReader(System.in)); s = br.readLine(); num = Integer.parseInt(s); } }

James Tam When The Driver.Main () Method Can’t Handle The Exception public class Driver { public static void main (String [] args) throws IOException, NumberFormatException { TCExample eg = new TCExample (); eg.method(); } }

James Tam Creating Your Own Exceptions (If There Is Time) Throwable Error VirtualMachineError OutOfMemoryError Exception … IOExceptionRunTime Exception … ??? Excerpt from Big Java by C. Horstmann p. 562

James Tam Class Exception : The Local Inheritance Hierarchy Exception IOExceptionClassNotFound Exception CloneNotFound Exception EOFExceptionFileNotFound Exception MalformedURL Exception UnknownHost Exception

James Tam Writing New Exceptions Typical approach: tie the exception into preconditions Remember: preconditions are things that must be true when a function is called. Example: Inventory example addToInventory ( ) Arg: amount Pre-condition: Existing inventory and new amount don’t exceed MAX If (precondition not met) then Exception occurs Else add amount to inventory

James Tam Writing New Exceptions (2) Example 2: Division Args: dividend, divisor Quotient = dividend/divisor Pre-condition: divisor not zero If (precondition not met) then Exception occurs Else Perform division division ( )

James Tam Writing New Exceptions: An Example Location of the online example: /home/219/examples/exceptions/writingExceptions/inventoryExample

James Tam Writing New Exceptions: Driver Class public class Driver { public static void main(String [] args) { Inventory chinook = new Inventory(); try { chinook.add(10); } catch (InventoryOverMaxException e) { System.out.print(">>Too much to be added to stock<<"); }

James Tam Writing New Exceptions: Driver Class (2) System.out.println(chinook.showStockLevel ()); try { chinook.add(10); } catch (InventoryOverMaxException e) { System.out.println(">>Too much to be added to stock<<"); }

James Tam Writing New Exceptions: Driver Class (3) System.out.println(chinook.showStockLevel ()); try { chinook.add(100); } catch (InventoryOverMaxException e) { System.out.println(">>Too much to be added to stock<<"); }

James Tam Writing New Exceptions: Driver Class (4) System.out.println(chinook.showStockLevel ()); try { chinook.remove(21); } catch (InventoryUnderMinException e) { System.out.println(">>Too much to remove from stock<<"); } System.out.println(chinook.showStockLevel ()); } }

James Tam Writing New Exceptions: Class Inventory public class Inventory { public final int CRITICAL = 10; public final int MIN = 0; public final int MAX = 100; private int stockLevel = 0; public boolean inventoryTooLow() { if (stockLevel < CRITICAL) return true; else return false; }

James Tam Writing New Exceptions: Class Inventory (2) public void add(int amount) throws InventoryOverMaxException { int temp; temp = stockLevel + amount; if (temp > MAX) { throw new InventoryOverMaxException("Adding " + amount + " item(s) “ + "will cause stock to become greater than " + MAX + " units"); } else stockLevel = stockLevel + amount; } “ Throws ”: An exception of type can occur in this method “ Throw ”: Instantiates an exception of type Execution transfers back to the ‘ catch ’ block of the caller

James Tam Writing New Exceptions: Class Inventory (3) public void remove(int amount) throws InventoryUnderMinException { int temp; temp = stockLevel - amount; if (temp < MIN) { throw new InventoryUnderMinException("Removing " + amount + " item(s) will cause stock to become less " than " + MIN + " units"); } else stockLevel = temp; } public String showStockLevel () { return("Inventory: " + stockLevel); } }

James Tam Writing New Exceptions: Class InventoryOverMaxException public class InventoryOverMaxException extends Exception { public InventoryOverMaxException() { super (); } public InventoryOverMaxException(String s) { super (s); } }

James Tam Writing New Exceptions: Class InventoryUnderMinException public class InventoryUnderMinException extends Exception { public InventoryUnderMinException() { super(); } public InventoryUnderMinException(String s) { super(s); } }

James Tam Inheritance Hierarchy For IOExceptions IOException EOFExceptionFileNotFound Exception These classes are more specific instances of class IOException

James Tam Inheritance And Catching Exceptions If you are catching a sequence of exceptions then make sure that you catch the exceptions for the child classes before you catch the exceptions for the parent classes Deal with the more specific case before handling the more general case

James Tam Inheritance And Catching Exceptions (2) try { } catch (IOException e) { } catch (EOFException e) { } try { } catch (EOFException e) { } catch (IOException e) { } Correct Incorrect

James Tam After This Section You Should Now Know The benefits of handling errors with an exception handler rather than employing a series of return values and conditional statements/branches. How to handle exceptions - Being able to call a method that may throw an exception by using a try - catch block - What to do if the caller cannot properly handle the exception - What is the finally clause, how does it work and when should it be used How to write your classes of exceptions The effect of the inheritance hierarchy when catching exceptions

James Tam Simple File Input And Output You will learn how to write to and read from text files in Java.

James Tam Inheritance Hierarchy For IOExceptions IOException EOFExceptionFileNotFound Exception These classes are more specific instances of class IOException

James Tam Inheritance And Catching Exceptions If you are catching a sequence of exceptions then make sure that you catch the exceptions for the child classes before you catch the exceptions for the parent classes Deal with the more specific case before handling the more general case

James Tam Branches: Specific Before General Incorrect If (x > 0) body; else if (x > 10) body; else if (x > 100) body; Correct If (x > 100) body; else if (x > 10) body; else if (x > 0) body;

James Tam Inheritance And Catching Exceptions (2) try { } catch (IOException e) { } catch (EOFException e) { } try { } catch (EOFException e) { } catch (IOException e) { } Correct Incorrect

James Tam Reading Text Input From A File File : byte stream FileReaderBufferedReader ‘A’ ‘N’ ‘ char stream String “AN “

James Tam Writing Text Output To A File File : byte stream FileWriterPrintWriter ‘ ‘ ‘N’ ‘A’ char stream “AN “ Primitives, Strings, Objects 1 1 By objects we of course mean references to objects

James Tam File Input And Output: One Complete Example Location of the online example: /home/219/examples/fileIO/Driver.java public class Driver { final static int MAX = 4; public static void main(String [] args) { String line = null; String [] paragraph = null; int i; Scanner in; // File IO PrintWriter pw = null; FileWriter fw = null; BufferedReader br = null; FileReader fr = null; in = new Scanner(System.in); paragraph = new String[MAX];

James Tam File IO: Get Data And Write To File // Get paragraph information from the user. for (i = 0; i < MAX; i++) { System.out.print("Enter line of text: "); line = in.nextLine(); paragraph[i] = line; //Add line as array element } // Write paragraph to file try { fw = new FileWriter("data.txt"); // Open pw = new PrintWriter(fw); for (i = 0; i < MAX; i++) pw.println(paragraph[i]); fw.close(); // Close } catch (IOException e) { System.out.println("Error writing to file"); }

James Tam File IO: Read Data From File try { fr = new FileReader("data.txt"); // Open br = new BufferedReader(fr); line = br.readLine(); if (line == null) System.out.println("Empty file, nothing to read"); while (line != null) { System.out.println(line); line = br.readLine(); } fr.close(); // Close } catch (FileNotFoundException e) { System.out.println("Could not open data.txt"); } catch (IOException e) { System.out.println("Trouble reading from data.txt"); }

James Tam You Should Now Know How to write to files with Java classes FileWriter PrintWriter How to reading text information from files with Java classes FileReader BufferedReader