Presentation is loading. Please wait.

Presentation is loading. Please wait.

Handling errors Exception handling and throwing Simple file processing.

Similar presentations


Presentation on theme: "Handling errors Exception handling and throwing Simple file processing."— Presentation transcript:

1 Handling errors Exception handling and throwing Simple file processing

2 Outline Error example Defensive Programming Throwing Exception Catching Exception Defining new Exception Types –Checked vs unchecked

3 Error situations Programmer errors –Incorrect implementation –Inappropriate object request Errors often arise from the environment: –incorrect URL entered –network interruption File processing is particularly error prone: –missing files –lack of appropriate permissions

4 Example: Runtime error Use: AddressBook friends = new AddressBook(); friends.removeDetails("frederik"); Result: java.lang.NullPointerException at AddressBook.removeDetails(AddressBook.java:119)... In class AddressBook: public void removeDetails(String key) { ContactDetails details = (ContactDetails) book.get(key); book.remove(details.getName());...} 1. returns null when key does not exist in book 2. trying to call method on null results in exception

5 Outline Error example Defensive Programming Throwing Exception Catching Exception Defining new Exception Types –Checked vs unchecked

6 Defensive programming Defensive programming in client-server interaction –server assumes that clients are not well behaved (and potentially hostile) –E.g. server checks arguments to constructors and methods Significant overhead in implementation

