Java Reference
In-Depth Information
Note that if you replace the preceding code with the following new code, the program would
be fine, because the instance data field
i
and method
m1
are now accessed from an object
a
(lines 7-8):
1
public class
A {
2
int
i =
5
;
3
static int
k =
2
;
4
5
public static void
main(String[] args) {
6
A a =
new
A();
7
int
j = a.i;
// OK, a.i accesses the object's instance variable
8
a.m1();
// OK. a.m1() invokes the object's instance method
9 }
10
11
public void
m1() {
12
i = i + k + m2(i, k);
13 }
14
15
public static int
m2(
int
i,
int
j) {
16
return
(
int
)(Math.pow(i, j));
17 }
18 }
Design Guide
How do you decide whether a variable or method should be an instance one or a static
one? A variable or method that is dependent on a specific instance of the class should
be an instance variable or method. A variable or method that is not dependent on a spe-
cific instance of the class should be a static variable or method. For example, every circle
has its own radius, so the radius is dependent on a specific circle. Therefore,
radius
is
an instance variable of the
Circle
class. Since the
getArea
method is dependent on
a specific circle, it is an instance method. None of the methods in the
Math
class, such
as
random
,
pow
,
sin
, and
cos
, is dependent on a specific instance. Therefore, these
methods are static methods. The
main
method is static and can be invoked directly
from a class.
instance or static?
Caution
It is a common design error to define an instance method that should have been defined
as static. For example, the method
factorial(int n)
should be defined as static, as
shown next, because it is independent of any specific instance.
common design error
public class
Test {
public int
factorial(
int
n) {
int
result =
1
;
for
(
int
i =
1
; i <= n; i++)
result *= i;
return
result;
public class
Test {
public int
factorial(
int
n) {
int
result =
1
;
for
(
int
i =
1
; i <= n; i++)
result *= i;
return
result;
static
}
}
}
}
(a) Wrong design
(b) Correct design
✓
✓
Check
8.17
Point
Suppose that the class
F
is defined in (a). Let
f
be an instance of
F
. Which of the
statements in (b) are correct?