COMP 110: Introduction to Programming Tyler Johnson Apr 13, 2009 MWF 11:00AM-12:15PM Sitterson 014
COMP 110: Spring Announcements Program 5 Milestone 1 due Wednesday by 5pm
COMP 110: Spring Questions?
COMP 110: Spring Today in COMP 110 Brief Review Finish Inheritance Basic Exception Handling Programming Demo
COMP 110: Spring Review: Overriding Methods Person has a jump method, so all subclasses have a jump method Person Athlete HighJumper Skydiver ExtremeAthlete XGamesSkater
COMP 110: Spring Review: Overriding Methods Each subclass has its own jump functionality public class Person { public void jump() { System.out.println("Whee!"); } public class Athlete extends Person { public void jump() { System.out.println("I jump really well!"); }
COMP 110: Spring Review: Type Compatibilities ExtremeAthlete is an Athlete XGamesSkater is a Person Person is not necessarily a Skydiver Person p = new ExtremeAthlete(); Legal Athlete a = new Athlete(); Legal XGamesSkater xgs = new Person(); Illegal
COMP 110: Spring Polymorphism many forms Enables the substitution of one object for another as long as the objects have the same interface 8
COMP 110: Spring Dynamic Binding public static void jump3Times(Person p) { p.jump(); } public static void main(String[] args) { XGamesSkater xgs = new XGamesSkater(); Athlete ath = new Athlete(); jump3Times(xgs); jump3Times(ath); }
COMP 110: Spring Inheritance Some final things on inheritance Implementing the equals method
COMP 110: Spring The Class Object The Java class Object provides methods that are inherited by every class For example equals, toString These methods should be overridden with methods appropriate for the classes you create
COMP 110: Spring The equals Method Every class has a default.equals() method Inherited from the class Object Returns whether two objects of the class are equal in some sense Does not necessarily do what you want You decide what it means for two objects of a class you create to be considered equal by overriding the equals method Perhaps books are equal if the names and page numbers are equal Perhaps only if the names are equal Put this logic inside.equals() method
COMP 110: Spring The equals Method Object has an equals method Subclasses should override it public boolean equals(Object obj) { return (this == obj); } What does this method do? Returns whether this has the same address as obj This is the default behavior for subclasses
COMP 110: Spring The equals Method First try: public boolean equals(Student std) { return (this.id == std.id); } This is overloading, not overriding We want to be able to test if two Objects are equal Student - id: int + getID(): int + setID(int newID): void
COMP 110: Spring The equals Method Second try public boolean equals(Object obj) { Student otherStudent = (Student) obj; return (this.id == otherStudent.id); } What does this method do? Typecasts the incoming Object to a Student Returns whether this has the same id as otherStudent
COMP 110: Spring The equals Method public boolean equals(Object obj) { Student otherStudent = (Student) obj; return (this.id == otherStudent.id); } Why do we need to typecast? Object does not have an id, obj.id would not compile Whats the problem with this method? What if the object passed in is not actually a Student? The typecast will fail and we will get a runtime error
COMP 110: Spring The instanceof Operator We can test whether an object is of a certain class type: if(obj instanceof Student) { System.out.println("obj is an instance of the class Student"); } Syntax: object instanceof Class_Name Use this operator in the equals method
COMP 110: Spring The equals Method Third try public boolean equals(Object obj) { if ((obj != null) && (obj instanceof Student)) { Student otherStudent = (Student)obj; return (this.id == otherStudent.id); } return false; } null is a special constant that can be assigned to a variable of a class type – means that the variable does not refer to anything right now
COMP 110: Spring Basic Exception Handling Section 9.1 in text
COMP 110: Spring Error Handling Recall from Program 4 Parse a string of the form operand1 operator operand2 For example " " We assumed the input was valid What if its not?
COMP 110: Spring Error Handling Example of invalid input "g " Your programs would happily parse away and attempt to call Double.parseDouble("g23.55"); Result? Your program crashes with a NumberFormatException
COMP 110: Spring Exceptions An exception is an object that signals the occurrence of an unusual (exceptional) event during program execution Exception handling is a way of detecting and dealing with these unusual cases in principled manner i.e. without a run-time error or program crash
COMP 110: Spring Example Handling divide by zero exceptions BasketballScores int score = keyboard.nextInt(); int scoreSum = 0; int numGames = 0; while(score >= 0) { scoreSum += score; numGames++; score = keyboard.nextInt(); } double average = scoreSum/numGames; Possible ArithmeticException: / by zero!
COMP 110: Spring Example We could do this int score = keyboard.nextInt(); int scoreSum = 0; int numGames = 0; while(score >= 0) { scoreSum += score; numGames++; score = keyboard.nextInt(); } double average = 0; if(numGames > 0) average = scoreSum/numGames;
COMP 110: Spring Example Using Exception Handling (try/catch blocks) int score = keyboard.nextInt(); int scoreSum = 0; int numGames = 0; while(score >= 0) { scoreSum += score; numGames++; score = keyboard.nextInt(); } double average = 0; try { average = scoreSum/numGames; } catch(ArithmeticException e) { System.out.println(e.getMessage()); System.out.println("Cannot compute average for 0 games"); }
COMP 110: Spring Example When numGames != 0 int score = keyboard.nextInt(); int scoreSum = 0; int numGames = 0; while(score >= 0) { scoreSum += score; numGames++; score = keyboard.nextInt(); } double average = 0; try { average = scoreSum/numGames; } catch(ArithmeticException e) { System.out.println(e.getMessage()); System.out.println("Cannot compute average for 0 games"); }
COMP 110: Spring Example When numGames == 0 int score = keyboard.nextInt(); int scoreSum = 0; int numGames = 0; while(score >= 0) { scoreSum += score; numGames++; score = keyboard.nextInt(); } double average = 0; try { average = scoreSum/numGames; } catch(ArithmeticException e) { System.out.println(e.getMessage()); System.out.println("Cannot compute average for 0 games"); }
COMP 110: Spring The try Block A try block contains the basic algorithm for when everything goes smoothly Try blocks will possibly throw an exception Syntax try { Code_To_Try } Example try { average = scoreSum/numGames; }
COMP 110: Spring The catch Block The catch block is used to deal with any exceptions that may occur This is your error handling code Syntax catch(Exception_Class_Name Catch_Block_Parameter) { Process_Exception_Of_Type_Exception_Class_Name } Possibly_Other_Catch_Blocks Example catch(ArithmeticException e) { System.out.println(e.getMessage()); System.out.println("Cannot compute average for 0 games"); }
COMP 110: Spring Throwing Exceptions You can also throw your own exceptions try { int score = keyboard.nextInt(); int scoreSum = 0; int numGames = 0; while(score >= 0) { scoreSum += score; numGames++; score = keyboard.nextInt(); } if(numGames <= 0) throw new Exception("Exception: num games is less than 1"); double average = scoreSum/numGames; } catch(Exception e) { //catches any kind of exception System.out.println(e.getMessage()); }
COMP 110: Spring Throwing Exceptions Syntax throw new Exception_Class_Name(Possibly_Some_Arguments); Example throw new Exception( "Exception: num games is less than 1"); or Exception exceptObject = new Exception("Illegal character."); throw exceptObject;
COMP 110: Spring Exception Objects An exception is an object All exceptions inherit the method getMessage() from the class Exception Example catch(ArithmeticException e) { System.out.println(e.getMessage()); System.out.println("Cannot compute average for 0 games"); }
COMP 110: Spring Java Exception Handling A try block contains code that may throw an exception When an exception is thrown, execution of the try block ends immediately Depending on the type of exception, the appropriate catch block is chosen and executed If no exception is thrown, all catch blocks are ignored
COMP 110: Spring Programming Demo Adding Exception Handling to Program 4 If we call Double.parseDouble() with invalid input such as "g23.55", the method will throw a NumberFormatException Catch this exception and signal to the user there was a problem with the input
COMP 110: Spring Programming Demo Programming
COMP 110: Spring Wednesday Basic File I/O