Java Reference
In-Depth Information
When you compile
TestCircleWithStaticMembers.java
, the Java compiler automatically
compiles
CircleWithStaticMembers.java
if it has not been compiled since the last change.
Static variables and methods can be accessed without creating objects. Line 6 displays the
number of objects, which is
0
, since no objects have been created.
The
main
method creates two circles,
c1
and
c2
(lines 9, 18). The instance variable
radius
in
c1
is modified to become
9
(line 21). This change does not affect the instance variable
radius
in
c2
, since these two instance variables are independent. The static variable
numberOfObjects
becomes
1
after
c1
is created (line 9), and it becomes
2
after
c2
is created (line 18).
Note that
PI
is a constant defined in
Math
, and
Math.PI
references the constant.
c1.numberOfObjects
(line 27) and
c2.numberOfObjects
(line 30) are better
replaced by
CircleWithStaticMembers.numberOfObjects
. This improves
readability, because other programmers can easily recognize the static variable. You
can
also
replace
CircleWithStaticMembers.numberOfObjects
with
CircleWithStaticMembers.getNumberOfObjects()
.
Tip
Use
ClassName.methodName(arguments)
to invoke a static method and
ClassName.staticVariable
to access a static variable. This improves readability,
because other programmers can easily recognize the static method and data in the class.
use class name
An instance method can invoke an instance or static method and access an instance or static
data field. A static method can invoke a static method and access a static data field. However,
a static method cannot invoke an instance method or access an instance data field, since static
methods and static data fields don't belong to a particular object. The relationship between
static and instance members is summarized in the following diagram:
invoke
invoke
An instance method
An instance method
access
access
An instance data field
An instance data field
An instance method
A static method
invoke
invoke
A static method
A static method
access
access
A static data field
A static data field
For example, the following code is wrong.
1
public class
A {
2
int
i =
5
;
3
static int
k =
2
;
4
5
public static void
main(String[] args) {
6
int
j = i;
// Wrong because i is an instance variable
7
m1();
// Wrong because m1() is an instance method
8 }
9
10
public void
m1() {
11
// Correct since instance and static variables and methods
12
// can be used in an instance method
13 i = i + k + m2(i, k);
14 }
15
16
public static int
m2(
int
i,
int
j) {
17
return
(
int
)(Math.pow(i, j));
18 }
19 }