Static Keyword

Static keyword belongs to class than an object(instance of class) and is used for memory management. Static keyword can be used for:

  • Variable
  • Method
  • Block
  • Nested class

1) Static Variable

Variable which is declared as static is called static variable. When you declare any variable as static then

  • Static variable start using common property of all objects(which is not unique for each object).For example, when you declare institute name as static then it will be common for all objects using this variable of institute name.
  • Static variable makes program memory efficient by using memory only once in the class area at the time of class loading.

Example of static variable

class Student{  
   int student_rollno;//instance variable  
   String student_name;  
   static String college ="GLS ICT";//static variable  
   //constructor  
   Student(int no, String name){  
   student_rollno = no;  
   student_name = name;  
   }  

   void show (){    //method to display the values  
    System.out.println(student_rollno +" " + student_name +" "+ college);
   }  


  // You can call main method here or can create separate class for it. 
}  

public class StudentMain{  
 public static void main(String args[]){  
 Student stud1 = new Student(10,"Lawrence");  
 Student stud2 = new Student(20,"Sachin");  
 Student stud3 = new Student(30,"Indra");

//Student.college="LD";  // This wil change the name of college for all objects of Student class  
 stud1.show();  
 stud2.show();
 stud3.show();  
 }  
}  

Output:

10 Lawrence GLS ICT
20 Sachin GLS ICT
30 Indra GLS ICT

2) Static Method

If you declare method as static,then it becomes static method

  • Static method belongs to the class rather than the object
  • Static method can be invoked without creating an instance(object) of the class
  • Static method can access static data member(i.e static variable) and can change its value

Example 1 of Static Method

class Student{  
     int rollno;  
     String name;  
     static String college = "GLS ICT";  

     static void modify(){  //you can change value of static variable from static method
     college = "LD";  
     }  

     Student(int r, String n){   //constructor to initialize the variable  
     rollno = r;  
     name = n;  
     }  

     void show()     //method to display values  
     { 
    System.out.println(rollno+" "+name+" "+college);
     }  

     // You can call main method here or can create separate class for it. 
}  

public class StudentMain{  
    public static void main(String args[]){  
    Student.modify();//calling change method  

    Student s1 = new Student(10,"Lawrence");  
    Student s2 = new Student(20,"Sachin");  
    Student s3 = new Student(30,"Indra");  

    s1.show();  
    s2.show();  
    s3.show();  

    }  
}  

Output:

10 Lawrence LD
20 Sachin LD
30 Indra LD

Example 2 of Static Method :

class Calculate{  
  static int square(int x){  
  return x*x;  
  }  

  public static void main(String args[]){  
  int result=Calculate.square(20);  
  System.out.println(result);  
  }  
}  

Output:
400

Restrictions for the Static Method:

  • Static method can not use non static data member or call non-static method directly.
  • this and super cannot be used in static context.
class Student{  
 int rollno=30;//non static  

 public static void main(String args[]){  
  System.out.println(a);  
 }  
}        

Output: Compile Time Error

3) Static Block

When we named a block as static, then it is called as static block.

  • Static Block is used to initialize the static data member.
  • Static Block is executed before the main method at the time of classloading

Example of Static Block

class IntroduceYourself{  
  static{System.out.println("My name is Sachin Ramdas Suryavanshi");}  
  public static void main(String args[]){  
   System.out.println("I am an Entrepreneur");  
  }  
}

Output:

My name is Sachin Ramdas Suryavanshi
I am an Entrepreneur

4) Static Nested Class

A class can be made static only if it is a nested class.When a nested class is declared as static,it is called static nested class.

  • Nested static class doesn’t need a reference of Outer class.
  • Static class cannot access non-static members of the Outer class.

Example of Static Nested Class

public class Counter {
    public static int count = 0;
    public int id;

    public Counter() {
        count++;
        id = count;
    }

    public static void totalCount() {
        System.out.println("Number of instances: " + count);
    }

    public void printID() {
        System.out.println("Instance ID: " + id);
    }

    public static void main(String[] args) {
        Counter c1 = new Counter();
        Counter c2 = new Counter();
        Counter c3 = new Counter();

        c1.printID();
        c2.printID();
        c3.printID();

        Counter.totalCount();
    }
}

Output:

Instance ID: 1
Instance ID: 2
Instance ID: 3
Number of instances: 3

Why is the Java main method static ?

  • It is because the object is not required to call a static method. If main method was not static,then JVM will be required to create an object first then call main() method which would had led to the problem of extra memory allocation.

Can we execute a program without main() method ?

  • It was possible till JDK 1.6.but after JDK 1.7, it is not possible to execute Java class without the main method
class Student{  
  static{  
  System.out.println("static block is invoked");  
  System.exit(0);  
  }  
}

Output Since JDK 1.6:
static block is invoked

Output After And With JDK 1.7:

Error: Main method not found in class Student, please define the main method as:
   public static void main(String[] args)
or a JavaFX application class must extend javafx.application.Application
Scroll to Top