7 Defensive programming Modified method in class AddressBook: public void removeDetails(String key) { if(keyInUse(key)) { ContactDetails details = (ContactDetails) book.get(key); book.remove(details.getName()); book.remove(details.getPhone()); numberOfEntries--; } check argument

8 Server error reporting How to report illegal arguments? –To the user? is there a human user can they solve the problem? –To the client object return a diagnostic value throw an exception

9 Returning a diagnostic public boolean removeDetails(String key) { if(keyInUse(key)) { ContactDetails details = (ContactDetails) book.get(key); book.remove(details.getName()); book.remove(details.getPhone()); numberOfEntries--; return true; } else { return false; } did any errors arise?

10 QUIZ Which of the three remove methods use appropriate defensive programming? 1.none 2.A 3.B 4.C 5.A, B 6.A, C 7.B, C 8.All three private class Dictionary { List list = new ArrayList (); public void add(String w) { list.add(w); } public boolean removeA(String w) { list.remove(list.indexOf(w)); return true; } public boolean removeB(String w) { if (list.size()==0) return false; else return removeA(w); } public boolean removeC(String w) { if (!list.contains(w)) return false; else return removeA(w); }

11 Client responses Test the return value –Attempt recovery on error –avoid program failure Ignore the return value –cannot be prevented –likely to lead to program failure Exceptions are preferable

12 Outline Error example Defensive Programming Throwing Exception Catching Exception Defining new Exception Types –Checked vs unchecked

13 Exception-throwing principles A special language feature No special return value needed Errors cannot be ignored in the client –The normal flow-of-control is interrupted Specific recovery actions are encouraged

14 Throwing an Exception public ContactDetails getDetails(String key) { if (key==null) { throw new IllegalArgumentException( "null key in getDetails"); } return (ContactDetails) book.get(key); } An exception object is constructed: –new ExceptionType("..."); The exception object is thrown: –throw...

15 The effect of an exception The throwing method finishes prematurely No return value is returned Control does not return to the client's point of call –so the client cannot carry on regardless A client may 'catch' an exception

16 Outline Error example Defensive Programming Throwing Exception Catching Exception Defining new Exception Types –Checked vs unchecked

17 The try block Clients catching an exception must protect the call with a try block try { Protect one or more statements here. } catch(Exception e) { Report and recover from the exception here }

18 The try block try { addressbook.saveToFile(filename); tryAgain = false; } catch(IOException e) { System.out.println("Unable to save to " + filename); tryAgain = true; } exception thrown from here control transfers to here

19 Catching multiple exceptions try {... ref.process();... } catch(EOFException e) { // Take action on an end-of-file exception.... } catch(FileNotFoundException e) { // Take action on a file-not-found exception.... }

20 The finally clause try { Protect one or more statements here. } catch(Exception e) { Report and recover from the exception here. } finally { Perform any actions here common to whether or not an exception is thrown. }

21 The finally clause A finally clause is executed even if a return statement is executed in the try or catch clauses An uncaught or propagated exception still exits via the finally clause

22 QUIZ Which statement is executed immediately after the throw statement? 1.Line A 2.Line B 3.Line C 4.Line D 5.Program stops with exception failure 6.None of 1-5 public static void main(String[] args) { int arg = 0; double inv = inverse(arg); System.out.println(arg); } private static double inverse(int n) { double result=0; try { if (n==0) throw new IllegalArgumentException( "cannot take inverse of 0"); result = 1.0/n; } catch (IllegalArgumentException e) { e.printStackTrace(); } finally { return result; } A B C D

23 Outline Error example Defensive Programming Throwing Exception Catching Exception Defining new Exception Types –Checked vs unchecked

24 Defining new exceptions Extend Exception or RuntimeException Define new types to give better diagnostic information –include reporting and/recovery information

25 The exception class hierarchy

26 Exception categories Checked exception –subclass of Exception –use for anticipated failures –where recovery may be possible Unchecked exception –subclass of RuntimeException –use for unanticipated failures –where recovery is unlikely

27 Unchecked exceptions Use of these is 'unchecked' by the compiler Cause program termination if not caught –this is normal practice –NullPointerException is a typical example

28 Checked exceptions Checked exceptions are meant to be caught The compiler ensures that their use is tightly controlled –in both server and client Used properly, failures may be recoverable

29 The throws clause Methods throwing a checked exception must include a throws clause: public void saveToFile(String destinationFile) throws IOException {... }

30 Example: new checked exception public class NoMatchingDetailsException extends Exception { private String key; public NoMatchingDetailsException(String key) { this.key = key; } public String getKey() { return key; } public String toString() { return "No details matching '" + key + "' were found."; } }

31 QUIZ Any compiler errors ? 1.No compiler errors 2.Method A: needs ”throws” in header 3.Method A: needs ”try- catch” in body 4.Method B: needs ”throws” in header 5.Method main: needs ”throws” in header 6.Both 2 and 4 7.Both 4 and 5 8.Both 2, 4 and 5 9.Other errors public class Quiz3 { private static class MyException extends Exception {} private static void B() { throw new MyException(); } private static void A() { B(); } public static void main(String[] args) { try { A(); } catch (MyException e) { e.printStackTrace(); }

32 QUIZ What is the difference between checked and unchecked exceptions? 1.Unchecked exceptions may print any kind of message, whereas checked ones must print a programmer defined message 2.Unchecked exceptions must be handled with a programmed try/catch block, and checked exceptions with a try/catch/finally block 3.Unchecked exceptions need not be handled, but checked exceptions must be handled with a try/catch block 4.Checked exceptions must be handled with a programmed try/catch block, and unchecked exceptions with a try/catch/finally block 5.Checked exceptions need not be handled, but unchecked exceptions must be handled with a try/catch block 6.There is no formal difference between checked and unchecked exceptions

33 Outline Input/output Text files Terminal / keyboard Binary Files

34 Input-output Input-output is particularly error-prone –it involves interaction with the external environment java.io.IOException is a checked exception

35 Two ways to store data Text format –*.txt, *.java, *.xml –human-readable form –Sequence of characters integer 12345 stored as 49 50 51 52 53 (ascii for "1" "2" "3" "4" "5“) –use Reader and Writer (and their subclasses) (based on char type) Binary format –*.doc, *.class, *.pdf –more compact and efficient integer 12345 stored as 00 00 48 57 (12345 = 48*256+57) –Use InputStream and OutputStream (and their subclasses) (based on byte type)

36 Outline Input/output Text files Terminal / keyboard Binary Files

37 Text output Use the FileWriter class –open a file –write to the file –close the file Failure at any point results in an IOException.

38 Text output try { FileWriter writer = new FileWriter("name of file"); while(there is more text to write) {... writer.write(next piece of text);... } writer.close(); } catch(IOException e) { something went wrong with accessing the file }

39 QUIZ Which statements need to go in a try block? 1.A and B 2.B and C 3.C and D 4.D and E 5.A, B and C 6.B, C and D 7.C, D and E 8.A, B, C and D 9.B, C, D and E import java.io.*; public class Quiz4 { public static void main(String[] args) { String line = null; BufferedReader reader = null; reader = new BufferedReader( new FileReader("input.txt")); line = reader.readLine(); reader.close(); } E D C B A

40 Text input Use the FileReader class Augment with Scanner for line-based input try { Scanner in = new Scanner( new FileReader("name of file")); while(in.hasNextLine()) { String line = in.nextLine(); do something with line } in.close(); } catch(FileNotFoundException e) { the specified file could not be found } IOExceptions from FileReader “swallowed” by Scanner

41 Outline Input/output Text files Terminal / keyboard Binary Files

42 User input from terminal window Similar to reading from a text file –construct a Scanner from System.in –no closing needed Scanner in = new Scanner(System.in); System.out.println("type a line of input:"); String input = in.nextLine(); do something with input

43 QUIZ What is written if file ” input.txt ” does not exist? 1."IOException" 2."FileNotFoundException" 3."IOException”+”FileNotFoundException" 4.Something else is written 5.Compiler error: cannot have 2 catches 6.Compiler error: wrong order of catches 7.Other compiler error try { String line = null; BufferedReader reader = new BufferedReader( new FileReader("input.txt")); line = reader.readLine(); reader.close(); } catch (IOException e) { System.out.print ("IOException"); } catch (FileNotFoundException e) { System.out.print ("FileNotFoundException"); }

44 Outline Input/output Text files Terminal / keyboard Binary Files

45 Object streams ObjectOutputStream class can save entire objects to disk ObjectInputStream class can read objects back in from disk Objects are saved in binary format (and streams are used) similar to text files: –open, read/write, close

46 Writing object to file: BankAccount b1 =...; ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("accounts.dat")); out.writeObject(b1); Reading object from file: ObjectInputStream in = new ObjectInputStream(new FileInputStream("accounts.dat"); BankAccount b2 = (BankAccount) in.readObject(); Objects that are written to a file must be instances of a class implementing the Serializable interface: public class BankAccount implements Serializable {...} Serializable interface has no methods readObject may throw a (checked) ClassNotFoundException

47 Use container and write a single object Objects of any size written/read in a single statement: ArrayList a = new ArrayList();... // add many objects to array list out.writeObject(a) java.util.ArrayList implements Serializable Objects stored in the array list must also be instances of a class implementing Serializable


Download ppt "Handling errors Exception handling and throwing Simple file processing."

Similar presentations


Ads by Google