09slide 000
09slide 000
Lecture 02
Objects and Classes (1)
Chapter 9 Objects and Classes
Liang, Introduction to Java Programming, Tenth Edition, (c) 2015 Pearson Education, Inc. All
rights reserved.
2
Objectives
q To describe objects and classes, and use classes to model objects (§9.2).
q To use UML graphical notation to describe classes and objects (§9.2).
q To demonstrate how to define classes and create objects (§9.3).
q To create objects using constructors (§9.4).
q To access objects via object reference variables (§9.5).
q To define a reference variable using a reference type (§9.5.1).
q To access an object’s data and methods using the object member access operator (.) (§9.5.2).
q To define data fields of reference types and assign default values for an object’s data fields (§9.5.3).
q To distinguish between object reference variables and primitive data type variables (§9.5.4).
q To use the Java library classes Date, Random, and Point2D (§9.6).
q To distinguish between instance and static variables and methods (§9.7).
q To define private data fields with appropriate get and set methods (§9.8).
q To encapsulate data fields to make classes easy to maintain (§9.9).
q To develop methods with object arguments and differentiate between primitive-type arguments and
object-type arguments (§9.10).
q To store and process objects in arrays (§9.11).
q To create immutable objects from immutable classes to protect the contents of objects (§9.12).
q To determine the scope of variables in the context of a class (§9.13).
q To use the keyword this to refer to the calling object itself (§9.14).
Liang, Introduction to Java Programming, Tenth Edition, (c) 2015 Pearson Education, Inc. All
rights reserved.
3
Object-Oriented Programming
Object-oriented programming (OOP)
involves programming using objects
Liang, Introduction to Java Programming, Tenth Edition, (c) 2015 Pearson Education, Inc. All
rights reserved.
5
A Java Class
class SimpleCircle {
/** The radius of this circle */
double radius = 1.0; Data field
/** Construct a circle object */
SimpleCircle() {
}
Constructors
/** Construct a circle object */
SimpleCircle(double newRadius) {
radius = newRadius;
}
Liang, Introduction to Java Programming, Tenth Edition, (c) 2015 Pearson Education, Inc. All
rights reserved.
7
Example 1: Defining Classes & Creating Objects
TestSimpleCircle Run
Liang, Introduction to Java Programming, Tenth Edition, (c) 2015 Pearson Education, Inc. All
rights reserved.
8
Example 2: Defining Classes & Creating Objects
TV
channel: int The current channel (1 to 120) of this TV.
volumeLevel: int The current volume level (1 to 7) of this TV.
on: boolean Indicates whether this TV is on/off.
+setVolume(newVolumeLevel: int): void Sets a new volume level for this TV.
TV
TestTV Run
Liang, Introduction to Java Programming, Tenth Edition, (c) 2015 Pearson Education, Inc. All
rights reserved.
9
Constructors
What are They are a special kind of methods that are invoked to
they? construct and initialize objects
Example:
Circle myCircle;
Liang, Introduction to Java Programming, Tenth Edition, (c) 2015 Pearson Education, Inc. All
rights reserved.
12
Declaring & Constructing Objects in a Single Step
Liang, Introduction to Java Programming, Tenth Edition, (c) 2015 Pearson Education, Inc. All
rights reserved.
13
Accessing Object’s Members
Referencing the object’s data:
objectRefVar.data
Example: myCircle.radius
Liang, Introduction to Java Programming, Tenth Edition, (c) 2015 Pearson Education, Inc. All
rights reserved.
14
animation
Trace Code
Declare myCircle
yourCircle.radius = 100;
Liang, Introduction to Java Programming, Tenth Edition, (c) 2015 Pearson Education, Inc. All
rights reserved.
15
animation
radius: 5.0
Create a circle
Liang, Introduction to Java Programming, Tenth Edition, (c) 2015 Pearson Education, Inc. All
rights reserved.
16
animation
Liang, Introduction to Java Programming, Tenth Edition, (c) 2015 Pearson Education, Inc. All
rights reserved.
17
animation
radius: 5.0
yourCircle no value
Declare yourCircle
Liang, Introduction to Java Programming, Tenth Edition, (c) 2015 Pearson Education, Inc. All
rights reserved.
18
animation
radius: 5.0
yourCircle no value
: Circle
Create a new radius: 1.0
Circle object
Liang, Introduction to Java Programming, Tenth Edition, (c) 2015 Pearson Education, Inc. All
rights reserved.
19
animation
radius: 5.0
radius: 1.0
Liang, Introduction to Java Programming, Tenth Edition, (c) 2015 Pearson Education, Inc. All
rights reserved.
20
animation
radius: 5.0
: Circle
Change radius in radius: 100.0
yourCircle
Liang, Introduction to Java Programming, Tenth Edition, (c) 2015 Pearson Education, Inc. All
rights reserved.
21
Caution
Recall that, to invoke a method in the Math class, we use
Math.methodName(arguments) (e.g., Math.pow(3, 2.5))
The answer is no. All the methods used before this chapter were static
methods, which are defined using the static keyword. However,
getArea() is not static. It must be invoked from an object using
objectRefVar.methodName(arguments)
Example: myCircle.getArea()
Liang, Introduction to Java Programming, Tenth Edition, (c) 2015 Pearson Education, Inc. All
rights reserved.
22
Reference Data Fields
The data fields can be of primitive type or reference type
radius = 1
Liang, Introduction to Java Programming, Tenth Edition, (c) 2015 Pearson Education, Inc. All
rights reserved.
26
Copying Variables of Primitive Data
Types & Object Types
Primitive type assignment i = j
Before: After:
i 1 i 2
j 2 j 2
Before: After:
c1 c1
c2 c2
Liang, Introduction to Java Programming, Tenth Edition, (c) 2015 Pearson Education, Inc. All
rights reserved.
27
Garbage Collection
As shown in the previous figure, after the assignment
statement c1 = c2, c1 points to the same object
referenced by c2. The object previously referenced by
c1 is no longer referenced. That object is now garbage
Lecture 03
Objects and Classes (2)
Liang, Introduction to Java Programming, Tenth Edition, (c) 2015 Pearson Education, Inc. All
rights reserved.
Instance and Static Variables, Constants & Methods
Instance Static
Variables belong to a shared by all the instances of
specific instance the class
Methods are invoked by an not tied to a specific instance
instance of a class
Constants are final variables shared by
all the instances of the class
To declare static variables,
constants, and methods, use
the static modifier
Liang, Introduction to Java Programming, Tenth Edition, (c) 2015 Pearson Education, Inc. All
rights reserved.
30
Static Variables, Constants, and Methods
Liang, Introduction to Java Programming, Tenth Edition, (c) 2015 Pearson Education, Inc. All
rights reserved.
31
Example: Using Instance & Class Variables & Methods
CircleWithStaticMembers
TestCircleWithStaticMembers Run
Liang, Introduction to Java Programming, Tenth Edition, (c) 2015 Pearson Education, Inc. All
rights reserved.
32
Visibility Modifiers & Accessor/Mutator Methods
Liang, Introduction to Java Programming, Tenth Edition, (c) 2015 Pearson Education, Inc. All
rights reserved.
35
NOTE
§ An object cannot access its private members, as shown in (b)
§ It is OK, however, if the object is declared in its own class, as
shown in (a)
Liang, Introduction to Java Programming, Tenth Edition, (c) 2015 Pearson Education, Inc. All
rights reserved.
36
Why Data Fields Should Be private?
1. To protect data
Liang, Introduction to Java Programming, Tenth Edition, (c) 2015 Pearson Education, Inc. All
rights reserved.
37
Data Field Encapsulation
For data field encapsulation, we make the data fields in a class
private and provide access to them via public methods
Circle
The - sign indicates
private modifier -radius: double The radius of this circle (default: 1.0).
-numberOfObjects: int The number of circle objects created.
CircleWithPrivateDataFields
TestCircleWithPrivateDataFields Run
Liang, Introduction to Java Programming, Tenth Edition, (c) 2015 Pearson Education, Inc. All
rights reserved.
38
Passing Objects to Methods
§ Passing by value for primitive type value (the
value is passed to the parameter)
§ Passing by value for reference type value (the
value is the reference to the object)
TestPassObject Run
Liang, Introduction to Java Programming, Tenth Edition, (c) 2015 Pearson Education, Inc. All
rights reserved.
39
Passing Objects to Methods, cont.
Liang, Introduction to Java Programming, Tenth Edition, (c) 2015 Pearson Education, Inc. All
rights reserved.
40
Array of Objects
Circle[] circleArray = new Circle[10];
Liang, Introduction to Java Programming, Tenth Edition, (c) 2015 Pearson Education, Inc. All
rights reserved.
41
Array of Objects, cont.
Circle[] circleArray = new Circle[10];
Liang, Introduction to Java Programming, Tenth Edition, (c) 2015 Pearson Education, Inc. All
rights reserved.
42
Immutable Objects and Classes
If the contents of an object cannot be changed once the object
is created, the object is called an immutable object and its class
is called an immutable class
Example: If you delete the set method in the Circle class in
Listing 8.10, the class would be immutable because radius is
private and cannot be changed without a set() method.
A class with all private data fields and without mutators is not
necessarily immutable. For example, the following class
Student has all private data fields and no mutators, but it
is mutable
Liang, Introduction to Java Programming, Tenth Edition, (c) 2015 Pearson Education, Inc. All
rights reserved.
43
Example public class BirthDate {
private int year;
public class Student { private int month;
private int id; private int day;
private BirthDate birthDate;
public BirthDate(int newYear,
public Student(int ssn, int newMonth, int newDay) {
int year, int month, int day) { year = newYear;
id = ssn;
month = newMonth;
birthDate = new BirthDate(year,
day = newDay;
month, day);
}
}
public int getId() { public void setYear(int newYear) {
return id; year = newYear;
} }
}
public BirthDate getBirthDate() {
return birthDate;
}
} public class Test {
public static void main(String[] args) {
Student student = new Student(111223333, 1970, 5, 3);
BirthDate date = student.getBirthDate();
date.setYear(2010); // Now the student birth year is changed!
}
}
Liang, Introduction to Java Programming, Tenth Edition, (c) 2015 Pearson Education, Inc. All
rights reserved.
44
What Class is Immutable?
Liang, Introduction to Java Programming, Tenth Edition, (c) 2015 Pearson Education, Inc. All
rights reserved.
45
Scope of Variables
The scope of a variable is the region of
code within which a variable is visible
§ The scope of instance and static variables is the
entire class. They can be declared anywhere
inside a class
§ The scope of a local variable starts from its
declaration and continues to the end of the block
that contains the variable
• A local variable must be initialized explicitly
before it can be used
Liang, Introduction to Java Programming, Tenth Edition, (c) 2015 Pearson Education, Inc. All
rights reserved.
46
The this Keyword
§ The this keyword is the name of a reference
that refers to an object itself
Liang, Introduction to Java Programming, Tenth Edition, (c) 2015 Pearson Education, Inc. All
rights reserved.
47
this Example: Reference the Hidden Data Fields
public class F { Suppose that f1 and f2 are two objects of F.
private int i = 5; F f1 = new F(); F f2 = new F();
private static double k = 0;
Invoking f1.setI(10) is to execute
void setI(int i) { this.i = 10, where this refers f1
this.i = i;
} Invoking f2.setI(45) is to execute
static void setK(double k) { this.i = 45, where this refers f2
F.k = k;
}
}
Liang, Introduction to Java Programming, Tenth Edition, (c) 2015 Pearson Education, Inc. All
rights reserved.
48
this Example: Calling Overloaded Constructor
public class Circle {
private double radius;
Liang, Introduction to Java Programming, Tenth Edition, (c) 2015 Pearson Education, Inc. All
rights reserved.
50
Date Class Example
The following code
java.util.Date date = new java.util.Date();
System.out.println(date.toString());
Liang, Introduction to Java Programming, Tenth Edition, (c) 2015 Pearson Education, Inc. All
rights reserved.
51
The Random Class
We have used Math.random() to obtain a random
double value between 0.0 and 1.0 (excluding 1.0).
A more useful random number generator is
provided in the java.util.Random class
java.util.Random
+Random() Constructs a Random object with the current time as its seed.
+Random(seed: long) Constructs a Random object with a specified seed.
+nextInt(): int Returns a random int value.
+nextInt(n: int): int Returns a random int value between 0 and n (exclusive).
+nextLong(): long Returns a random long value.
+nextDouble(): double Returns a random double value between 0.0 and 1.0 (exclusive).
+nextFloat(): float Returns a random float value between 0.0F and 1.0F (exclusive).
+nextBoolean(): boolean Returns a random boolean value.
Liang, Introduction to Java Programming, Tenth Edition, (c) 2015 Pearson Education, Inc. All
rights reserved.
52
Random Class Example
If two Random objects have the same seed, they will generate
identical sequences of numbers. For example, the following
code creates two Random objects with the same seed 3.
Random random1 = new Random(3);
System.out.print("From random1: ");
for (int i = 0; i < 10; i++)
System.out.print(random1.nextInt(1000) + " ");
Random random2 = new Random(3);
System.out.print("\nFrom random2: ");
for (int i = 0; i < 10; i++)
System.out.print(random2.nextInt(1000) + " ");
From random1: 734 660 210 581 128 202 549 564 459 961
From random2: 734 660 210 581 128 202 549 564 459 961
Liang, Introduction to Java Programming, Tenth Edition, (c) 2015 Pearson Education, Inc. All
rights reserved.
53
The Point2D Class
Java API has a convenient Point2D class in the
javafx.geometry package for representing a
point in a two-dimensional plane
TestPoint2D Run
Liang, Introduction to Java Programming, Tenth Edition, (c) 2015 Pearson Education, Inc. All
rights reserved.
54