Difference between instance class and local variables in Java

There are a lot of differences between instance variable, class variable and local variable in Java, and knowing them will help you to write correct and bug-free Java programs. Java is a full-featured programming language and provides different kinds of variables like static variable also called Class variable since it belongs to whole Class, non-static also called instance variable and local variables which vary in scope and value. Thank god Java doesn't have any register variable or auto scope like C otherwise it would have so much detail to remember. static variables are a common source of error in may multi-threaded java program and does require a bit of carefulness while using it. On the other hand instance, the variable and the local variable have less sharing visibility than a static variable.

Instance Variable vs Class Variable in Java

Difference between local, instance and class variable in Java
let's first see the difference between instance variable and class variable also known as non-static vs static variable in java. Instance variables are per instance (object) basis. If you have 5 instances of one class you will have five copies of an instance variable.

These are also referred to as non-static variables and initialized when you create an instance of any object using the new() operator or by using other methods like reflection like Class.newInstance().

On the other hand, Class variables are declared using static keyword and they have the exact same value for every instance. static or class variable are initialized when the class is first loaded into JVM memory, unlike instance variable which initialized when an instance is created.

Btw, if you are new into the world of object-oriented programming and design then I also suggest you go through a hands-on course like UML and Object-Oriented Design Foundations by Karloy Neisztor on Udemy. It's a great course to understand the complete process of object-oriented analysis and design for creating quality software.

Static variables are similar to a global variable in C and can be used to store data which is static in nature and has the same value for all instance, but at same static variable also cause subtle concurrency bugs if updated by multiple threads. you can read more about static keywords in my post secrets of static keyword in Java.

Instance variable vs local variable in Java

Now let's see the difference between instance variable and local variable. local variables are local in scope and they are not visible or accessible outside there scope which is determined by {} while instance variables are visible on all part of code based on there access modifier like public, private, or protected.

The only public can be accessed from outside while protected and private can be accessed from subclass and class itself. Access modifiers can not be applied to a local variable and you can not even make them static.

The only modifier which is applicable to a local variable is final and only final local variables are visible inside the anonymous class. the value of instance variable is limited to an instance, one instance can not access the value of other instance in Java.

Best practices related to the local, instance and static variable in Java

It's good to know some of the best practices related to declaration and use of Variables in Java while learning differences among different type of variable in Java:
  1. Always name your variable as per the Java Bean naming convention.
  2. By default give private access to your member variables (both static and instance) and provide more access step by step e.g. from private to protected to package to the public. This way you will be following the encapsulation principle.
  3. Always declare a local variable where you use instead of declaring it on top of method or block.
  4. Don't hide instance or static variable by giving the same name to a local variable. this may result in subtle programming bugs.
  5. Be consistent with your variable naming convention don't mix different conventions from different language e.g. some programming language use first word to denote the type of variable e.g. bExit to denote boolean Exit variable or iNumber to denote integer Number variable. Though they are good but mixing simple names as per the Java Bean naming convention with this will only lead confusion.

Further Learning
SOLID Principles of Object-Oriented Design
Absolute Introduction to Object-Oriented Programming in Java
Java - Object-Oriented Programming [For Absolute Beginners]

That’s all on the difference between local vs instance vs class variable in Java. a correct understanding of all three scopes, value and accessibility are key to write a java program.

Java tutorials you may like
Why is multiple Inheritance not supported in Java?
Why is Operator overloading not supported in Java?
What is Iterator in Java ?
Why the main method is declared static in Java ?
How to Stop Thread in Java?
How to Convert String to Enum in Java?


Unknown said...

I would have said a class has member fields.


and only methods have local variables.

javin paul said...

That's correct class can not have local variable, but local variable can exist outside of method like static initialization block, isn't it ?

Anonymous said...

Is this correct that instance variables have default values assigned whereas local variables are not defaulted ?

Unknown said...

hi, javin
I would have been visiting your blog since couple of months. It is rly very nice to me. Last weekend i encountered a question and i got stuck there. One of my frnd during his interview was asked this question and he tell me so..

In java local variables and functions are created in stack. As a programmer we bound to initialize the local variables explicitly, why??
I mean why they won't treated like other variables. JVM do not initialize them but programmer has to do so. I'm just wondering is there any spcl reason behind it?

Anonymous said...

clearly explained and it's very useful.

Unknown said...

protected instance variable can be accessed from another class but in same package, but only public can be accessed from another package.
Private instance variables can only be accessed from class which contain it or from static inner classes in outer class

ARYAN RAJ said...


Hasan El-Hefnawy said...

private CAN'T be accessed from subclass.

Post a Comment