09.ppt

advertisement
CS110 Lecture 9
February 24, 2004
• Announcements
– hw3 due Thursday February 26
– exam Tuesday March 2
• Agenda
–
–
–
–
questions
scope
classes vs objects
how parameters really work
Lecture 9
1
Scope
• scope of a variable or method: where its
unadorned name is visible to the program
• Usually: the block { … } where it’s declared
• Examples from HLine.java
–
–
–
–
scope of all fields:
lines 15-114
scope of screen (line 100) : lines 100-113
scope of length (line 25): lines 25-29
scope of i
(line 41): lines 41-43
• Scope of a method is the class it’s declared in
• public declaration does not change scope
Lecture 9
2
Scope
• To see a method or field outside its scope,
qualify the name of the method or field:
– account.getBalance()
– System.out.println()
– this.contents
• Compare 7-6440, 287-6440 and (617)287-6440
• But
– account.balance
will fail because balance is private
(an unlisted phone number)
Lecture 9
3
import
• Import statement qualifies scope for class
names
• No need to import String, …
• java packages
• import java.lang.Date
• import …BigInteger
• … you could write your own BigInteger
class
Lecture 9
4
static
• Java keyword for belongs to whole class
rather than to an instance of the class
• Static things are rare, objects are common:
too much static is bad design
• public static void main( )
– main() is a static method - it can run before any
objects are created with new
– TestShapes (like many testing programs) is all
static: there is a TestShapes class, but never a
TestShapes object (although main uses objects
Lecture 9
5
What can main() see?
• HLine is meant to be a client class
– private fields
– public getters, setters, other methods as appropriate
• HLine has a static main method, for unit testing
• main in HLine
– can’t refer to length field or paintOn method, since
those belong only to HLine objects
– can instantiate an HLine object, and then send it a
paintOn message
Lecture 9
6
Static tools in the library
• To invoke a static method, send a message to the
class (there is no object) - syntax
ClassName.methodName( args )
• Math.sqrt( x )
• Calendar.getInstance()
a factory method -Java designers chose this rather than
new Calendar
• UnitTest.java line 21: HLine.main(args)
sends message to HLine class to run main() there
Lecture 9
7
static fields
• Syntax for accessing static field:
ClassName.fieldName (e.g. System.out )
(no System constructor, no System object)
• Like global variables (in other languages)
• In Integer class (part of Java API)
public static final int MAX_VALUE =
2147483647;
• final: Java keyword for “can’t be changed”
int big = Integer.MAX_VALUE; // OK
Integer.MAX_VALUE = 255; // error
• Naming convention for final fields: ALL_CAPS
Lecture 9
8
How parameters really work
• Box.java line 143 sends a message:
box2.paintOn( screen, 2, 2 );
• Execution shifts to method at Box.java line 52:
public void paintOn(
Screen s, int x, int y)
• Value of parameter
– s in method is value of screen in message
– x in method is (first) 2 in message
– y in method is (second) 2 in message
Lecture 9
9
How parameters really work
• Name of parameter (s) in method declaration
need not match the name of the value in the
message (screen)
• You can’t even think they should match:
– The value in the message might not even have a
name (the 2 in the example)
– The method can be written before the client
(in some other class) has even been imagined and the client programmer does not have access
to the source code with the method declaration
• The type of the value in the message must
match the type in the method declaration
Lecture 9
10
In Box main
Screen
Screen
Box
Box
Box
Box
screen:
box1:
box2:
int
width: 3
int
width: 4
char
pntCh: 'G'
Lecture 9
11
In Box main
Screen
Screen
Box
Box
Box
Box
In Box paintOn
screen:
box1:
box2:
out of scope
int
width: 3
int
width: 4
char
pntCh: 'G'
Box
this:
Screen
s:
int
int
y:
Lecture 9
2
x:
2
12
Download