OOPS Interview Questions · Question 21

What is the difference between static members and instance members, and when would you use each?

Interview preparation resource from Gate Smashers.

Interview-ready answer

Static members belong to the class or type and are shared by all its objects. Instance members belong to individual objects, so each object has its own instance fields and can use methods that operate on its own state. Use static members for class-wide constants, counters, or utility behavior; use instance members for data and behavior that vary from one object to another.

Example (Java): static vs instance membersjava
public class Widget {
    // Static: shared by all Widget objects
    private static int totalCreated = 0;
    public static final double VERSION = 1.0;

    // Instance: each Widget has its own values
    private final int id;
    private String name;

    public Widget(String name) {
        this.id = ++totalCreated;
        this.name = name;
    }

    // Static method: class-level behavior
    public static int getTotalCreated() {
        return totalCreated;
    }

    // Instance method: operates on this object's state
    public String describe() {
        return "Widget{" + "id=" + id + ", name='" + name + "'}";
    }

    public static synchronized void resetTotalCreated() {
        totalCreated = 0;
    }

    public static void main(String[] args) {
        Widget a = new Widget("A");
        Widget b = new Widget("B");

        System.out.println(Widget.getTotalCreated()); // 2
        System.out.println(a.describe());             // a's instance data
    }
}
Understand it clearly

Core difference

A static field has one value associated with the class, rather than a separate value for every object. A static method is called on the class and does not have a this object, so it can directly access only static members.

An instance field is stored separately in each object. An instance method runs for a particular object, can access that object's instance and static members, and can use the object's state.

Access and lifecycle

Static members are normally accessed through the class name, such as Widget.getTotalCreated(). Instance members are accessed through an object reference, such as widget.describe().

In Java, static fields are initialized when their class is initialized, and instance fields are initialized as part of creating an object. Precise storage layout and lifetime details depend on the language runtime and implementation.

When to use each

Choose static when data or behavior is genuinely shared across all objects, or when an operation does not need object-specific state. Choose instance members when the state or behavior belongs to a particular object.

  • Static members: Class-wide constants, shared counters, shared caches, factory methods, and stateless utility methods.
  • Instance members: Properties that differ per object, such as an object's identifier or name, and behavior that depends on that object's state.
  • Mutable shared state: Use static mutable fields carefully because they are shared. If multiple threads can access them, coordinate access with appropriate synchronization or concurrency mechanisms.

Inheritance and polymorphism

Instance methods can participate in runtime polymorphism when they are overridable: a call can dispatch to an implementation based on the object's runtime type. In Java, static methods are associated with the class and are hidden rather than overridden, so they do not use instance-method dynamic dispatch.

Quick comparison
BasisStatic membersInstance members
AssociationBelong to the class or type.Belong to individual objects.
Number of copiesOne shared value per class for a static field.A separate field value for each object.
AccessNormally accessed through the class name.Accessed through an object reference.
Method stateNo this object; directly accesses static members only.Runs on a specific object and can access that object's state.
Polymorphism in JavaStatic methods are hidden, not overridden.Overridable instance methods can use dynamic dispatch.
Typical useConstants, utilities, counters, and other class-wide behavior.Per-object state and behavior.