1 / 41

A Bridge to Your First Computer Science Course

A Bridge to Your First Computer Science Course. Prof. H.E. Dunsmore Classes Methods Static vs Non-Static Constructors Overloaded Methods. Java Class. Java class includes… Fields: attributes of an object or the class Methods: operations on an object or the class

svein
Télécharger la présentation

A Bridge to Your First Computer Science Course

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. A Bridge to Your First Computer Science Course Prof. H.E. Dunsmore Classes Methods Static vs Non-Static Constructors Overloaded Methods

  2. Java Class • Java class includes… • Fields: attributes of an object or the class • Methods: operations on an object or the class • Within certain limitations: Fields are accessible to methods of the class • Fields and methods may be static or non-static • When static, fields and methods are “of the class” • When non-static, fields and methods are “of the object”

  3. Static and Non-Static Fields • Static field: • One memory location shared by all objects of the class • Same value shared by all methods • What is this good for? • Non-static field: • Each instance of the class (object) has its own memory location for the field • Different value (in general) in each object

  4. Java Terminology: Variables • Instance variables: non-static fields in a class declaration • Class variables: static fields in a class declaration • Local variables: variables in method or block • Parameters: variables in a method declaration Source: http://docs.oracle.com/javase/tutorial/java/nutsandbolts/variables.html

  5. Problem: Counter • Create a class with static and non-static counters • Create objects • Increment the counters • Print values before and after

  6. Solution 1: Counter public class Counter { int x; static int y; public static void main(String[] args) { Counter alice = new Counter(); Counter bob = new Counter(); alice.x = 10; alice.y = 42; bob.x = 50; bob.y = 99; System.out.println(alice.x); System.out.println(alice.y); System.out.println(bob.x); System.out.println(bob.y); alice.y++; System.out.println(alice.y); System.out.println(bob.y); bob.y++; System.out.println(alice.y); System.out.println(bob.y); } }

  7. Methods • Method: a parameterized block of code that may return a value • Every method exists inside some class • Useful for… • Reusability: Reduce redundancy in code • Readability: Identify logical operation by name (abstraction) • Modularity: software developers can code and test independently

  8. Basic Method Syntax return_typemethodName(param_list) { statements; return_if_needed; } • return_type: type of value to be returned (void if no return value) • param_list: list of parameters expected by method (includes types and local name, can be empty)

  9. Parameters and Arguments • Parameters allow a method to work on different data values • Parameter: a variable local to a method • Argument: an expression that is passed to the corresponding parameter at time of method call • Argument values are copied into parameter variables • Argument values to a method must match the number and types of parameters of the method intcalc (double x, int y) {… return z;} sum = calc (r,s);

  10. Flow of Control for Method Calls • Before call: argument values at calling site are copied to parameter variables in called method • Then… • The calling method is “suspended” • The called method begins at the top of the method body and runs to completion (return statement or the end) • The calling method continues where it left off • After call: Return value from called method becomes value returned to calling site

  11. Parameters: Call by Value • Parameter variables are distinct from variables passed in as arguments void changer(int x) { x = 12; } … int y = 5; changer(y); System.out.println(y); // prints 5

  12. Solution 2: Counter public class Counter { int x; static int y = 42; Counter(int x) { this.x = x; } public static void main(String[] args) { Counter alice = new Counter(100); Counter jimmy = new Counter(500); System.out.printf("%s: x = %d, y = %d\n", "alice", alice.x, alice.y); System.out.printf("%s: x = %d, y = %d\n", "jimmy", jimmy.x, jimmy.y); alice.x++; alice.y++; jimmy.x++; jimmy.y++; System.out.printf("%s: x = %d, y = %d\n", "alice", alice.x, alice.y); System.out.printf("%s: x = %d, y = %d\n", "jimmy", jimmy.x, jimmy.y); } }

  13. Solution 3: Counter public class Counter { // [fields and constructor omitted] static void display(String name, Counter c) { System.out.printf("%s: x = %d, y = %d\n", name, c.x, c.y); } public static void main(String[] args) { Counter alice = new Counter(100); Counter jimmy = new Counter(500); display("alice", alice); display("jimmy", jimmy); alice.x++; alice.y++; jimmy.x++; jimmy.y++; display("alice", alice); display("jimmy", jimmy); } }

  14. Static and Non-Static Methods • Static method: • May only access static fields and call other static methods in the class • Can be called using class name: Math.pow(2,5) • Non-static method: • May also access non-static fields associated with the particular object • Must be associated with an object in some way in order to be called, e.g., t3.describe() • If no object specified, “this” implied: describe() is same as this.describe()

  15. Extended Method Syntax [static] return_typemethodName(param_list) { statements; return_if_needed; } • static: method is a static method • Not static: method is an “instance method” (AKA “object method”)

  16. Constructors Counter c1 = new Counter(500); • Not exactly a method, but very similar • Callable using “new” operator • May take parameters • May access all fields of class (including non-static) • Main task: Initialize the object being allocated • Does not explicitly return a value… • …but the new operator that started it returns a reference to the newly created object

  17. What is this anyway? • Java reserved word… • …cannot have a variable named “this” • Used only within a non-static method or constructor • It is a reference to the “current object” • Used to access any field or method (member) of the current object

  18. Problem: Modeling Trees • Individual trees have a circumference • Collectively, a number of trees (Tree objects) have been created (with new)

  19. Solution: Modeling Trees public class Tree { double circumference; static intnumberOfTrees = 0; Tree(double circumference) { this.circumference = circumference; numberOfTrees = numberOfTrees + 1; } double getRadius() { return circumference / (2 * Math.PI); } static intgetNumberOfTrees() { return numberOfTrees; } }

  20. Problem: Making Trees • Write a program to create a number of trees • Print how many trees were created • Could use a counter in the method(s) that create a new Tree… • … but using a Tree static variable keeps the bookkeeping centralized without having to insert the same code in all places that create a Tree

  21. Solution: Tracking the Trees public class TreeMaker { public static void main(String[] args) { while (Math.random() < 0.9) { Tree t = new Tree(Math.random() * 100); System.out.printf("tree has radius %.3f\n", t.getRadius()); } System.out.printf("created %d trees\n", Tree.getNumberOfTrees()); } }

  22. Passing References by Value • Reminder: parameter passing is “by value” • Passing an object reference by value means… • The “value” is the reference to (address of) the object • The called method cannot modify the variable where the reference is stored • But, it can modify the object it references

  23. Example: Reference by Value public class Danger { static void modify(int[] a) { a[0] = -1; // modifies object referenced by x } public static void main(String[] args) { int[] x = { 42 }; System.out.println(x[0]); modify(x); System.out.println(x[0]); } }

  24. Example: Reference by Value (1) public class ReferenceByValue { static void modify(int[] a) { for (inti = 0; i < a.length; i++) a[i]++; } static void printArray(String message, int[] a) { System.out.printf("%s: ", message); for (inti = 0; i < a.length; i++) System.out.printf("%d ", a[i]); System.out.printf("\n"); } }

  25. Example: Reference by Value (2) public class ReferenceByValue { // [see previous slide] public static void main(String[] args) { int[] x = new int[5]; printArray("x new", x); for (inti = 0; i < x.length; i++) x[i] = i; printArray("x inited", x); modify(x); printArray("x modified", x); } }

  26. Overloading Constructors and Methods (1) • Term signature refers to the name and parameter types of a method or constructor public static void main(String[] args) • Each constructor and method in a class must have a unique signature • Same names are OK, but parameter types must be different public static void main(int x, int y)

  27. Overloading Constructors and Methods (2) • Java matches argument types with parameter types to choose the right constructor or method to invoke • Called overloading: we’re overloading the meaning of the method name • Many built-in classes use constructor and method overloading (see println in http://docs.oracle.com/javase/6/docs/api/java/io/PrintStream.html)

  28. Example: Improving isPalindrome public class Palindrome { static booleanisPalindrome(String s) { if (s == null || s.length() <= 1) return true; while (s.length() > 1) { char first = s.charAt(0); char last = s.charAt(s.length() - 1); if (first != last) return false; s = s.substring(1, s.length() - 1); } return true; } static booleanisPalindrome(int x) { return isPalindrome(Integer.toString(x)); } }

  29. Special Trick: this() in Constructor • Use this(…) to invoke one constructor from another • Must be first line in current constructor • Java matches argument types to determine which constructor to call • Other constructor returns to calling constructor

  30. Example: PurdueStudent (1) public class PurdueStudent { booleanhasName; String name; intpuid; // constructor with int... PurdueStudent(intpuid) { this.puid = puid; hasName = false; } // constructor with String and int... PurdueStudent(String name, intpuid) { this(puid); this.name = name; hasName = true; } // [see next slide…] }

  31. Example: PurdueStudent (2) public class PurdueStudent { // [see previous slide…] void printStudent() { if (hasName) System.out.println(name + ": " + puid); else System.out.println("(no name): " + puid); } public static void main(String[] args) { // call int-only constructor... PurdueStudent p1 = new PurdueStudent(1010337138); // call String-int constructor... PurdueStudent p2 = new PurdueStudent("Drake", 1123441245); p1.printStudent(); p2.printStudent(); } }

  32. Example: Overloader public class Overloader { Overloader() { // no argument constructor this(123); // call int argument constructor System.out.println("back to empty overloader"); } Overloader(int x) { // int argument constructor System.out.printf("x int = %d\n", x); } Overloader(double x) { // double argument constructor this(); System.out.printf("x double = %f\n", x); } public static void main(String[] args) { System.out.printf("creating o1...\n"); Overloader o1 = new Overloader(); // call no argument constructor System.out.printf("creating o2...\n"); Overloader o2 = new Overloader(42); // call int argument constructor System.out.printf("creating o3...\n"); Overloader o3 = new Overloader(4.2); // call double argument constructor } }

  33. Java Access Modifiers • Can apply to members: fields and methods • Modifiers control access to members from methods in other classes • This list is from least to most restrictive:

  34. Conventional Wisdom • Make methods public • Allows anyone to use them • They should be written defensively to “protect” the object internal state (i.e., attribute fields) • Make fields private • Keeps them safe from unexpected changes • Only your methods can modify them • Constants (“final” fields) can be made public since they can’t be changed anyway

  35. Accessor and Mutator Methods • With fields being private, all access to them from outside the class is via methods • There is no special Java syntax, just naming convention: • Accessor: “get…” access (read) field in an object • Mutator: “set…” mutate (change) field in an object • Accessor methods allow read-only access • Mutator methods allow “controlled” change

  36. Generic Classes • An advanced topic to be covered more fully later • Basic idea: A generic class is one that can be parameterized with another class • ArrayList<E> is parameterized with class (or type) E. It can only “hold” elements that are references to objects of class E • E must be a reference type; primitive types are not supported

  37. ArrayList Class • A class provided in the java.utils package • Dynamic array: automatically grows to accommodate new items • Works with any type of object, but you must specify the type when the ArrayList object is created (just like a Java array) • Example • ArrayList<String> list = new ArrayList<String>(); • Creates an empty array of String objects • String[] list = new String[10]

  38. ArrayList Class • Unlike Java arrays, ArrayList does not work with primitive types, only reference types • Can’t say “ArrayList<int> list;” • Fortunately, Java provides special “wrapper” classes for each primitive type • Can say “ArrayList<Integer> list;” • Java handles the conversion between wrapper class and corresponding primitive type

  39. Useful ArrayList Methods • add(e) – adds e to end of list • add(i, e) – adds e at index i (0-based), pushing others down • contains(e) – returns true if e is in the list • get(i) – returns the value at index i (0-based) • remove(e) – removes e from the list • size() – returns the current size of the list

  40. Example: ArrayListDemo import java.util.ArrayList; import java.util.Scanner; public class ArrayListDemo { public static void main(String[] args) { ArrayList<String> list = new ArrayList<String>(); Scanner in = new Scanner(System.in); while (in.hasNextLine()) { String s = in.nextLine(); list.add(s); } System.out.printf("read %d lines\n", list.size()); for (inti = 0; i < list.size(); i++) { System.out.printf("%s\n", list.get(i)); } } }

  41. TreeList Class import java.util.ArrayList; public class TreeList { public static void main(String[] args) { ArrayList<Tree> list = new ArrayList<Tree>(); while (Math.random() < 0.9) { Tree t = new Tree(Math.random() * 100); System.out.printf("tree has radius %.3f\n", t.getRadius()); list.add(t); } System.out.printf("created %d trees\n", Tree.getNumberOfTrees()); System.out.printf("list has %d trees:\n", list.size()); for (Tree t : list) System.out.printf("tree with radius %.3f\n", t.getRadius()); } }

More Related