Static vs non-static behavior in Java - Performance Comparison
We want to see how static and non-static parts of Java code affect how long it takes to run.
How does using static or non-static change the work done as input grows?
Analyze the time complexity of the following code snippet.
public class Example {
static int staticCounter = 0;
int instanceCounter = 0;
public static void staticMethod(int n) {
for (int i = 0; i < n; i++) {
staticCounter++;
}
}
public void nonStaticMethod(int n) {
for (int i = 0; i < n; i++) {
instanceCounter++;
}
}
}
This code has a static method and a non-static method, each looping n times to update counters.
Look at the loops that repeat work.
- Primary operation: The for-loops in both methods that run n times.
- How many times: Each loop runs exactly n times, increasing counters.
As n grows, the number of times the loop runs grows the same way for both methods.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | 10 increments |
| 100 | 100 increments |
| 1000 | 1000 increments |
Pattern observation: The work grows directly with n, whether static or not.
Time Complexity: O(n)
This means the time to run grows in a straight line as n gets bigger, for both static and non-static methods.
[X] Wrong: "Static methods always run faster or take less time than non-static methods."
[OK] Correct: The time depends on what the method does, not just if it is static. Both methods here do the same loop work, so they take similar time.
Understanding how static and non-static code runs helps you explain performance clearly and shows you know how Java works under the hood.
"What if the static method called the non-static method inside its loop? How would the time complexity change?"
Practice
static method in Java?Solution
Step 1: Understand static method ownership
A static method belongs to the class itself, not to any object instance.Step 2: Check how static methods are called
Static methods can be called directly using the class name without creating an object.Final Answer:
It belongs to the class and can be called without creating an object. -> Option AQuick Check:
Static method = class-level method [OK]
- Thinking static methods need an object to call
- Confusing static with instance methods
- Assuming static methods access instance variables directly
Solution
Step 1: Recall Java syntax for static variables
The keywordstaticcomes before the data type in variable declaration.Step 2: Match the correct syntax
static int count = 0; usesstatic int count = 0;which is the correct order.Final Answer:
static int count = 0; -> Option DQuick Check:
static before type = correct syntax [OK]
- Placing static after the variable name
- Using invalid order of keywords
- Confusing static with final keyword
class Test {
static int count = 0;
int id;
Test() {
count++;
id = count;
}
void display() {
System.out.println("ID: " + id + ", Count: " + count);
}
}
public class Main {
public static void main(String[] args) {
Test a = new Test();
Test b = new Test();
a.display();
b.display();
}
}Solution
Step 1: Understand static and instance variables in constructor
Each time aTestobject is created,count(static) increments andid(instance) is set to current count.Step 2: Trace object creation and display calls
First object: count=1, id=1; Second object: count=2, id=2. Both display show current count=2.Final Answer:
ID: 1, Count: 2 ID: 2, Count: 2 -> Option CQuick Check:
Static count shared, id unique per object [OK]
- Assuming static variable resets per object
- Confusing instance variable values
- Ignoring static variable's shared nature
public class Example {
static int number;
public void setNumber(int number) {
this.number = number;
}
public static void main(String[] args) {
Example ex = new Example();
ex.setNumber(5);
System.out.println(Example.number);
}
}Solution
Step 1: Analyze use of 'this' keyword in setNumber method
'this' refers to the current object instance and cannot be used to access static variables.Step 2: Understand static variable access rules
Static variables belong to the class, so they should be accessed using the class name or directly without 'this'.Final Answer:
Cannot use 'this' to access static variable inside non-static method. -> Option AQuick Check:
'this' cannot access static variables [OK]
- Thinking 'this' can access static variables
- Confusing static and instance variable access
- Assuming no error in code
Book have been created. Which approach correctly uses static and non-static members to achieve this?class Book {
// Fill in the blanks
}Solution
Step 1: Identify what should be shared and what is unique
The count of objects should be shared by all objects, so it must be static. The title is unique per book, so non-static.Step 2: Implement counting in constructor
Increment the static counter inside the constructor to count each new object created.Final Answer:
Use a static int counter incremented in the constructor; each object has a non-static title. -> Option BQuick Check:
Static counter for all objects, non-static title per object [OK]
- Making counter non-static so it resets per object
- Making title static so all objects share same title
- Incrementing counter outside constructor
Ready to prove it?
Pass the test and this pattern moves unknown
