foreach-ui logo
codeLanguages
account_treeDSA

Quick Actions

quizlock Random Quiz
trending_uplock Progress
  • 1
  • 2
  • 3
  • 4
  • quiz
Java
  • Understand static members in Java
  • Learn to declare and use static variables and methods
  • Master differences between static and instance members

Static Variables and Methods in Java

Static members belong to the class, not to individual objects. One copy shared by all instances.

Static Variables (Class Variables)

Static variables are declared with the static keyword and shared among all instances. There's only one copy per class, no matter how many objects you create.

Declaration and Initialization

public class Counter {
    // Static variable - shared by all instances
    public static int instanceCount = 0;
    
    // Instance variable - unique to each instance
    private int id;
    
    public Counter() {
        instanceCount++;  // Increment shared counter
        id = instanceCount;  // Assign unique ID
    }
}

Accessing Static Variables

public class Main {
    public static void main(String[] args) {
        System.out.println("Initial count: " + Counter.instanceCount);
        
        Counter c1 = new Counter();
        Counter c2 = new Counter();
        Counter c3 = new Counter();
        
        System.out.println("Final count: " + Counter.instanceCount);  // Output: 3
        System.out.println("Instance IDs: " + c1.id + ", " + c2.id + ", " + c3.id);
    }
}

Static Methods (Class Methods)

Static methods are declared with the static keyword and can be called without creating an instance of the class. They can only access static variables and other static methods directly.

Declaration and Usage

public class MathUtils {
    // Static constant
    public static final double PI = 3.14159;
    
    // Static method
    public static double calculateArea(double radius) {
        return PI * radius * radius;
    }
    
    // Static method calling another static method
    public static double calculateCircumference(double radius) {
        return 2 * PI * radius;
    }
}

Calling Static Methods

public class Main {
    public static void main(String[] args) {
        double radius = 5.0;
        
        // Call static methods without creating instance
        double area = MathUtils.calculateArea(radius);
        double circumference = MathUtils.calculateCircumference(radius);
        
        System.out.println("Area: " + area);
        System.out.println("Circumference: " + circumference);
    }
}

Static vs Instance Members

Aspect Static Members Instance Members
Belongs to Class Object instance
Memory One copy per class One copy per instance
Access ClassName.member object.member
Initialization When class is loaded When object is created
Usage Shared data/constants, utility methods Object-specific data/behavior

Common Use Cases for Static Members

1. Constants

public class Constants {
    public static final String APP_NAME = "MyApp";
    public static final int MAX_USERS = 1000;
    public static final double TAX_RATE = 0.08;
}

2. Utility Methods

public class StringUtils {
    public static boolean isEmpty(String str) {
        return str == null || str.trim().isEmpty();
    }
    
    public static String capitalize(String str) {
        if (isEmpty(str)) return str;
        return str.substring(0, 1).toUpperCase() + str.substring(1).toLowerCase();
    }
}

3. Factory Methods

public class User {
    private String name;
    private String email;
    
    private User(String name, String email) {
        this.name = name;
        this.email = email;
    }
    
    // Static factory method
    public static User createUser(String name, String email) {
        if (name == null || email == null) {
            throw new IllegalArgumentException("Name and email required");
        }
        return new User(name, email);
    }
}

4. Singleton Pattern

public class DatabaseConnection {
    private static DatabaseConnection instance;
    
    private DatabaseConnection() {
        // Private constructor
    }
    
    public static DatabaseConnection getInstance() {
        if (instance == null) {
            instance = new DatabaseConnection();
        }
        return instance;
    }
}

Restrictions on Static Methods

Cannot Access Instance Members

public class Example {
    private int instanceVar = 10;
    private static int staticVar = 20;
    
    public static void staticMethod() {
        // Can access staticVar
        System.out.println(staticVar);
        
        // Cannot access instanceVar
        // System.out.println(instanceVar); // Compilation error
        
        // Cannot call instanceMethod()
        // instanceMethod(); // Compilation error
    }
    
    public void instanceMethod() {
        // Can access both
        System.out.println(instanceVar);
        System.out.println(staticVar);
    }
}

Cannot Use 'this' Keyword

public class Example {
    private static int value = 10;
    
    public static void staticMethod() {
        // Cannot use 'this'
        // this.value = 20; // Compilation error
        
        // Must use class name
        Example.value = 20;
    }
}

Static Import

Java allows importing static members to use them without class qualification:

import static java.lang.Math.PI;
import static java.lang.Math.sqrt;
import static java.util.Arrays.sort;

public class Main {
    public static void main(String[] args) {
        double radius = 5.0;
        double area = PI * radius * radius;
        double diagonal = sqrt(50);
        
        int[] numbers = {3, 1, 4, 1, 5};
        sort(numbers);
        
        System.out.println("Area: " + area);
        System.out.println("Diagonal: " + diagonal);
    }
}

Best Practices

When to Use Static

  1. Constants: public static final for constants
  2. Utility Methods: Pure functions that don't need instance state
  3. Factory Methods: For object creation patterns
  4. Singleton Pattern: When only one instance is needed

When NOT to Use Static

  1. Instance-specific behavior: Use instance methods
  2. Testable code: Static methods are harder to mock/test
  3. Inheritance: Static methods cannot be overridden
  4. State management: Avoid static variables for mutable state

Static members are class-level, not instance-level. Use them for utilities, constants, and shared counters. Avoid them for mutable state. They're powerful but easy to misuse—start with instance members and only go static when you have a clear reason.

© 2026 forEach. All rights reserved.

Privacy Policy•Terms of Service