1 / 82

Programming with methods and classes

Programming with methods and classes. Chapter 7 Fall 2006 CS 101 Aaron Bloomfield. Static vs. non-static. Methods. Instance (or member) method Operates on a object (i.e., and instance of the class) String s = new String("Help every cow reach its " + "potential!"); int n = s.length();

cardea
Télécharger la présentation

Programming with methods and classes

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Programming withmethods and classes Chapter 7 Fall 2006 CS 101 Aaron Bloomfield

  2. Static vs. non-static

  3. Methods • Instance (or member) method • Operates on a object (i.e., and instance of the class) String s = new String("Help every cow reach its " + "potential!"); int n = s.length(); • Class (i.e. static) method • Service provided by a class and it is not associated with a particular object String t = String.valueOf(n); Instance method Class method

  4. Variables • Instance variable and instance constants • Attribute of a particular object • Usually a variable Point p = new Point(5, 5); int px = p.x; • Class variables and constants • Collective information that is not specific to individual objects of the class • Usually a constant Color favoriteColor = Color.MAGENTA; double favoriteNumber = Math.PI - Math.E; Instance variable Class constants

  5. static and non-static rules • Member/instance (i.e. non-static) fields and methods can ONLY be accessed by the object name • Class (i.e. static) fields and methods can be accessed by Either the class name or the object name • Non-static methods can refer to BOTH class (i.e. static) variables and member/instance (i.e. non-static) variables • Class (i.e. static) methods can ONLY access class (i.e. static) variables

  6. Static vs. non-static • Consider the following code: public class Staticness { private int a = 0; private static int b = 0; public void increment() { a++; b++; } public String toString() { return "(a=" + a + ",b=" + b + ")"; } }

  7. Static vs. non-static • And the code to run it: public class StaticTest { public static void main (String[] args) { Staticness s = new Staticness(); Staticness t = new Staticness(); s.increment(); t.increment(); t.increment(); System.out.println (s); System.out.println (t); } }

  8. Static vs. non-static • Execution of the code… • Output is: (a=1,b=3) (a=2,b=3)

  9. t s Staticness Staticness Staticness Staticness Staticness • a = 0 • a = 1 • a = 1 • a = 2 • a = 0 Static vs. non-static: memory diagram Staticness s = new Staticness(); Staticness t = new Staticness(); s.increment(); t.increment(); t.increment(); System.out.println (s); System.out.println (t); Staticness s = new Staticness(); Staticness t = new Staticness(); s.increment(); t.increment(); t.increment(); System.out.println (s); System.out.println (t); 1 0 2 3 b

  10. Program demo • StaticTest.java

  11. How well do you feel you understand static-ness? • Very well! This stuff is so easy. • With a little review, I’ll be good. • Not very well at all. • I’m so lost. What’s static again? • I’d rather not answer this question, thanks.

  12. Hand Paintings

  13. Conversion.java

  14. Task – Conversion.java • Support conversion between English and metric values • d degrees Fahrenheit = (d – 32)/1.8 degrees Celsius • 1 mile = 1.609344 kilometers • 1 gallon = 3.785411784 liters • 1 ounce (avdp) = 28.349523125 grams • 1 acre = 0.0015625 square miles = 0.40468564 hectares

  15. Conversion Implementation public class Conversion { // conversion equivalencies private static final double KILOMETERS_PER_MILE = 1.609344; private static final double LITERS_PER_GALLON = 3.785411784; private static final double GRAMS_PER_OUNCE = 28.349523125; private static final double HECTARES_PER_ACRE = 0.40468564;

  16. Modifier public indicates other classes can use the method Modifier static indicates the method is a class method No use of member/instance variables!!! Conversion implementation public static double fahrenheitToCelsius (double f) { return (f - 32) / 1.8; } }

  17. Conversion Implementation // temperature conversions methods public static double fahrenheitToCelsius(double f) { return (f - 32) / 1.8; } public static double celsiusToFahrenheit(double c) { return 1.8 * c + 32; } // length conversions methods public static double kilometersToMiles(double km) { return km / KILOMETERS_PER_MILE; }

  18. Conversion Implementation // mass conversions methods public static double litersToGallons(double liters) { return liters / LITERS_PER_GALLON; } public static double gallonsToLiters(double gallons) { return gallons * LITERS_PER_GALLON; } public static double gramsToOunces(double grams) { return grams / GRAMS_PER_OUNCE; } public static double ouncesToGrams(double ounces) { return ounces * GRAMS_PER_OUNCE; }

  19. Conversion Implementation // area conversions methods public static double hectaresToAcres(double hectares) { return hectares / HECTARES_PER_ACRE; } public static double acresToHectares(double acres) { return acres * HECTARES_PER_ACRE; }

  20. Conversion use Scanner stdin = new Scanner (System.in); System.out.print("Enter a length in kilometers: "); double kilometers = stdin.nextDouble(); double miles = Conversion.kilometersToMiles(kilometers); System.out.print("Enter a mass in liters: "); double liters = stdin.nextDouble(); double gallons = Conversion.litersToGallons(liters); System.out.print("Enter a mass in grams: "); double grams = stdin.nextDouble(); double ounces = Conversion.gramsToOunces(grams); System.out.print("Enter an area in hectares: "); double hectares = stdin.nextDouble(); double acres = Conversion.hectaresToAcres(hectares);

  21. A Conversion use System.out.println(kilometers + " kilometers = " + miles + " miles "); System.out.println(liters + " liters = " + gallons + " gallons"); System.out.println(grams + " grams = " + ounces + " ounces"); System.out.println(hectares + " hectares = " + acres + " acres"); 2.0 kilometers = 1.242742384474668 miles 3.0 liters = 0.7925161570744452 gallons 4.0 grams = 0.14109584779832166 ounces 5.0 hectares = 12.355269141746666 acres

  22. A preferred Conversion use Part of java.text NumberFormat style = NumberFormat.getNumberInstance(); style.setMaximumFractionDigits(2); style.setMinimumFractionDigits(2); System.out.println(kilometers + " kilometers = " + style.format(miles) + " miles "); System.out.println(liters + " liters = " + style.format(gallons) + " gallons"); System.out.println(grams + " grams = " + style.format(ounces) + " ounces"); System.out.println(hectares + " hectares = " + style.format(acres) + " acres"); 2.0 kilometers = 1.24 miles 3.0 liters = 0.79 gallons 4.0 grams = 0.14 ounces 5.0 hectares = 12.36 acres

  23. Program Demo • Conversion.java

  24. How well do you feel you understand Conversion.java? • Very well! This stuff is so easy. • With a little review, I’ll be good. • Not very well at all. • I’m so lost. What’s a class again? • I’d rather not answer this question, thanks.

  25. Fractals

  26. Parameter passing

  27. Java parameter passing • The value is copied to the method • Any changes to the parameter are forgotten when the method returns

  28. 5 5 7 y x y Java parameter passing • Consider the following code: static void foobar (int y) { y = 7; } public static void main (String[] args) { int x = 5; foobar (x); System.out.println(x); } • What gets printed? formal parameter actual parameter

  29. y x “5" “7" Java parameter passing • Consider the following code: static void foobar (String y) { y = “7”; } public static void main (String[] args) { String x = “5”; foobar (x); System.out.println(x); } • What gets printed? formal parameter actual parameter

  30. y x width = 10 width = 0 Java parameter passing • Consider the following code: static void foobar (Rectangle y) { y.setWidth (10); } public static void main (String[] args) { Rectangle x = new Rectangle(); foobar (x); System.out.println(x.getWidth()); } • What gets printed? formal parameter actual parameter

  31. y x width = 10 width = 0 width = 0 Java parameter passing • Consider the following code: static void foobar (Rectangle y) { y = new Rectangle(); y.setWidth (10); } public static void main (String[] args) { Rectangle x = new Rectangle(); foobar (x); System.out.println(x.getWidth()); } • What gets printed? formal parameter actual parameter

  32. Java parameter passing • The value of the actual parameter gets copied to the formal parameter • This is called pass-by-value • C/C++ is also pass-by-value • Other languages have other parameter passing types • Any changes to the formal parameter are forgotten when the method returns • However, if the parameter is a reference to an object, that object can be modified • Similar to how the object a final reference points to can be modified

  33. Method invocations • Actual parameters provide information that is otherwise unavailable to a method • When a method is invoked • Java sets aside memory for that particular invocation • Called the activation record • Activation record stores, among other things, the values of the formal parameters • Formal parameters initialized with values of the actual parameters • After initialization, the actual parameters and formal parameters are independent of each other • Flow of control is transferred temporarily to that method

  34. Value parameter passing demonstration public class ParameterDemo { public static double add(double x, double y) { double result = x + y; return result; } public static double multiply(double x, double y) { x = x * y; return x; } public static void main(String[] args) { double a = 8, b = 11; double sum = add(a, b); System.out.println(a + " + " + b + " = " + sum); double product = multiply(a, b); System.out.println(a + " * " + b + " = " + product); } }

  35. Value parameter passing demonstration • The file/class is actually called ParameterDemo.java

  36. Program demo • ParameterDemo.java

  37. ParameterDemo.java walkthrough double sum = add(a, b); Initial values of formal parameters come from the actual parameters public static double add (double x, double y) { double result = x + y; return result; }

  38. ParameterDemo.java walkthrough double multiply = multiply(a, b); Initial values of formal parameters come from the actual parameters public static double multiply(double x, double y) { x = x * y; return x; }

  39. How well do you feel you understand parameter passing? • Very well! This stuff is so easy. • With a little review, I’ll be good. • Not very well at all. • I’m so lost. What’s a parameter again? • I’d rather not answer this question, thanks.

  40. Honda’s best commercial • cog.mov

  41. Casting

  42. Casting • We’ve seen casting before: • double d = (double) 3; • int x = (int) d; • Aside: duplicating an object • String s = “foo”; • String t = s.clone(); • Causes an error: “inconvertible types” • (Causes another error, but we will ignore that one) • What caused this?

  43. Casting, take 2 • .clone() returns an object of class Object (sic) • More confusion: You can also have an object of class Class • Thus, you can have an Object class and a Class object • Got it? • We know it’s a String (as it cloned a String) • Thus, we need to tell Java it’s a String via casting • Revised code: • String s = “foo”; • String t = (String) s.clone(); • Still causes that “other” error, but we are still willfully ignoring it…

  44. Casting, take 3 • That “other” error is because String does not have a .clone() method • Not all classes do! • We just haven’t seen any classes that do have .clone() yet • Check in the documentation if the object you want to copy has a .clone() method • A class that does: java.util.Vector • Vector s = new Vector(); • Vector t = s.clone(); • Vector u = (Vector) s.clone(); Causes the “inconvertible types” error

  45. Casting, take 4 • What happens with the following code? • Vector v = new Vector(); • String s = (String) v; • Java will encounter a compile-time error • “inconvertible types” • What happens with the following code? • Vector v = new Vector(); • String s = (String) v.clone(); • Java will encounter a RUN-time error • ClassCastException

  46. How well do you feel you understand casting? • Very well! This stuff is so easy. • With a little review, I’ll be good. • Not very well at all. • I’m so lost. What’s a parameter again? • I’d rather not answer this question, thanks.

  47. Overloading

  48. Overloading • Have seen it often before with operators int i = 11 + 28; double x = 6.9 + 11.29; String s = "April " + "June"; • Java also supports method overloading • Several methods can have the same name • Useful when we need to write methods that perform similar tasks but different parameter lists • Method name can be overloaded as long as its signature is different from the other methods of its class • Difference in the names, types, number, or order of the parameters

  49. Legal public static int min(int a, int b, int c) { return Math.min(a, Math.min(b, c)); } public static int min(int a, int b, int c, int d) { return Math.min(a, min(b, c, d)); }

  50. Legal public static int power(int x, int n) { int result = 1; for (int i = 1; i <= n; ++i) { result *= x; } return result; } public static double power(double x, int n) { double result = 1; for (int i = 1; i <= n; ++i) { result *= x; } return result; }

More Related