Enhancing Classes - PowerPoint PPT Presentation

1 / 38
About This Presentation
Title:

Enhancing Classes

Description:

Enhancing Classes Now we can explore various aspects of classes and objects in more detail Chapter 5 focuses on: object references and aliases passing objects ... – PowerPoint PPT presentation

Number of Views:135
Avg rating:3.0/5.0
Slides: 39
Provided by: JohnLe169
Category:

less

Transcript and Presenter's Notes

Title: Enhancing Classes


1
Enhancing Classes
  • Now we can explore various aspects of classes and
    objects in more detail
  • Chapter 5 focuses on
  • object references and aliases
  • passing objects references as parameters
  • the static modifier
  • wrapper classes
  • nested classes and inner classes

2
References
  • Recall from Chapter 2 that an object reference
    variable holds the memory address of an object
  • Rather than dealing with arbitrary addresses, we
    often depict a reference graphically as a
    pointer to an object
  • ChessPiece bishop1 new ChessPiece()

3
The null Reference
  • An object reference variable that does not
    currently point to an object is called a null
    reference
  • The reserved word null can be used to explicitly
    set a null reference
  • name null
  • or to check to see if a reference is currently
    null
  • if (name null)
  • System.out.println ("Invalid")

4
The null Reference
  • An object reference variable declared at the
    class level (an instance variable) is
    automatically initialized to null
  • The programmer must carefully ensure that an
    object reference variable refers to a valid
    object before it is used
  • Attempting to follow a null reference causes a
    NullPointerException to be thrown
  • Usually a compiler will check to see if a local
    variable is being used without being initialized

5
The this Reference
  • The this reference allows an object to refer to
    itself
  • That is, the this reference, used inside a
    method, refers to the object through which the
    method is being executed
  • Suppose the this reference is used in a method
    called tryMe
  • If tryMe is invoked as follows, the this
    reference refers to obj1
  • obj1.tryMe()
  • But in this case, the this reference refers to
    obj2
  • obj2.tryMe()

6
The this reference
  • The this reference can also be used to
    distinguish the parameters of a constructor from
    the corresponding instance variables with the
    same names

public Account (Sring name, long acctNumber,
double balance) this.name
name this.acctNumber acctNumber
this.balance balance
7
Assignment Revisited
  • The act of assignment takes a copy of a value and
    stores it in a variable
  • For primitive types
  • num2 num1

8
Reference Assignment
  • For object references, assignment copies the
    memory location
  • bishop2 bishop1

9
Aliases
  • Two or more references that refer to the same
    object are called aliases of each other
  • One object (and its data) can be accessed using
    different reference variables
  • Aliases can be useful, but should be managed
    carefully
  • Changing the objects state (its variables)
    through one reference changes it for all of its
    aliases

10
Testing Objects for Equality
  • The operator compares object references for
    equality, returning true if the references are
    aliases of each other
  • bishop1 bishop2
  • A method called equals is defined for all
    objects, but unless we redefine it when we write
    a class, it has the same semantics as the
    operator
  • bishop1.equals(bishop2)
  • We can redefine the equals method to return true
    under whatever conditions we think are appropriate

11
Garbage Collection
  • When an object no longer has any valid references
    to it, it can no longer be accessed by the
    program
  • The object is useless, and therefore is called
    garbage
  • Java performs automatic garbage collection
    periodically, returning an object's memory to the
    system for future use
  • In other languages, the programmer is responsible
    for performing garbage collection

12
Objects as Parameters
  • Parameters in a Java method are passed by value
  • This means that a copy of the actual parameter
    (the value passed in) is stored into the formal
    parameter (in the method header)
  • Passing parameters is therefore similar to an
    assignment statement
  • When an object is passed to a method, the actual
    parameter and the formal parameter become aliases
    of each other

13
Passing Objects to Methods
  • What you do with a parameter inside a method may
    or may not have a permanent effect (outside the
    method)
  • See ParameterPassing.java (page 277)
  • See ParameterTester.java (page 279)
  • See Num.java (page 280)
  • Note the difference between changing the
    reference and changing the object that the
    reference points to

