Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Scope of static variable and methods in Java

Tags:

java

I have some doubts about usage of static method in Java. I read many places static variables are instance independent so be comes global.

public class ThirdClass {
    public static var = "Java";
}

public class Second {
    public static void main(String[] args) {
        ThirdClass ob1 = new ThirdClass();
        System.out.println(ob1.var);   // prints Java
        ob1.var="Ruby";
        ThirdClass ob2 = new ThirdClass();
        System.out.println(ob2.var);   // prints Ruby
    }
}

public class First {
    public static void main(String[] args) {
        ThirdClass ob3 = new ThirdClass();
        System.out.println(ob1.var);   // prints Java again!!!
    }
}

As you see in second class multiple instance of ThirdClass sharing same instance of variable var. But a separate instance in class First don't access the final value "Ruby" but show original "Java". It means the static variable are NOT global variable but only global to single execution!!!

Also do is creating static variable resource intensive compared to instance variable?

Please suggest.

like image 770
eternal Avatar asked Dec 09 '10 20:12

eternal


2 Answers

It means the static variable are NOT global variable but only global to single execution!!!

Of course they are. All variables that are not persisted to some kind of storage (like the hard disk) do not retain their values between distinct executions of the program.

like image 168
cdhowie Avatar answered Oct 24 '22 07:10

cdhowie


The value is initialized when the class is loaded. Therefore each time you execute the code, it is initialized to the value "Java" as is defined in the class. The new value is not saved, it is only changed in memory and is "reset" when the code is executed again.

The term global has nothing to do with the variables persistence, and scope is defined only within the running program.

like image 26
Robin Avatar answered Oct 24 '22 06:10

Robin