Download presentation
Presentation is loading. Please wait.
1
Object-Oriented Programming with Java Exceptions, Strings and Things Lecture 4
2
More robust Classes Declare fields as Private or Protected Protected fields can be accessed by subclasses or members of the same package Protected fields can be accessed by subclasses or members of the same package Declare public “get” and “set” methods with appropriate checks on the “set” methods with appropriate checks on the “set” methods E.g. public void setRadius(double radius) { checkRadius(radius); this.radius = radius; } this.radius = radius; }
3
public class Circle { public static final double PI = 3.14159; // a constant public static final double PI = 3.14159; // a constant protected double radius; protected double radius; protected void checkRadius(double radius) { protected void checkRadius(double radius) { if (radius < 0.0) { if (radius < 0.0) { throw new IllegalArgumentException("radius must not be negative"); } throw new IllegalArgumentException("radius must not be negative"); } } public Circle(double radius) { public Circle(double radius) { checkRadius(radius); checkRadius(radius); this.radius = radius; this.radius = radius; } public double getRadius() {return radius;} public double getRadius() {return radius;} public void setRadius(double radius) { public void setRadius(double radius) { checkRadius(radius); checkRadius(radius); this.radius = radius; this.radius = radius; } public double area() {return PI*radius*radius; } public double area() {return PI*radius*radius; } public double circumference() {return 2*PI*radius; } public double circumference() {return 2*PI*radius; }}
4
Catching Exceptions Use the following construction: try { // code that may throw exceptions } catch (AnException e1) { // Code to handle this kind of exception } finally { // Code that will always execute }
5
Trying to succeed try { // Normally this block of code will be // executed successfully. // However, if an exception is thrown // execution will stop and the interpreter // will attempt to find an appropriate // “catch” statement. }
6
Catching Exceptions There may be several “catch” blocks for different kinds of exceptions catch (AnException e1) { // This block will be invoked if an // AnException kind of exception is // thrown, or a sub-type of AnException. // The block can refer to the exception // object by its name “e1” }
7
And Finally finally { // This block contains code that will // always be run // - even if control leaves the “try” block // - even if control leaves the “try” block // because of a, or // because of a return, continue or // statement. // break statement. // It will, however, be skipped if there is a // It will, however, be skipped if there is a // System.exit( ) clause in the “try” block
8
public class MakeCircle { public static void main(String[ ] args) { public static void main(String[ ] args) { // details of input omitted // details of input omitted try { try { Circle circle = new Circle(radius); Circle circle = new Circle(radius); double area = circle.area( ); double area = circle.area( ); JOptionPane.showMessageDialog( JOptionPane.showMessageDialog( null, "The area equals " + area, null, "The area equals " + area, "Not a lot of people know that", JOptionPane.PLAIN_MESSAGE) ; } catch(IllegalArgumentException e1) { catch(IllegalArgumentException e1) { JOptionPane.showMessageDialog(null, "Radius must not be negative", JOptionPane.showMessageDialog(null, "Radius must not be negative", "Illegal argument", JOptionPane.ERROR_MESSAGE) ; } finally { finally { System.exit(0); System.exit(0); } }}
11
Some kinds-of Exception ExceptionClassNotFoundExceptionIllegalAccessExceptionRuntimeExceptionArithmeticExceptionArrayStoreException Illegal ArgumentException …
12
A little bit of formatting With double precision numbers you may find you get outputs with an unrealistic degree of precision E.g. 7 figures after the decimal place E.g. 7 figures after the decimal place This looks messy and the precision is normally meaningless
15
The java.text Package As an example, we will use the DecimalFormat class from this package Create an instance of DecimalFormat with the required format pattern Invoke the “format” method of this instance to create a formatted string representation
16
import javax.swing.*; import java.text.DecimalFormat; public class MakeCircle { public static void main(String[ ] args) { public static void main(String[ ] args) { String input = JOptionPane.showInputDialog("Enter radius"); String input = JOptionPane.showInputDialog("Enter radius"); double radius = Double.parseDouble(input); double radius = Double.parseDouble(input); DecimalFormat twoDigits = new DecimalFormat( "0.00"); DecimalFormat twoDigits = new DecimalFormat( "0.00"); try { try { Circle circle = new Circle(radius); Circle circle = new Circle(radius); double area = circle.area(); double area = circle.area(); JOptionPane.showMessageDialog( JOptionPane.showMessageDialog( null, "The area equals " + twoDigits.format( area ), null, "The area equals " + twoDigits.format( area ), "Not a lot of people know that", JOptionPane.PLAIN_MESSAGE); "Not a lot of people know that", JOptionPane.PLAIN_MESSAGE); } // Rest of code omitted } One or more digits in front of the decimal point Only two digits behind the decimal point
18
Informing Exceptions Remember that in the “main” method of MakeCircle, we explicitly included the error message: catch(IllegalArgumentException e1) { JOptionPane.showMessageDialog(null, "Radius must not be negative", JOptionPane.showMessageDialog(null, "Radius must not be negative", "Illegal argument", JOptionPane.ERROR_MESSAGE) ; } Should not do this - there may be several different arguments that could throw the same exception type
19
Inside Circle.java protected void checkRadius(double radius) { protected void checkRadius(double radius) { if (radius < 0.0) { if (radius < 0.0) { throw new IllegalArgumentException("radius must not be negative"); throw new IllegalArgumentException("radius must not be negative"); } } Inside MakeCircle.java catch(IllegalArgumentException e1) { JOptionPane.showMessageDialog(null, e1.toString(), JOptionPane.showMessageDialog(null, e1.toString(), "Illegal argument", JOptionPane.ERROR_MESSAGE); "Illegal argument", JOptionPane.ERROR_MESSAGE); }
21
toString methods Useful to define these for key classes Provides an easy way of summarising the state of an instance of a class Can by very useful for debugging
22
public class Point { // The notes show this class with more extensive commenting // The notes show this class with more extensive commenting protected double x, y;// Coordinates of the point accessible to subclasses protected double x, y;// Coordinates of the point accessible to subclasses public Point(double x, double y) { setPoint( x, y ); } public Point(double x, double y) { setPoint( x, y ); } // method sets the location of a point // method sets the location of a point public void setLocation(double xCoordinate, double yCoordinate) { public void setLocation(double xCoordinate, double yCoordinate) { x = xCoordinate; x = xCoordinate; y = yCoordinate; y = yCoordinate; } // conversion of a Point object to a string representation public String toString( ) { public String toString( ) { return("[" + x + ", " + y + "]"); }}
23
import javax.swing.*; public class MakePoint { public static void main(String[ ] args) { public static void main(String[ ] args) { String input; String input; input = JOptionPane.showInputDialog("Enter x Coordinate"); input = JOptionPane.showInputDialog("Enter x Coordinate"); double x = Double.parseDouble(input); double x = Double.parseDouble(input); input = JOptionPane.showInputDialog("Enter y Coordinate"); input = JOptionPane.showInputDialog("Enter y Coordinate"); double y = Double.parseDouble(input); double y = Double.parseDouble(input); try { try { Point point = new Point( x, y); Point point = new Point( x, y); JOptionPane.showMessageDialog( JOptionPane.showMessageDialog( null, "New point created: " + point.toString( ), null, "New point created: " + point.toString( ), "Pointed Message", JOptionPane.PLAIN_MESSAGE); "Pointed Message", JOptionPane.PLAIN_MESSAGE); } // rest of class definition omitted } // rest of class definition omitted
25
Adding properties to Points Point xyxy setLocation toString Location Circle radius area circumference plus Extension
26
public class Circle extends Point { public static final double PI = 3.14159; // a constant public static final double PI = 3.14159; // a constant protected double radius; protected double radius; protected void checkRadius(double radius) { // details omitted } protected void checkRadius(double radius) { // details omitted } public Circle(double x, double y, double radius) { public Circle(double x, double y, double radius) { super(x, y); super(x, y); checkRadius(radius); checkRadius(radius); this.radius = radius; this.radius = radius; } public String toString( ) {// Override Point.toString to add info. public String toString( ) {// Override Point.toString to add info. return "This is a Circle object with the following properties\n" + return "This is a Circle object with the following properties\n" + "Location: " + super.toString() + "\n" + "Location: " + super.toString() + "\n" + "Radius = " + radius + "\n"; "Radius = " + radius + "\n"; }}
27
main method of MakeCircle public void main(String[ ], args) { // … details omitted Circle circle = new Circle(x, y, radius); Circle circle = new Circle(x, y, radius); JOptionPane.showMessageDialog( JOptionPane.showMessageDialog( null, circle.toString( ), null, circle.toString( ), "Something New", JOptionPane.PLAIN_MESSAGE); "Something New", JOptionPane.PLAIN_MESSAGE); // and the rest... // and the rest...}
29
Interfaces Sometimes we may find two or more different subclasses share some common behaviour In this case, they are not strictly “kinds of” some common parent Rather, they “behave like” some common pattern (under certain circumstances) We say that they both implement a common interface
30
A “Cashier” Interface PersonMachine ATMEmployee «interface» Cashier withdraw deposit
Similar presentations
© 2024 SlidePlayer.com. Inc.
All rights reserved.