DEV Community

Cover image for Static and Non-Static Methods in Java: A Detailed Guide
Sharique Siddiqui
Sharique Siddiqui

Posted on

Static and Non-Static Methods in Java: A Detailed Guide

Understanding the static and non-static (also called instance) methods in Java is fundamental to mastering object-oriented programming in this language. Below, you'll find an in-depth look at what they are, how they're used, their differences, and the best practices for choosing between them.

What Is a Static Method?

A static method belongs to the class itself, not to any object (instance) of the class. These methods:

  • Are declared using the static keyword.
  • Can be called without creating an object of the class.
  • Have access only to other static data and static methods.
  • Cannot access instance variables or non-static methods directly.
  • Cannot use the this keyword.

Syntax:

java
public class Sample {
  static void displayStatic() {
    System.out.println("This is a static method.");
  }
}
Enter fullscreen mode Exit fullscreen mode

How to Call:

java
Sample.displayStatic();
Example
java
class MathUtils {
  static int square(int num) {
    return num * num;
  }
}

public class Demo {
  public static void main(String[] args) {
    int result = MathUtils.square(5);
    System.out.println(result); // Output: 25
  }
}
Enter fullscreen mode Exit fullscreen mode

Here, square() is static and does not need any object of MathUtils class to be invoked.

What Is a Non-Static (Instance) Method?

A non-static method belongs to an instance of the class (an object), and:

  • Is the default type for methods.
  • Can access both static and non-static (instance) members.
  • Can use the this keyword.
  • Must be called on an object of the class.

Syntax:

java
public class Sample {
  void displayNonStatic() {
    System.out.println("This is a non-static method.");
  }
}
Enter fullscreen mode Exit fullscreen mode

How to Call:

java
Sample obj = new Sample();
obj.displayNonStatic();
Example
java
class Person {
  String name;

  Person(String name) {
    this.name = name;
  }

  void greet() {
    System.out.println("Hello, my name is " + name);
  }
}

public class Demo {
  public static void main(String[] args) {
    Person john = new Person("John");
    john.greet(); // Output: Hello, my name is John
  }
}
Enter fullscreen mode Exit fullscreen mode

Here, greet() is non-static and requires an object to be called.

Key Differences: Static vs. Non-Static Methods

Aspect Static Methods Non-Static Methods
Association Class (not tied to a specific object) Instance/Object
Calling ClassName.methodName() objectName.methodName()
Access to Members Can access only static members Can access both static and non-static members
Use of this Keyword Not allowed Allowed (refers to current object)
Overriding Cannot be overridden Can be overridden (runtime polymorphism)
Memory Allocation Loaded with class (only once) New allocation with each object
Typical Use Cases Utility, helper, and entry-point (main()) Business logic depending on instance data

Best Practices & Use Cases

When to Use Static Methods:
  • When behavior is general-purpose and not dependent on object state.
  • (e.g., utility methods like math calculations, formatting, conversions)
  • For entry points such as the main() method:
java
public static void main(String[] args) { ... }
Enter fullscreen mode Exit fullscreen mode
  • To reduce unnecessary object creation when the method does not access or change instance fields.
When to Use Non-Static (Instance) Methods:
  • When behavior depends on, or modifies, object (instance) data.
  • For any functionality that is specifically tied to the state of an object (e.g., retrievers, updaters, behaviors unique per object).

Common Pitfalls

  • Attempting to access non-static fields or methods from a static context results in a compile-time error.
  • Static methods can be called via an object (e.g., obj.method()), but this is discouraged—prefer ClassName.method() for clarity.

Final Thoughts

  • Static methods: Use for logic tied to a class, utility methods, or when you don't need to access/change object state.
  • Non-static (instance) methods: Use when your logic involves or relies on object-specific data or state. Understanding when and why to use each approach leads to cleaner, more efficient, and more readable Java programs.

Check out the YouTube Playlist for great java developer content for basic to advanced topics.

Please Do Subscribe Our YouTube Channel for clearing programming concept and much more ... : CodenCloud

Top comments (0)