Download presentation
Presentation is loading. Please wait.
1
Static Poisoning
2
Review: class and instance variables int is a data type; 3 is a value (or instance) of that type A class is a data type; an object is a value (instance) of that type A class variable belongs to the class as a whole; there is only one of it An instance variable belongs to individual objects; there is one of it for each object, but none for the class as a whole You can’t refer to an instance variable if you don’t have an instance You “always” have the class The keyword static marks a variable as a class variable
3
Review: class and instance methods An instance method “belongs to” an individual object—you can use it only by “sending a message” to that object Example: String s = myTextField.getText(); A class (static) method belongs to a class Examples: –y = Math.abs(x); –if (Character.isLetter(ch)) {... }
4
Static context An application requires a public static void main(String args[]) method It must be static because, before your program starts, there aren’t any objects to send messages to This is a static context (a class method) –You can send messages to objects, if you have some objects: myTextField.setText("Hello"); –You cannot send a message to yourself, or use any instance variables—this is a static context, not an object non-static variable xxx cannot be referenced from a static context
5
About the term Static poisoning refers the fact that, in an application, you can’t access non-static variables or methods from a static context, so you end up making more and more things static “Static poisoning” is not a term that is in widespread use—I made it up There is a simple solution to this problem
6
An example of static poisoning public class StaticPoison { int x; int y; public static void main(String args[]) { doOneThing(); } void doOneThing() { x = 5; doAnotherThing(); } void doAnotherThing() { y = 10; } static
7
Another example public class Narcissus { int x; int y; int z; public static void main(String args[]) { x = 5; y = 10; z = x + y; }
8
An attempted solution public class Narcissus { int x; int y; int z; public static void main(String args[]) { Narcissus myself = new Narcissus(); myself.x = 5; myself.y = 10; myself.z = myself.x + myself.y; } }
9
The best solution public class Narcissus { int x; int y; int z; public static void main(String args[]) { new Narcissus().doItAll(); } void doItAll() { x = 5; y = 10; z = x + y; } }
10
Summary In an application, frequently the best way to write the main method is as follows: class MyClass { public static void main(String args[]) { MyClass myself = new MyClass(); myself.doAllTheWork(); } void doAllTheWork() { // note: not static } }
11
The End
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.