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 }