14
ParameterPassing.java
  • public class ParameterPassing
  • public static void main (String args)
  • ParameterTester tester new
    ParameterTester()
  • int a1 111
  • Num a2 new Num (222)
  • Num a3 new Num (333)
  • System.out.println ("Before calling
    changeValues")
  • System.out.println ("a1\ta2\ta3")
  • System.out.println (a1 "\t" a2 "\t"
    a3 "\n")
  • tester.changeValues (a1, a2, a3)
  • System.out.println ("After calling
    changeValues")
  • System.out.println ("a1\ta2\ta3")
  • System.out.println (a1 "\t" a2 "\t"
    a3 "\n")

15
ParameterTester.java
  • public class ParameterTester
  • public void changeValues (int f1, Num f2, Num
    f3)
  • System.out.println ("Before changing the
    values")
  • System.out.println ("f1\tf2\tf3")
  • System.out.println (f1 "\t" f2 "\t"
    f3 "\n")
  • f1 999
  • f2.setValue(888)
  • f3 new Num (777)
  • System.out.println ("After changing the
    values")
  • System.out.println ("f1\tf2\tf3")
  • System.out.println (f1 "\t" f2 "\t"
    f3 "\n")

16
Num.java
  • public class Num
  • private int value
  • // Sets up the new Num object, storing an
    initial value.
  • public Num (int update)
  • value update
  • // Sets the stored value to the newly
    specified value.
  • public void setValue (int update)
  • value update
  • // Returns the stored integer value as a
    string.
  • public String toString ()
  • return value ""

17
The static Modifier
  • In Chapter 2 we discussed static methods (also
    called class methods) that can be invoked through
    the class name rather than through a particular
    object
  • For example, the methods of the Math class are
    static
  • Math.sqrt (25)
  • To write a static method, we apply the static
    modifier to the method definition
  • The static modifier can be applied to variables
    as well
  • It associates a variable or method with the class
    rather than with an object

18
Static Variables
  • Static variables are also called class variables
  • Normally, each object has its own data space, but
    if a variable is declared as static, only one
    copy of the variable exists
  • private static float price
  • Memory space for a static variable is created
    when the class in which it is declared is loaded
  • All objects created from the class share static
    variables
  • Changing the value of a static variable in one
    object changes it for all others

19
Static Methods
Because it is static, the method can be invoked
as
value Helper.triple (5)
20
Static Methods
  • The order of the modifiers can be interchanged,
    but by convention visibility modifiers come first
  • Recall that the main method is static it is
    invoked by the system without creating an object
  • Static methods cannot reference instance
    variables, because instance variables don't exist
    until an object exists
  • However, a static method can reference static
    variables or local variables

21
The static Modifier
  • Static methods and static variables often work
    together
  • See CountInstances.java (page 284)
  • See Slogan.java (page 285)

22
CountInstances.java
  • public class CountInstances
  • public static void main (String args)
  • Slogan obj
  • obj new Slogan ("Remember the Alamo.")
  • System.out.println (obj)
  • obj new Slogan ("Don't Worry. Be Happy.")
  • System.out.println (obj)
  • obj new Slogan ("Live Free or Die.")
  • System.out.println (obj)
  • obj new Slogan ("Talk is Cheap.")
  • System.out.println (obj)
  • obj new Slogan ("Write Once, Run Anywhere.")
  • System.out.println (obj)
  • System.out.println()
  • System.out.println ("Slogans created "
    Slogan.getCount())

23
Slogan.java
  • public class Slogan
  • private String phrase
  • private static int count 0
  • public Slogan (String str)
  • phrase str count
  • public String toString()
  • return phrase
  • public static int getCount ()
  • return count

24
Wrapper Classes
  • A wrapper class represents a particular primitive
    type
  • For example
  • Integer ageObj new Integer (20)
  • uses the Integer class to create an object which
    effectively represents the integer 20 as an
    object
  • This is useful when a program requires an object
    instead of a primitive type

25
Wrapper Classes
  • There is a wrapper class in the java.lang package
    for each primitive type

Primitive Type Wrapper Class
byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character
boolean Boolean
void Void
26
Wrapper Classes
  • Wrapper classes contain static methods that help
    manage the associated type
  • For example, the Integer class contains a method
    to convert an integer stored in a String to an
    int value
  • num Integer.parseInt (str)
  • The wrapper classes often contain useful static
    constants as well
  • For example, the Integer class contains MIN_VALUE
    and MAX_VALUE which hold the smallest and largest
    int values

27
Keyboard Input Revisited
  • The Keyboard class was introduced in Chapter 2 to
    facilitate capturing input from the keyboard
  • Recall that the Keyboard class was written by the
    authors of the book
  • The Keyboard class hides various aspects of Java
    input processing
  • But it is important to understand how that
    processing works

28
Reading Keyboard Input
  • Java I/O is accomplished using objects that
    represent streams of data
  • A stream is an ordered sequence of bytes
  • The System.out object represents a standard
    output stream, which defaults to the monitor
    screen
  • Reading keyboard input is more complicated
  • The input stream is made up of multiple objects
  • BufferedReader in new BufferedReader (
  • new InputStreamReader (System.in))

29
Reading Keyboard Input
  • The System.in object is used to create an
    InputStreamReader object
  • The InputStreamReader object is used to create a
    BufferedReader object
  • This creates an input stream that treats input as
    characters and buffers them so that input can be
    read a line at a time
  • The readLine method of the BufferedReader class
    reads an entire line of input as a String
  • Wrapper class methods can be used to convert
    numeric input

30
Reading Keyboard Input
  • Problems that arise in reading or converting a
    value manifest themselves as exceptions
  • The throws clause of a method header indicates
    what exceptions it may throw
  • See Wages2.java (page 289)
  • I/O and exceptions are explored further in
    Chapter 8

31
Wages2.java
  • import java.io.
  • import java.text.NumberFormat
  • public class Wages2
  • public static void main (String args) throws
    IOException
  • BufferedReader in new BufferedReader
    (new InputStreamReader (System.in))
  • String name
  • int hours
  • double rate, pay
  • System.out.print ("Enter your name ")
  • name in.readLine ()
  • System.out.print ("Enter the number of
    hours worked ")
  • hours Integer.parseInt (in.readLine())
  • System.out.print ("Enter pay rate per hour
    ")
  • rate Double.parseDouble (in.readLine())
  • System.out.println ()
  • pay hours rate
  • NumberFormat fmt NumberFormat.getCurrencyI
    nstance()

32
Nested Classes
  • In addition to containing data and methods, a
    class can contain other classes
  • A class declared within another class is called a
    nested class

33
Nested Classes
  • A nested class has access to the variables and
    methods of the enclosing class, even if they are
    declared private
  • In certain situations this makes the
    implementation of the classes easier because they
    can share information easily
  • Furthermore, the nested class can be protected by
    the enclosing class from external use
  • This is a special relationship and should be used
    with care

34
Nested Classes
  • A nested class produces a separate bytecode file
  • If a nested class called Inside is declared in an
    outer class called Outside, two bytecode files
    are produced
  • Outside.class
  • OutsideInside.class
  • Nested classes can be declared as static, in
    which case they cannot refer to instance
    variables or methods

35
Inner Classes
  • A nonstatic nested class is called an inner class
  • An inner class is associated with each instance
    of the enclosing class
  • An instance of an inner class can exist only
    within an instance of an enclosing class
  • See TestInner.java (page 291)
  • See Outer.java (page 292)

36
TestInner.java
  • public class TestInner
  • public static void main (String args)
  • Outer out new Outer()
  • System.out.println (out)
  • System.out.println()
  • out.changeMessages()
  • System.out.println (out)

37
Outer.java
  • public class Outer
  • private int num
  • private Inner in1, in2
  • public Outer()
  • num 9876
  • in1 new Inner ("Half of the problem is
    90 mental.")
  • in2 new Inner ("Another
    deadline. Another miracle.")
  • public void changeMessages()
  • in1.message "Life is uncertain. Eat
    dessert first."
  • in2.message "One seventh of your life
    is spent on Mondays."
  • public String toString() return in1 "\n"
    in2
  • private class Inner
  • public String message
  • public Inner (String str) message
    str

38
Summary
  • Chapter 5 has focused on
  • object references and aliases
  • passing objects references as parameters
  • the static modifier
  • wrapper classes
  • nested classes and inner classes
Write a Comment
User Comments (0)
About PowerShow.com