wood burning stoves 2.0*
The moose likes Java in General and the fly likes static variables values are not getting refreshed Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login
JavaRanch » Java Forums » Java » Java in General
Bookmark "static variables values are not getting refreshed" Watch "static variables values are not getting refreshed" New topic
Author

static variables values are not getting refreshed

pendse anagha
Ranch Hand

Joined: Mar 09, 2005
Posts: 44
Hello ,
I am facing a problem for which I dont seem to have an answer to .

I have a class in which I have defined a static variable ( not final )
The value of this variable comes from a method
Here is the code :


The HashMap that I am using contains key value pairs which come from the database

The first time I run this code it runs fine
I get the value correctly in any other class when I refer this static variable - "test"

However if some value changes in the database - then that key and value get replaced in the hashmap

The problem is even though the values have changed in the hashmap
(I have printed the hashmap contents which shows the changed values )

if I use the variable - "test" it still gives me the old values

I tried putting in a System.out.println in the method - "getTestValue"
The first time it prints fine
On subsequent reference to the static variable - the right hand side i.e the method just does not get called

No wonder I do not see the changed value.


But why does the method not get executed ?

Please help

Regards ,
-anagha
Ernest Friedman-Hill
author and iconoclast
Marshal

Joined: Jul 08, 2003
Posts: 24187
    
  34

"test" is not a method. It's a static variable. The initializer (the call to getTestValue()) will be executed once, when the class is first loaded; after that, it will never be executed again.

Instead of using the variable "test", your code should call getTestValue() directly. "test" serves no purpose and can be deleted.


[Jess in Action][AskingGoodQuestions]
pendse anagha
Ranch Hand

Joined: Mar 09, 2005
Posts: 44
Thanks Ernest for your prompt help.

Could you kindly elaborate or point me as to where I could look up and get a better understanding as to why the static method never gets invoked again ?

Apologies if this seems to be too basic a question.

Regards ,
-anagha
jiju ka
Ranch Hand

Joined: Oct 12, 2004
Posts: 306
Anagha,
Can you please post the complete code? The code above don't say how you are updating the map. It will be better to explain with code.

What Earnest saying is the variable test is a class variable. It is static too. That means test will be initialized when you load the class.

We are not saying any other call to getTestValue(String key). Assuming you are calling the method only once consider the following scenario.

[ December 07, 2005: Message edited by: jiju ka ]
Ernest Friedman-Hill
author and iconoclast
Marshal

Joined: Jul 08, 2003
Posts: 24187
    
  34

Originally posted by pendse anagha:

Could you kindly elaborate or point me as to where I could look up and get a better understanding as to why the static method never gets invoked again ?


It sounds like you're expecting "test" to be a kind of macro or abbreviation or nickname for calling the getTestValue() function, but it's not. In Java, a variable is just a bit of memory that can hold a value. No variable's value ever changes all by itself: some code somewhere would have to explicitly set test to the new value. In particular, whatever code updated that HashMap would have to know to also update "test".

Why do you want your other code to use "test" rather than calling the "getTestValue()" function, which is the normal way to do things?
pendse anagha
Ranch Hand

Joined: Mar 09, 2005
Posts: 44
Bingo !!!
Yes - I was somehow expecting that on subsequent references to the variable - since it has a method call on RHS - I was expecting it to invoke that method everytime !!!

It now makes sense - it is just a variable - and once it has a value assigned to it
- its value wouldnt change unless explicitly changed

Would you call this bad coding practice ?

I was definitely confused.

Here is a bit more elaborate code
However thanks Ernest - my doubts are indeed clarified with what you rightly point out.

Thank you once more.

Class that looks for changed values in the database and which populates the HashMap
This class runs every 10 minutes and refreshes the HashMap

 
I agree. Here's the link: http://aspose.com/file-tools
 
subject: static variables values are not getting refreshed