Want to protect your cyber security and still get fast solutions? Ask a secure question today.Go Premium

x
?
Solved

Method static variables

Posted on 2000-04-20
7
Medium Priority
?
255 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 20 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
Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
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

Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

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

Are you developing a Java application and want to create Excel Spreadsheets? You have come to the right place, this article will describe how you can create Excel Spreadsheets from a Java Application. For the purposes of this article, I will be u…
Go is an acronym of golang, is a programming language developed Google in 2007. Go is a new language that is mostly in the C family, with significant input from Pascal/Modula/Oberon family. Hence Go arisen as low-level language with fast compilation…
Viewers will learn about basic arrays, how to declare them, and how to use them. Introduction and definition: Declare an array and cover the syntax of declaring them: Initialize every index in the created array: Example/Features of a basic arr…
How to fix incompatible JVM issue while installing Eclipse While installing Eclipse in windows, got one error like above and unable to proceed with the installation. This video describes how to successfully install Eclipse. How to solve incompa…
Suggested Courses
Course of the Month10 days, 9 hours left to enroll

572 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