Static PoisoningReview: class and instance variablesReview: class and instance methodsStatic contextAbout the termAn example of static poisoningAnother exampleAn attempted solutionThe best solutionSummaryThe EndStatic PoisoningReview: 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 variableReview: 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)) { ... }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 contextAbout 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 problemAn example of static poisoningpublic class StaticPoison { int x; int y; public static void main(String args[]) { doOneThing(); } void doOneThing() { x = 5; doAnotherThing(); } void doAnotherThing() { y = 10; }}staticstaticstaticstaticAnother examplepublic class Narcissus { int x; int y; int z; public static void main(String args[]) { x = 5; y = 10; z = x + y; }}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; }}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; }}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 }}The
View Full Document