Static and non-static help decide if something belongs to the whole class or just one object. This helps organize code and save memory.
Static vs non-static behavior in Java
class ClassName { static int sharedValue; // static variable int individualValue; // non-static variable static void staticMethod() { // code here } void nonStaticMethod() { // code here } }
Static means the item belongs to the class itself, not any object.
Non-static means the item belongs to each object separately.
class Example { static int count = 0; // shared by all objects int id; // unique for each object Example(int id) { this.id = id; count++; } static void showCount() { System.out.println("Total objects: " + count); } void showId() { System.out.println("Object id: " + id); } }
public class Test { public static void main(String[] args) { Example e1 = new Example(1); Example e2 = new Example(2); Example.showCount(); // call static method e1.showId(); // call non-static method e2.showId(); } }
This program creates two Car objects. It uses a static variable to count all cars made and non-static variables to store each car's model.
class Car { static int totalCars = 0; // shared by all cars String model; // unique for each car Car(String model) { this.model = model; totalCars++; } static void showTotalCars() { System.out.println("Total cars made: " + totalCars); } void showModel() { System.out.println("Car model: " + model); } } public class Main { public static void main(String[] args) { Car c1 = new Car("Toyota"); Car c2 = new Car("Honda"); Car.showTotalCars(); c1.showModel(); c2.showModel(); } }
Static methods cannot use non-static variables directly because non-static variables belong to objects, and static methods belong to the class.
You can call static methods and access static variables without creating an object.
Non-static methods can access both static and non-static variables.
Static means shared by the whole class, non-static means unique to each object.
Use static for common data or behavior, non-static for individual object data or behavior.
Static methods can be called without objects; non-static methods need objects.
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
