You are currently viewing Variable Scope
java_logo

Variable Scope

Understanding variable scope is crucial for writing clean, maintainable, and bug-free Java code. In this blog post, we’ll explore the intricacies of variable scope in Java, covering local, instance, and class variables.

1. Local Variables and Method Parameters

Local variables are declared within a method, constructor, or a code block and have a limited scope. Once the block is exited, the variable is no longer accessible.

public class ScopeExample {

    public void methodWithLocalVariable() {
        int localVar = 42; // Local variable within the method
        System.out.println(localVar);

        // Code block with a smaller scope
        {
            int smallerScopeVar = 99;
            System.out.println(smallerScopeVar);

            // localVar is still accessible in the smaller scope
            System.out.println(localVar);
        }

        // smallerScopeVar is not accessible here
        System.out.println(smallerScopeVar); // Compilation error
    }

    public void methodWithParameters(int param1, String param2) {
        // Parameters are treated as local variables
        System.out.println(param1 + " " + param2);
    }
}

In the above example, localVar is a local variable within the method, and smallerScopeVar is confined to the smaller code block.

2. Variable Accessibility in Nested Blocks

Variables declared in broader blocks can be accessed by smaller, nested blocks, but the reverse is not true.

public class ScopeExample {

    public void methodWithNestedBlocks() {
        int outerVar = 10;

        // Outer variable accessible in the nested block
        {
            int innerVar = outerVar + 5;
            System.out.println(innerVar);
        }

        // innerVar is not accessible here
        System.out.println(innerVar); // Compilation error
    }
}

Here, outerVar is accessible in the nested block, but innerVar is not accessible outside its scope.


In Java, a variable with the same name cannot be declared in a smaller scope if it’s already declared in a larger scope. This would result in a compilation error. Here’s an example illustrating this scenario:

public class ScopeExample {

    public void methodWithLocalVariable() {
        int localVar = 42; // Local variable within the method
        System.out.println(localVar);
        {
            int localVar = 99; // Compilation error
            System.out.println(localVar);
        }
    }
}

In this example, the methodWithLocalVariable contains a local variable named localVar. When attempting to declare another variable with the same name in the smaller code block, a compilation error occurs, indicating that the variable is already defined in the larger scope. Java doesn’t allow redeclaration of variables within nested scopes.

3. Instance and Class Variables:

Instance variables are declared within a class but outside any method or block. They are available as soon as the object is created and last for the entire lifetime of the object.

public class InstanceVariableExample {

    // Instance variable
    private int instanceVar = 20;

    public void methodWithInstanceVariable() {
        // Accessing instance variable within the method
        System.out.println(instanceVar); 
    }

    public static void main(String[] args) {
        InstanceVariableExample obj = new InstanceVariableExample();
        // Accessing instance variable from the main method
        obj.methodWithInstanceVariable(); 
    }
}

Class variables (declared with the static keyword) have a scope for the entire duration of the program.

public class ClassVariableExample {

    // Class variable
    private static int classVar = 30;

    public static void main(String[] args) {
        // Accessing class variable from the main method
        System.out.println(classVar); 
    }
}