|
StaticDemo |
|
1 // Example 3.1 joi/examples/StaticDemo.java
2 //
3 //
4 // Copyright 2003 Bill Campbell and Ethan Bolker
5
6 // Demonstrate the interplay between static members (fields and methods)
7 // and instance (non-static) members.
8 //
9 // %> java StaticDemo
10 // 0: counter = 1; objectField = 0
11 // StaticDemo.classMethod() = 100
12 // classMethod() = 100
13 // 1: counter = 2; objectField = 1
14 // StaticDemo.classMethod() = 101
15 // classMethod() = 101
16 // 2: counter = 3; objectField = 2
17 // StaticDemo.classMethod() = 103
18 // classMethod() = 103
19 // 3: counter = 4; objectField = 3
20 // StaticDemo.classMethod() = 106
21 // classMethod() = 106
22 // 4: counter = 5; objectField = 4
23 // StaticDemo.classMethod() = 110
24 // classMethod() = 110
25 //
26 // last classMethod() = 110
27
28 public class StaticDemo
29 {
30 // Declare three (static) class variables
31 // A class variable is associated with the (one) class.
32
33 private static int counter = 0;
34 private static int classVar = 0;
35 private static Terminal terminal = new Terminal();
36
37 int objectField = 0; // an instance variable; one per object
38
39 // The constructor keeps track of how many StaticDemo objects
40 // have been constructed.
41
42 public StaticDemo( int objectFieldValue )
43 {
44 objectField = objectFieldValue; // set the instance variable
45 counter++; // increment counter (counting the StaicDemos made)
46 }
47
48 public void instanceMethod()
49 {
50 // Instance methods can refer to both instance variables
51 // and class variables.
52
53 terminal.println( "counter = " + counter +
54 "; objectField = " + objectField );
55 classVar = classVar + objectField;
56
57 }
58
59 public static int classMethod()
60 {
61 // Class methods may refer only to class variables
62 // (and other class methods), as well as to local variables.
63
64 // What happens if we comment out the next line?
65 int counter = 100;
66
67 return counter + classVar;
68 }
69
70 public static void main( String[] args )
71 {
72 for (int i = 0; i < 5; i++) {
73 StaticDemo sd = new StaticDemo( i );
74 terminal.print( i + ": " );
75 sd.instanceMethod();
76
77 // classMethod()
78 // is equivalent to
79 // StaticDemo.classMethod()
80 terminal.println( "StaticDemo.classMethod() = "
81 + StaticDemo.classMethod() );
82 terminal.println( "classMethod() = "
83 + classMethod() );
84 }
85 terminal.println();
86 terminal.println( "last classMethod() = " + classMethod() );
87 }
88 }
89
|
StaticDemo |
|