Solved

Method static variables

Posted on 2000-04-20
7
223 Views
Last Modified: 2013-11-23
Why aren't there static variables in methods in Java like there are in C++? Is that against OO design?
0
Comment
Question by:Sasha_Mapa
  • 3
  • 2
  • 2
7 Comments
 
LVL 3

Expert Comment

by:Laminamia063099
ID: 2734774
C++ static variables are against good design in general.  In C++ they are used to track changes or values from one method call to the next.  This is bad design because the same call to the method with the same parameters and same class variable values can have different results because a static method variable has different values.

In good program design, the same call to a class method with the same parameters and the same instance values should always produce the same result.  C++ static method variables break this design constraint and code becomes unpredictable.

Laminamia :)
0
 
LVL 16

Accepted Solution

by:
heyhey_ earned 5 total points
ID: 2734823
in C (forget C++) you have functions & static variables to keep some state between function calls.

in Java you have Objects with methods and fields which keep the object state between method calls :)
0
 
LVL 7

Author Comment

by:Sasha_Mapa
ID: 2734907
Ok, I see.
Here is a simplification of the case when the need for a method static variable arised:
I wanted to get lots of images, add them to a media tracker and then wait for them to load. I didn't want to repeat the same code of

myImage46 = getImage(getCodeBase(),"imagename.gif");
imageTracker.addImage(myImage,46);

many times so I wrote a method that would take the name of the image and the MediaTracker as arguments and would return the Image having added it to the MediaTracker. The problem is that I don't know the number of the image from within that method, and a static variable (a static variable in that method) which would increase by 1 every time the method would be called seemed the right way to go here. Not being able to use that I had to add a private instance variable to my applet. So I ended up adding an instance variable which did not represent any actual state of my applet. That sounds like bad OO design too...no?
0
Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

 
LVL 16

Expert Comment

by:heyhey_
ID: 2734950
if method that loads images is part of your applet, than the information about how many images are loaded is part of that applet too :)

if you put this method in some specila ImageManager object (which can be implemented as Singleton), this field will be member of that object.

there is no such thing as 'method with state' - only object have state.

(in C you have functions with state)
0
 
LVL 7

Author Comment

by:Sasha_Mapa
ID: 2735030
LOL, I see what you mean now...
What's a Singleton? A static object shared between all applications?
0
 
LVL 3

Expert Comment

by:Laminamia063099
ID: 2735266
A Singleton object only is instantiated once.  It does this by controlling it's creation.  This is important because anyone who has a handle to the singleton object has a handle to the same object.  You have to make the constructor private/protected and provide a method that returns a handle to the instance:

class Singleton {
  protected static handleToInstance = null;
  protected Singleton(){}
  public getInstance (){
     if (handleToInstance == null)
          handleToInstance = new Singleton();
     return handleToInstance;
  }
}

It's great when used in appropriate areas, like heyhey's suggestion.

Laminamia
0
 
LVL 7

Author Comment

by:Sasha_Mapa
ID: 2735287
Cool! I'll see whether it fits somewhere in my app. Thanks a lot guys.
0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
network + 7 80
JDeveloper 12c for 32 bit 4 67
java 8 lambda expresssions exception handling 3 72
thymeleaf natural templating vs JSP 2 66
This was posted to the Netbeans forum a Feb, 2010 and I also sent it to Verisign. Who didn't help much in my struggles to get my application signed. ------------------------- Start The idea here is to target your cell phones with the correct…
Introduction Java can be integrated with native programs using an interface called JNI(Java Native Interface). Native programs are programs which can directly run on the processor. JNI is simply a naming and calling convention so that the JVM (Java…
Viewers learn how to read error messages and identify possible mistakes that could cause hours of frustration. Coding is as much about debugging your code as it is about writing it. Define Error Message: Line Numbers: Type of Error: Break Down…
Viewers will learn about if statements in Java and their use The if statement: The condition required to create an if statement: Variations of if statements: An example using if statements:

919 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

13 Experts available now in Live!

Get 1:1 Help Now