From: mike d. <md...@je...> - 2002-08-14 21:32:33
|
begin Phillip Richdale quotation: > > A static method differs from a normal one in > > that there is no topical object instance, i.e. "this" reference. > > Hold it right there. Am I following? : > > ChessFigures HisChessFigures = new ChessFigures(); > ChessFigures MyChessFigures = new ChessFigures(); > > MyChessFigures.setColor("white"); > //^^^^^<- non-static, setting my color > HisChessFigures.setColor("black"); > //^^^^^<- non-static, setting his color > ... > > MyChessFigures.setMovable(false) > //^^^^^<- static, locking down mine *and* > //his figures, perhaps in a timeout or after > //the game is over > > I know it's a stupid example, but please tell me I'm on the right > track in terms of "static" and "non-static". If that's not the case > perhaps you have an example that's correct? If you meant "ChessFigures.setMovable(false)", then it is definitely static. Otherwise, the slightly confusing thing is that a static method *can* be called on an object instance. What you can't do is call a normal method against the class. Suppose if you had the following: class Foo { public Foo(int bar) { this.bar = bar; } public int getBar() { return bar; } public void setBar(int newBar) { bar = newBar; } public static int getBaz() { return baz; } public static void setBar(int newBaz) { baz = newBaz; } private int bar; private static int baz; } Foo a = new Foo(12345); Foo b = new Bar(42); Foo.setBaz(54321); // or a.setBaz(54321) or b.setBaz(54321) Foo.setBar(243); // This is an error; since setBar is not // static, it can only be called on an // instance, not the class. If you then call a.getBaz(), b.getBaz(), or Foo.getBaz(), you will get 54321. If you call a.getBar() you will get 12345, and b.getBar() yields 42. This is because the value of the static field "baz" is shared between the two instances of class Foo, while each instance has its own, separate value for "bar". Hope that helps. -md |