What is the difference between an instance and a class (static) variable in Java

31,671

Solution 1

A static variable is shared by all instances of the class, while an instance variable is unique to each instance of the class.

A static variable's memory is allocated at compile time, they are loaded at load time and initialized at class initialization time. In the case of an instance variable all of the above is done at run time.

Here's a helpful example:

An instance variable is one per object: every object has its own copy of its instance variable.

public class Test{

   int x = 5;

 }

Test t1 = new Test();   
Test t2 = new Test();

Both t1 and t2 will have their own copy of x.

A static variable is one per class: every object of that class shares the same static variable.

public class Test{

   public static int x = 5;

 }

Test t1 = new Test();   
Test t2 = new Test();

Both t1 and t2 will share the same x.

Solution 2

You can make multiple instances of your class. When you declare an instance variable, each instance gets its own unique copy of that variable. When you declare a static variable, it is the same variable and value for all instances.

public class Foo
{
    public int instanceVariable;
    public static int staticVariable;
}

Foo instance1 = new Foo();
Foo instance2 = new Foo();
instance1.staticVariable = 1;
instance1.instanceVariable = 2;
instance2.instanceVariable = 3;

instance1.staticVariable == 1 // true
instance2.staticVariable == 1 // true

instance1.instanceVariable == 2 //true
instance2.instanceVariable == 3 //true

Solution 3

A static variable stores a value that is shared between all instances (or the non-instance) of the Class it is defined in. Where as instance variable by name create a new copy of it everytime.When the new object is created.

Share:
31,671
PrimalScientist
Author by

PrimalScientist

I am currently studying a BSc in Computer Science at Birkbeck College, University of London.

Updated on July 09, 2022

Comments

  • PrimalScientist
    PrimalScientist almost 2 years

    The title of this question is actually a previous examination question and I am looking for clarification / an answer to it.

    Please note that I am learning Java and am becoming familiar with its syntax.

    I understand that this question may have been asked before and if so can someone please show me where I may access the question if possible? Also please accept my apologies if this is the case. To show that I have been researching this area, my own understanding is that instance variables belong to the objects / instances of a certain class (template) and can be changed (mutated) within that instance / object as and when required.

    A class variable is a variable that has only one copy and can be accessed but not be modified (mutated?), but is available to all classes as required?

    Am I on the right track here?

    Also, what exactly does the 'static' do? Is an instance of a class only static if it resides within the main instance of a class?

    Many thanks.