Skip to main content
Documents
Share
LinkedIn
Facebook
Twitter
Copy
Java keywords

static Keyword in Java

The static keyword in Java is used for memory management primarily. It can be applied to variables, methods, blocks, and nested classes. When a member is declared static, it belongs to the class rather than instances of the class. This means that only one instance of the static member exists, regardless of how many objects of the class are created.

Usage

Static Variables

Static variables are shared among all instances of a class. They are also known as class variables.

class Example {
    static int counter = 0;
}

Static Methods

Static methods can be called without creating an instance of the class. They can access static data members and can change their values.

class Example {
    static void display() {
        System.out.println("Static method called");
    }
}

Static Blocks

Static blocks are used for static initializations of a class. This code inside the static block is executed only once when the class is loaded into memory.

class Example {
    static {
        System.out.println("Static block executed");
    }
}

Static Nested Classes

Static nested classes do not have access to other members of the enclosing class.

class OuterClass {
    static class NestedStaticClass {
        void display() {
            System.out.println("Static nested class method called");
        }
    }
}

Examples

Example 1: Static Variable and Method

public class StaticExample {
    static int counter = 0;

    static void incrementCounter() {
        counter++;
    }

    public static void main(String[] args) {
        StaticExample.incrementCounter();
        System.out.println("Counter: " + StaticExample.counter);
    }
}

In this example, the static variable counter is shared among all instances of the StaticExample class. The static method incrementCounter increments the counter. Both the static method and variable are accessed without creating an instance of the class.

Example 2: Static Block

public class StaticBlockExample {
    static {
        System.out.println("Static block executed");
    }

    public static void main(String[] args) {
        System.out.println("Main method executed");
    }
}

Here, the static block is executed once when the class is loaded into memory, before the main method is executed.

Example 3: Static Nested Class

public class OuterClassExample {
    static class NestedStaticClass {
        void display() {
            System.out.println("Static nested class method called");
        }
    }

    public static void main(String[] args) {
        OuterClassExample.NestedStaticClass nestedObject = new OuterClassExample.NestedStaticClass();
        nestedObject.display();
    }
}

In this example, the static nested class NestedStaticClass is defined within the OuterClassExample class. The method display is called using an instance of the nested static class.

Tips and Best Practices

  • Memory Efficiency: Use static variables and methods to save memory and improve performance when the same value or method is used across all instances.
  • Utility Methods: Declare utility methods as static, as they do not require any state from the class instances.
    public class MathUtils {
        public static int add(int a, int b) {
            return a + b;
        }
    }
  • Initialization: Use static blocks for complex static variable initialization.
  • Access Control: Be mindful of access control; static members can be accessed directly using the class name, which might expose them unintentionally.
  • Avoid Overuse: Overusing static members can lead to code that is difficult to test and maintain. Use them judiciously.

Common Mistakes and Errors

  • Non-static Context: Attempting to access non-static members from a static context will result in a compilation error.
    public class Example {
        int instanceVariable = 42;
        
        static void staticMethod() {
            // This will cause an error
            // System.out.println(instanceVariable);
        }
    }
  • Overuse of Static: Overusing static variables/methods can lead to issues with thread safety and maintenance complexity. Use static members only when necessary.