csc 142 computer science ii
DESCRIPTION
CSC 142 Computer Science II. Zhen Jiang West Chester University [email protected]. Table of Contents. Introduction to field (attribute) Public and private modifiers Accessor and mutator methods Constructor Static method Instance method Overloading Static variables Summary. Fields. - PowerPoint PPT PresentationTRANSCRIPT
![Page 2: CSC 142 Computer Science II](https://reader036.vdocument.in/reader036/viewer/2022062321/56813660550346895d9deca9/html5/thumbnails/2.jpg)
Table of Contents Introduction to field (attribute) Public and private modifiers Accessor and mutator methods Constructor Static method Instance method Overloading Static variables Summary
204/20/23
![Page 3: CSC 142 Computer Science II](https://reader036.vdocument.in/reader036/viewer/2022062321/56813660550346895d9deca9/html5/thumbnails/3.jpg)
Fields field: A variable inside an object that represents part
of its internal state. Each object will have its own copy of the data fields we
declare.
Declaring a field, general syntax:public <type> <name>;orpublic <type> <name> = <value>;(with initialization)
Example:public class Student { public String name; // each student object has a public double gpa; // name and gpa data field}
304/20/23
![Page 4: CSC 142 Computer Science II](https://reader036.vdocument.in/reader036/viewer/2022062321/56813660550346895d9deca9/html5/thumbnails/4.jpg)
public class Point3D { public int x; public int y;
public int z;}
Every object of type Point3D contains three integers.
Point3D objects (so far) do not contain any behavior.
Class declarations are saved in a file of the same name: Point3D.java
404/20/23
![Page 5: CSC 142 Computer Science II](https://reader036.vdocument.in/reader036/viewer/2022062321/56813660550346895d9deca9/html5/thumbnails/5.jpg)
Public and private modifiers
P332 Type specified as public
Any other class can directly access that object by name
Classes generally specified as public Instance variables usually not public
Instead specify as private
04/20/23 5
![Page 6: CSC 142 Computer Science II](https://reader036.vdocument.in/reader036/viewer/2022062321/56813660550346895d9deca9/html5/thumbnails/6.jpg)
Dog.java Change field to private http://www.cs.wcupa.edu/~zjiang/
Dog2trial.pdf
DogDemo.java http://www.cs.wcupa.edu/~zjiang/
DogDemo.pdf
04/20/23 6
![Page 7: CSC 142 Computer Science II](https://reader036.vdocument.in/reader036/viewer/2022062321/56813660550346895d9deca9/html5/thumbnails/7.jpg)
04/20/23 7
![Page 8: CSC 142 Computer Science II](https://reader036.vdocument.in/reader036/viewer/2022062321/56813660550346895d9deca9/html5/thumbnails/8.jpg)
Demonstration of need for private variables
Statement such asbalto.name = "Balto";
is illegal since name is private
04/20/23 8
![Page 9: CSC 142 Computer Science II](https://reader036.vdocument.in/reader036/viewer/2022062321/56813660550346895d9deca9/html5/thumbnails/9.jpg)
Accessor and Mutator Methods
P337-338
Must also provide methods to change the values of the private instance variable Typically named setSomeValue Referred to as a mutator method
When instance variables are private must provide methods to access values stored there Typically named getSomeValue Referred to as an accessor method
04/20/23 9
![Page 10: CSC 142 Computer Science II](https://reader036.vdocument.in/reader036/viewer/2022062321/56813660550346895d9deca9/html5/thumbnails/10.jpg)
Consider the example class with accessor and mutator methods
http://www.cs.wcupa.edu/~zjiang/Dog2.pdf
Note the mutator method setName , setBreed , setAge
Note accessor methods getName, getBreed, getAge
04/20/23 10
![Page 11: CSC 142 Computer Science II](https://reader036.vdocument.in/reader036/viewer/2022062321/56813660550346895d9deca9/html5/thumbnails/11.jpg)
Using the accessor and mutator methods
http://www.cs.wcupa.edu/~zjiang/DogDemo2.pdf
04/20/23 11
![Page 12: CSC 142 Computer Science II](https://reader036.vdocument.in/reader036/viewer/2022062321/56813660550346895d9deca9/html5/thumbnails/12.jpg)
1204/20/23
1 public class DogDemo2 2 { 3 public static void main(String[] args) 4 { 5 Dog2 balto = new Dog2(); 6 balto.setName("Balto"); 7 balto.setAge(8); 8 balto.setBreed("Siberian Husky"); 9 balto.writeOutput();10 11 Dog2 scooby = new Dog2();12 scooby.setName("Scooby");13 scooby.setAge(42);14 scooby.setBreed("Great Dane");15 System.out.println(scooby.getName()+" is a "+scooby.getBreed()+".");16 System.out.print("He is " + scooby.getAge() + " years old, or ");17 int humanYears = scooby.getAgeInHumanYears();18 System.out.println(humanYears + " in human years.");19 }20 }21
Tedious
![Page 13: CSC 142 Computer Science II](https://reader036.vdocument.in/reader036/viewer/2022062321/56813660550346895d9deca9/html5/thumbnails/13.jpg)
We want something more like:
// better!Dog3 balto = new Dog3(“Balto”, “Siberian Husky”, 8);
1304/20/23
![Page 14: CSC 142 Computer Science II](https://reader036.vdocument.in/reader036/viewer/2022062321/56813660550346895d9deca9/html5/thumbnails/14.jpg)
Constructor constructor: A special method that initializes
the state of new objects as they are created.
Constructor syntax, p352:public <class name> (<parameter(s)>) { <statement(s)>;}
How does this differ from previous methods? Method name No return!
1404/20/23
![Page 15: CSC 142 Computer Science II](https://reader036.vdocument.in/reader036/viewer/2022062321/56813660550346895d9deca9/html5/thumbnails/15.jpg)
public class Dog3 { private String name; private String breed; private int age;
public Dog3(String strName, String strBreed, int
intAge) { name = strName; breed = strBreed; age = intAge; }}
1504/20/23
![Page 16: CSC 142 Computer Science II](https://reader036.vdocument.in/reader036/viewer/2022062321/56813660550346895d9deca9/html5/thumbnails/16.jpg)
http://www.cs.wcupa.edu/~zjiang/Dog3.pdf http://www.cs.wcupa.edu/~zjiang/
DogDemo3.pdf
04/20/23 16
![Page 17: CSC 142 Computer Science II](https://reader036.vdocument.in/reader036/viewer/2022062321/56813660550346895d9deca9/html5/thumbnails/17.jpg)
04/20/23 17
![Page 18: CSC 142 Computer Science II](https://reader036.vdocument.in/reader036/viewer/2022062321/56813660550346895d9deca9/html5/thumbnails/18.jpg)
Calling method from constructor: a constructor can call methods within its method body, in order to avoid unnecessarily repeating some code.
To avoid the problem with inheritance, which we will cover later, we need to make such a method private!
1804/20/23
![Page 19: CSC 142 Computer Science II](https://reader036.vdocument.in/reader036/viewer/2022062321/56813660550346895d9deca9/html5/thumbnails/19.jpg)
Static Methods Some methods may have no relation
to any type of object, p501 One method each class
Example Compute max of two integers Convert character from upper- to lower case
Static method declared in a class Can be invoked without using an object Instead use the class name
04/20/23 19
![Page 20: CSC 142 Computer Science II](https://reader036.vdocument.in/reader036/viewer/2022062321/56813660550346895d9deca9/html5/thumbnails/20.jpg)
Adding Method main to a Class Method main used so far in its own class Often useful to include method main within
class definition To create objects of other classes To be run as a start of program For any ordinary class, method main is
ignored
04/20/23 20
![Page 21: CSC 142 Computer Science II](https://reader036.vdocument.in/reader036/viewer/2022062321/56813660550346895d9deca9/html5/thumbnails/21.jpg)
public class Point3D { public int x; public int y;
public int z;}
Every object of type Point3D contains three integers.
Point3D objects (so far) do not contain any behavior.
Class declarations are saved in a file of the same name: Point3D.java
2104/20/23
![Page 22: CSC 142 Computer Science II](https://reader036.vdocument.in/reader036/viewer/2022062321/56813660550346895d9deca9/html5/thumbnails/22.jpg)
22
How would we translate several points?p1.x += 11;p1.y += 6;p1.z + 2;
p2.x += 2;p2.y += 4;p2.z += -2;
p3.x += 1;p3.y += 7;p3.z += 17;
What is unsettling about this code?04/20/23
![Page 23: CSC 142 Computer Science II](https://reader036.vdocument.in/reader036/viewer/2022062321/56813660550346895d9deca9/html5/thumbnails/23.jpg)
23
Write a static method in the client code to translate points.
// Shifts the location of the given point.public static void translate(
Point p, int dx, int dy, int dz) { p.x += dx; p.y += dy; p.z += dz;}
Example:// move p2 translate(p2, 2, 4, 6);
Question: Why doesn't the method need to return the modified point?04/20/23
![Page 24: CSC 142 Computer Science II](https://reader036.vdocument.in/reader036/viewer/2022062321/56813660550346895d9deca9/html5/thumbnails/24.jpg)
24
Every client code (application class) that declares Point3D and wants to translate points would have to write their own static translate method!
Also, the call syntax doesn't match the way we're used to interacting with objects:
translate(p2, 2, 4);
We want something more like:
p2.translate(2, 4);04/20/23
![Page 25: CSC 142 Computer Science II](https://reader036.vdocument.in/reader036/viewer/2022062321/56813660550346895d9deca9/html5/thumbnails/25.jpg)
25
Instance methods
instance method: A method inside an object that operates on that object, p347
Declaring an object's method, general syntax:public <type> <name> (<parameter(s)>) {
<statement(s)>;
}
How does this differ from previous methods?
04/20/23
![Page 26: CSC 142 Computer Science II](https://reader036.vdocument.in/reader036/viewer/2022062321/56813660550346895d9deca9/html5/thumbnails/26.jpg)
26
An object's instance methods can refer to its fields.
public void translate(int dx, int dy, int dz) {
x += dx;
y += dy;
z += dz;
}
How does the translate method know which x, y, z to modify?04/20/23
![Page 27: CSC 142 Computer Science II](https://reader036.vdocument.in/reader036/viewer/2022062321/56813660550346895d9deca9/html5/thumbnails/27.jpg)
27
Each instance method call happens on a particular object.
Example: p1.translate(11, 6, 2);
The code for an instance method has an implied knowledge of what object it is operating on.
implicit parameter: The object on which an instance method is called.
04/20/23
![Page 28: CSC 142 Computer Science II](https://reader036.vdocument.in/reader036/viewer/2022062321/56813660550346895d9deca9/html5/thumbnails/28.jpg)
28
Think of each Point3D object as having its own copy of the translate method, which operates on that object's state:
Point3D p1 = new Point3D(7, 2, -2);Point3D p2 = new Point3D(4, 3, 2);
p1:
p2:
public void translate(int dx, int dy, int dz){ ...
}
y:x: 7 2 z: -2
public void translate(int dx, int dy, int dz){ ...
}
y:x: 4 3 z: 2
04/20/23
![Page 29: CSC 142 Computer Science II](https://reader036.vdocument.in/reader036/viewer/2022062321/56813660550346895d9deca9/html5/thumbnails/29.jpg)
18
29
What happens when the following calls are made?p1.translate(11, 6, 3);
p2.translate(1, 7, -10);
p1:
p2:
public void translate(int dx, int dy, int dz){ ...
}
y:x: 7 2 z: -2
public void translate(int dx, int dy, int dz){ ...
}
y:x: 4 3 z: 2
8 1
5 10 -8
04/20/23
![Page 30: CSC 142 Computer Science II](https://reader036.vdocument.in/reader036/viewer/2022062321/56813660550346895d9deca9/html5/thumbnails/30.jpg)
public class Point3D { public int x; public int y;
public Point3D(int initialX, int initialY, int initialZ) {
x = initialX; y = initialY; z = initialZ; }
// Changes the location of this Point3D object. public void translate(int dx, int dy, int dz){ x += dx; y += dy; z += dz; }}
3004/20/23
![Page 31: CSC 142 Computer Science II](https://reader036.vdocument.in/reader036/viewer/2022062321/56813660550346895d9deca9/html5/thumbnails/31.jpg)
31
public class PointMain3 { public static void main(String[] args) { // create two Point3D objects Point3D p1 = new Point3D(5, 2, -2);
Point3D p2 = new Point3D(4, 3, 2);
// print each point System.out.println("p1 is (" + p1.x + ", " + p1.y + ")"); System.out.println("p2 is (" + p2.x + ", " + p2.y + ")");
// move p2 and then print it again p2.translate(2, 4, -2); System.out.println("p2 is (" + p2.x + ", " + p2.y + ")"); }}
Output:p1 is (5, 2, -2)p2 is (4, 3, 2)p2 is (6, 7, 0)
04/20/23
![Page 32: CSC 142 Computer Science II](https://reader036.vdocument.in/reader036/viewer/2022062321/56813660550346895d9deca9/html5/thumbnails/32.jpg)
32
Instead ofSystem.out.println("p1 is (" + p1.x + ", " + p1.y + ")");
It would be nice to have something more like:System.out.println("p1 is " + p1);
What does this line currently do? Does it even compile?It will print: p1 is Point@9e8c34
04/20/23
![Page 33: CSC 142 Computer Science II](https://reader036.vdocument.in/reader036/viewer/2022062321/56813660550346895d9deca9/html5/thumbnails/33.jpg)
33
When an object is printed or concatenated with a String, Java calls the object's toString method, p509-516.
System.out.println("p1 is " + p1);
is equivalent to:
System.out.println("p1 is " + p1.toString());
Note: Every class has a toString method.04/20/23
![Page 34: CSC 142 Computer Science II](https://reader036.vdocument.in/reader036/viewer/2022062321/56813660550346895d9deca9/html5/thumbnails/34.jpg)
34
The default toString behavior is to return the class's name followed by gibberish (as far as you are concerned).
You can replace the default behavior by defining a toString method in your class.
04/20/23
![Page 35: CSC 142 Computer Science II](https://reader036.vdocument.in/reader036/viewer/2022062321/56813660550346895d9deca9/html5/thumbnails/35.jpg)
35
The toString method, general syntax:public String toString() { <statement(s) that return a String>;}
NB: The method must have this exact name and signature (i.e., public String toString()).
Example:// Returns a String representing this Point.public String toString() { return "(" + x + ", " + y + “, “ + z + ")";}
04/20/23
![Page 36: CSC 142 Computer Science II](https://reader036.vdocument.in/reader036/viewer/2022062321/56813660550346895d9deca9/html5/thumbnails/36.jpg)
The Math Class Provides many standard mathematical
methods See in examples
04/20/23 36
![Page 37: CSC 142 Computer Science II](https://reader036.vdocument.in/reader036/viewer/2022062321/56813660550346895d9deca9/html5/thumbnails/37.jpg)
04/20/23 37
![Page 38: CSC 142 Computer Science II](https://reader036.vdocument.in/reader036/viewer/2022062321/56813660550346895d9deca9/html5/thumbnails/38.jpg)
Recall that arguments of primitive type treated differently from those of a class type May need to treat primitive value as
an object Java provides wrapper classes for
each primitive type, p562 Methods provided to act on values
04/20/23 38
![Page 39: CSC 142 Computer Science II](https://reader036.vdocument.in/reader036/viewer/2022062321/56813660550346895d9deca9/html5/thumbnails/39.jpg)
Contain useful predefined constants and methods, for instance: Integer.MAX_VALUE Double.parseDouble(“199.88”) Double.toString(199.88)
Have no default constructor Programmer must specify an initializing value
when creating new object
Have no set methods04/20/23 39
![Page 40: CSC 142 Computer Science II](https://reader036.vdocument.in/reader036/viewer/2022062321/56813660550346895d9deca9/html5/thumbnails/40.jpg)
Overloading When two or more methods have
same name within the same class Java distinguishes the methods by
number and types of parameters If it cannot match a call with a definition,
it attempts to do type conversions A method's name and number and
type of parameters is called the signature
04/20/23 40
![Page 41: CSC 142 Computer Science II](https://reader036.vdocument.in/reader036/viewer/2022062321/56813660550346895d9deca9/html5/thumbnails/41.jpg)
Overloading and automatic type conversion can conflict
Remember the compiler attempts to overload before it does type conversion
Use descriptive method names, avoid overloading
04/20/23 41
![Page 42: CSC 142 Computer Science II](https://reader036.vdocument.in/reader036/viewer/2022062321/56813660550346895d9deca9/html5/thumbnails/42.jpg)
P376 http://www.cs.wcupa.edu/~zjiang/Overload.pdf
04/20/23 42
![Page 43: CSC 142 Computer Science II](https://reader036.vdocument.in/reader036/viewer/2022062321/56813660550346895d9deca9/html5/thumbnails/43.jpg)
You must not overload a method where the only difference is the type of value returned
04/20/23 43
![Page 44: CSC 142 Computer Science II](https://reader036.vdocument.in/reader036/viewer/2022062321/56813660550346895d9deca9/html5/thumbnails/44.jpg)
Static Variables Are shared by all objects of a class
Variables declared static final are considered constants – value cannot be changed
e.g., public static final double FEET_PER_YARD = 3;
Variables declared static (without final) can be changed, p498 Only one instance of the variable exists It can be accessed by all instances of the class e.g., public static int numberOfInvocations;
04/20/23 44
![Page 45: CSC 142 Computer Science II](https://reader036.vdocument.in/reader036/viewer/2022062321/56813660550346895d9deca9/html5/thumbnails/45.jpg)
Static variables also called class variables Contrast with instance variables
Do not confuse class variables with variables of a class type
Both static variables and instance variables are sometimes called fields or data members
04/20/23 45
![Page 46: CSC 142 Computer Science II](https://reader036.vdocument.in/reader036/viewer/2022062321/56813660550346895d9deca9/html5/thumbnails/46.jpg)
Public and private modifier, p332 Accessor and mutator method, p337 Constructor, p352 Calling private method from constructor Static method, p501 Instance method, p347 Adding method main to a class Math class Wrapper class, p562 Overloading, p376 Static Variables, p498
4604/20/23
Summary