Presentation is loading. Please wait.

Presentation is loading. Please wait.

Advanced Programming in Java

Similar presentations


Presentation on theme: "Advanced Programming in Java"— Presentation transcript:

1 Advanced Programming in Java
Sadegh Aliakbary Sharif University of Technology Spring 2012

2 Agenda Error handling mechanisms Exception handling framework
Benefits of exception handling framework Exception handling in Java Spring 2012 Sharif University of Technology

3 Watch This Method public static Integer getYear(String day){ String yearString = day.substring(0,4); int year = Integer.parseInt(yearString); return year; } public static void main(String[] args) { String day = "2010/11/29"; Integer year = getYear(day); System.out.println(year); Spring 2012 Sharif University of Technology

4 Exceptions What is wrong with it?
What if day parameter is not a day representation? day = “salam!” What if day parameter is malformed? Day = “29 Nov 2010” What if day parameter is empty? String s = ""; What if day parameter is null? These occasions are called Exception Spring 2012 Sharif University of Technology

5 Handling Exceptions What to do with exceptions? Exit the program
Printing the error on console Returning a special value e.g. -1 Spring 2012 Sharif University of Technology

6 Important Note Sometimes the method can’t handle the exception effectively What should a method do when an exception occurs? Exit the program? Suppose you are in a desktop application Excel, Word, a game, … Print on console? edu site A game Spring 2012 Sharif University of Technology

7 Returning a Special Value
We can return a special value to report an exception E.g. return null; return -1; return 0; return “”; Why not? Spring 2012 Sharif University of Technology

8 Why not? There is no special value There are many exceptions Ambiguity
Need for documentation Combination of program code and exception code Spring 2012 Sharif University of Technology

9 There is no special value
public static int minimum(int[] nums ){ int m = Integer.MAX_VALUE; for (int i : nums) { m = Math.min(m, i); } return m; int[] array = {1,2,-1}; int minimumFound = minimum(array); Spring 2012 Sharif University of Technology

10 Exception Handling Exception Handling is a framework for handling exceptions ;-) It simplifies code Separates business code and exception code Spring 2012 Sharif University of Technology

11 What is an Exception? Exceptional event
Error that occurs during runtime Cause normal program flow to be disrupted Examples ? Divide by zero errors Accessing the elements of an array beyond its range Invalid input Hard disk crash Opening a non-existent file Heap memory exhausted Spring 2012 Sharif University of Technology

12 Default Exception Handling
Provided by Java runtime Prints out exception description Prints the stack trace Hierarchy of methods where the exception occurred Causes the program to terminate Spring 2012 Sharif University of Technology

13 Example 17 class DivByZero { 18 public static void main(String a[]) {
19 System.out.println(3/0); 20 } 21 } Exception in thread "main" java.lang.ArithmeticException: / by zero at exception.Test2.main(Test2.java:19) Note: Exception is a runtime concept This code has no syntax error (No compile-time error) Spring 2012 Sharif University of Technology

14 What Happens When an Exception Occurs?
When an exception occurs within a method The method creates an exception object And hands it off to the runtime system This job is called “throwing an exception” Exception object contains information about the error its type the state of the program when the error occurred Exception line of code Spring 2012 Sharif University of Technology

15 What Happens When an Exception Occurs (2)?
The runtime system searches the call stack for a method that contains an exception handler When an appropriate handler is found The runtime system passes the exception to the handler The exception handler catches the exception What if the runtime system can not find an exception handler? Uses the default exception handler Spring 2012 Sharif University of Technology

16 ` Spring 2012 Sharif University of Technology

17 Spring 2012 Sharif University of Technology

18 Exception Handling in Java
public static Integer getYear(String day) { String yearString = day.substring(0, 4); int year = Integer.parseInt(yearString); return year; } public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.print("Enter a well-formed date: "); String date = scanner.next(); Integer year = getYear(date); System.out.println(year); Spring 2012 Sharif University of Technology

19 getYear() public static Integer getYear(String day) throws Exception { if (day == null) throw new Exception("null value"); if (day.length() == 0) throw new Exception("empty value"); if (!matchesDateFormat(day)) throw new Exception("malformed value"); String yearString = day.substring(0, 4); int year = Integer.parseInt(yearString); return year; } private static boolean matchesDateFormat(String input) { return input.matches("\\d\\d\\d\\d/\\d\\d/\\d\\d"); Spring 2012 Sharif University of Technology

20 main() public static void main(String[] args) { Scanner scanner = new Scanner(System.in); boolean ok = false; while (ok == false) { System.out.print("Enter a well-formed date: "); String date = scanner.next(); try { Integer year = getYear(date); System.out.println(year); ok = true; } catch (Exception e) { System.out.println(e.getMessage()); } Spring 2012 Sharif University of Technology

21 Exception Handling Keywords
throw throws a new exception throws Declares exception throw If a method may throw an exception, it should declare it try Start a block with exception handling catch Catch the exception Spring 2012 Sharif University of Technology

22 Benefits of Exception Handling Framework
Separating Error-Handling code from “regular” business logic code Propagating errors up the call stack Grouping and differentiating error types Spring 2012 Sharif University of Technology

23 Example Spring 2012 Sharif University of Technology

24 Separating Error-Handling Code
Consider pseudocode method It reads an entire file into memory readFile { open the file; determine its size; allocate that much memory; read the file into memory; close the file; } Spring 2012 Sharif University of Technology

25 Traditional Programming
Spring 2012 Sharif University of Technology

26 With Exception Handling Framework
Spring 2012 Sharif University of Technology

27 Note You should still write code for detecting, reporting and handling exceptions Exception handling framework is not responsible for these jobs! It only helps you organize the work more effectively Spring 2012 Sharif University of Technology

28 Propagating Errors Up the Call Stack
Traditional approach Each method should explicitly forward the exception Use a special return code Using return type for reporting exceptions Smells bad! New approach Automatic Beautiful! Spring 2012 Sharif University of Technology

29 Grouping and Differentiating Error Types
All exceptions thrown within a program are objects The grouping or categorizing of exceptions is a natural outcome of the class hierarchy Spring 2012 Sharif University of Technology

30 Spring 2012 Sharif University of Technology

31 Example class MultipleCatch { public static void main(String args[]) { try { int den = Integer.parseInt(args[0]); System.out.println(3/den); } catch (ArithmeticException exc) { System.out.println(“Divisor was 0.”); } catch (ArrayIndexOutOfBoundsException exc2) { System.out.println(“Missing argument.”); } System.out.println(“After exception.”); Spring 2012 Sharif University of Technology

32 Nested Tries class NestedTryDemo { public static void main(String args[]){ try { int a = Integer.parseInt(args[0]); int b = Integer.parseInt(args[1]); System.out.println(a/b); } catch (ArithmeticException e) { System.out.println(“Div by zero error!"); } } catch (ArrayIndexOutOfBoundsException) { System.out.println(“Need 2 parameters!"); Spring 2012 Sharif University of Technology

33 Bad Use of Exceptions Don’t Use Exception instead of If-else
Use exceptions for exceptions! Spring 2012 Sharif University of Technology

34 Writing Your Own Exceptions
Your class should extend Exception class Exception subclasses could be thrown and caught Steps to follow Create a class that extends Exception class Customize the class Members and constructors may be added to the class Exception classes are usually simple classes With no (or few) methods and properties Spring 2012 Sharif University of Technology

35 Example class HateStringExp extends Exception { /* some code */ } String input = "invalid input"; try { if (input.equals("invalid input")) { throw new HateStringExp(); System.out.println("Accept string."); } catch (HateStringExp e) { System.out.println("Hate string!”); Spring 2012 Sharif University of Technology

36 getYear(), revisited public static Integer getYear(String day) throws Exception { if (day == null) throw new NullPointerException(); if (day.length() == 0) throw new EmptyValueException(); if (!matchesDateFormat(day)) throw new MalformedValueException(); String yearString = day.substring(0, 4); int year = Integer.parseInt(yearString); return year; } private static boolean matchesDateFormat(String input) { return input.matches("\\d\\d\\d\\d/\\d\\d/\\d\\d"); Spring 2012 Sharif University of Technology

37 Finally Contains the code for cleaning up after a try or a catch try {
//.. } catch (ExceptionType e) { //… } ... } finally { <code to be executed before the try block ends> } Contains the code for cleaning up after a try or a catch Spring 2012 Sharif University of Technology

38 Finally (2) Block of code is always executed
Despite of different scenarios: Normal completion Forced exit occurs using a return, a continue or a break statement Caught exception thrown Exception was thrown and caught in the method Uncaught exception thrown Exception thrown was not specified in any catch block in the method Spring 2012 Sharif University of Technology

39 Spring 2012 Sharif University of Technology

40 public static int myMethod(int n) { try { switch (n) { case 1: System
public static int myMethod(int n) { try { switch (n) { case 1: System.out.println("One"); return 1; case 2: System.out.println("Two"); throwMyException(); case 3: System.out.println("Three"); } return 4; } catch (Exception e) { System.out.println("catch"); return 5; } finally { System.out.println("finally"); return 6; class MyException extends Exception {} Quiz! private static void throwMyException() throws MyException { throw new MyException(); } int a = myMethod(1); System.out.println("myMethod(1)=" + a); a = myMethod(2); System.out.println("myMethod(2)=" + a); a = myMethod(3); System.out.println("myMethod(3)=" + a); Spring 2012 Sharif University of Technology

41 Result: One finally myMethod(1)=6 Two catch myMethod(2)=6 Three
Spring 2012 Sharif University of Technology

42 Unchecked Exceptions private static void function(String[] args) {
int den = Integer.parseInt(args[0]); System.out.println(3 / den); } public static void main(String[] args) { function(args); The method function() may throw exceptions But it has not declared it with throws keyword Why? Because some exceptions are unchecked such as ArithmeticException and ArrayIndexOutOfBoundsException Spring 2012 Sharif University of Technology

43 Checked and Unchecked Exceptions
Java compiler checks the program should catch or list the occurring exception If not, compiler error will occur Unchecked exceptions Not subject to compile-time checking for exception handling Built-in unchecked exception classes Error RuntimeException Their subclasses Unchecked exceptions only relax compiler The runtime behavior is the same Spring 2012 Sharif University of Technology

44 Exception Class Hierarchy
Spring 2012 Sharif University of Technology

45 Exception Classes and Hierarchy
Multiple catches should be ordered from subclass to superclass Or else, Compile error: Unreachable catch block… class MultipleCatchError { public static void main(String args[]){ try { int a = Integer.parseInt(args [0]); int b = Integer.parseInt(args [1]); System.out.println(a/b); } catch (ArrayIndexOutOfBoundsException e) { //.. } catch (Exception ex) { } Spring 2012 Sharif University of Technology

46 Exceptions & Inheritance
Suppose method f() overrides parent’s method f() in child class can not throw more exceptions than those of f() in Parent class Less or equal exceptions in throws declaration These mistakes bring compiler error Why? Polymorphic method invocations may cause failure in catching some exceptions Spring 2012 Sharif University of Technology

47 Example (1) class Parent{ void f(){} } class Child extends Parent{
void f()throws Exception{} Result? Compiler Error Spring 2012 Sharif University of Technology

48 Example (2) class Parent{ void f()throws ArithmeticException{} }
class Child extends Parent{ void f()throws ArithmeticException, IOException{} Result? Compiler Error Spring 2012 Sharif University of Technology

49 Example (3) class Parent{ void f()throws ArithmeticException{} }
class Child extends Parent{ void f()throws Exception{} Result? Compiler Error Spring 2012 Sharif University of Technology

50 Example (4) class Parent{ void f()throws Exception{} }
class Child extends Parent{ void f()throws ArithmeticException{} Result? No Error Spring 2012 Sharif University of Technology

51 Conclusion f() in child class can not throw more exceptions
Less or equal exceptions in throws declaration f() in child class can not throw more general exceptions f() in child class can throw more specific exceptions Reason: Prevent uncaught exceptions in polymorphic invocations Spring 2012 Sharif University of Technology

52 Quiz! Spring 2012 Sharif University of Technology

53 Spring 2012 Sharif University of Technology

54 Output: a() in D a() in C b() in D BadFormatException Good Bye!
interface A { void a(Object o); } interface B { void b(String s); class C implements A { public void a(Object o) { System.out.println("a() in C"); public void b(String s) { System.out.println("b() in C"); class D extends C implements A, B { System.out.println("a() in D"); super.a(o); System.out.println("b() in D"); try{ int parseInt = Integer.parseInt(s); }catch(Exception e){//NumberFormatException throw new BadFormatException(); class BadFormatException extends RuntimeException { } public class Quiz { public static void main(String[] args) { A a1 = new C(); B b1 = new D(); C c1 = new C(); C c2 = new D(); Object o = new String("Twenty Two"); try { f(c2); a1.a(o); c1.a((String)o); b1.b((String)o); c2.a(o); } catch (NumberFormatException e) { System.out.println("NumberFormatException"); } catch (BadFormatException e) { System.out.println("BadFormatException"); } catch (Exception e) { System.out.println("Exception"); }finally{ System.out.println("Good Bye!"); public static void f(A a) { a.a(a); Output: a() in D a() in C b() in D BadFormatException Good Bye! Spring 2012 Sharif University of Technology

55 Further Reading Throwable and Error classes Assertions
assert name!=null; Spring 2012 Sharif University of Technology

56 References http://www.javapassion.com/javase/javaexceptions.pdf
Spring 2012 Sharif University of Technology

57 Spring 2012 Sharif University of Technology


Download ppt "Advanced Programming in Java"

Similar presentations


Ads by Google