1
|
- Announcements
- hw4 due Thursday February 26
- exam Tuesday March 2
- Agenda
- questions
- scope
- classes vs objects
- how parameters really work
|
2
|
- 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
|
3
|
- 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
- will fail because balance is private (an unlisted phone number)
|
4
|
- Import statement qualifies scope for class names
- No need to import String from java.lang
- java packages
- import java.util.Date
- import java.math.BigInteger
- … you could write your own BigInteger class
|
5
|
- 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
|
6
|
- 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
|
7
|
- 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
|
8
|
- 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
|
9
|
- 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
|
10
|
- 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
|
11
|
|
12
|
|