Static variables in Java - Time & Space Complexity
Let's explore how using static variables affects the time it takes for a program to run.
We want to see if static variables change how the program's work grows as input grows.
Analyze the time complexity of the following code snippet.
public class Counter {
static int count = 0;
public void increment() {
count++;
}
public int getCount() {
return count;
}
}
This code defines a static variable count shared by all instances, incremented by the increment method.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: Incrementing the static variable
counteach timeincrement()is called. - How many times: Once per call to
increment(), no loops inside the method.
Each call to increment() does one simple step: add one to count.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | 10 increments |
| 100 | 100 increments |
| 1000 | 1000 increments |
Pattern observation: The work grows directly with how many times you call increment(). No extra loops or nested work.
Time Complexity: O(n)
This means the time to run grows in a straight line with the number of increments done.
[X] Wrong: "Static variables make the program faster or slower because they are shared."
[OK] Correct: Static variables just share data across instances but do not change how many steps the program takes to run.
Understanding static variables helps you explain how data is shared in programs and how that affects performance in simple ways.
"What if the increment() method had a loop that ran n times inside it? How would the time complexity change?"
Practice
static variable in Java?Solution
Step 1: Understand static variable ownership
A static variable belongs to the class itself, not to any individual object.Step 2: Recognize sharing behavior
Because it belongs to the class, all objects share the same static variable value.Final Answer:
It belongs to the class and is shared by all instances. -> Option AQuick Check:
Static variable = shared by all objects [OK]
- Thinking static variables are unique per object
- Confusing static with instance variables
- Assuming static variables are deleted with objects
Solution
Step 1: Recall Java syntax for static variables
The keywordstaticcomes before the type when declaring a static variable.Step 2: Check each option
Onlystatic int count;follows the correct syntax.Final Answer:
static int count; -> Option AQuick Check:
static keyword before type = correct syntax [OK]
- Placing static after the variable name
- Mixing order of keywords
- Using invalid syntax order
class Test {
static int count = 0;
Test() {
count++;
}
public static void main(String[] args) {
new Test();
new Test();
System.out.println(Test.count);
}
}Solution
Step 1: Understand static variable incrementation
Each time a newTestobject is created, the constructor incrementscountby 1.Step 2: Count the number of objects created
Two objects are created, socountbecomes 2.Final Answer:
2 -> Option DQuick Check:
Two objects increment count twice = 2 [OK]
- Assuming count resets for each object
- Confusing instance and static variables
- Expecting compilation error due to static usage
class Counter {
static int count;
void increment() {
count++;
}
public static void main(String[] args) {
Counter c = new Counter();
c.increment();
System.out.println(count);
}
}Solution
Step 1: Check static variable initialization
Static int variables default to 0 if not explicitly initialized.Step 2: Verify method calls and access
The instance methodincrement()correctly increments the static variable. The static methodmainaccessescountdirectly, which is allowed.Final Answer:
No error; code runs and prints 1. -> Option BQuick Check:
Static variable accessible and increments correctly [OK]
- Thinking static vars must be explicitly initialized
- Assuming static vars can't be accessed without class name inside same class
- Confusing instance and static method access rules
class Employee {
static int employeeCount = 0;
String name;
Employee(String name) {
this.name = name;
employeeCount++;
}
static void printCount() {
System.out.println("Total employees: " + employeeCount);
}
}
public class Main {
public static void main(String[] args) {
Employee e1 = new Employee("Alice");
Employee e2 = new Employee("Bob");
e1.printCount();
Employee.printCount();
}
}What will be the output when running
Main?Solution
Step 1: Count employees created
TwoEmployeeobjects are created, soemployeeCountbecomes 2.Step 2: Understand static method calls
CallingprintCount()on instancee1or classEmployeeboth print the same static variable value.Final Answer:
Total employees: 2 Total employees: 2 -> Option CQuick Check:
Static method prints shared count = 2 [OK]
- Thinking static method can't be called on instance
- Assuming employeeCount resets per object
- Confusing output order or values
Ready to prove it?
Pass the test and this pattern moves unknown
