The static keyword is a non-access modifier in Java and can be used for variables, methods, and code blocks. A static variable in Java belongs to a class, that is, it is initialized only once at the beginning of execution. By using static variables, all instances of the class share a copy, and they can be accessed directly through the class name, without any instances. The static method also belongs to the class and not to the instance. It can only access static variables but not non-static variables.
Example 1: static methods can access static variables.
Java
// Java program to check accessibility // of static variables inside // static methods class GFG { // declaring variable 'a' as static static int a = 5; // main is also a static type public static void main(String args[]) { // accessing value of // static variable System.out.println("Static variable:" + a); } }
Output
Static variable:5
Example 2: We cannot access non-static variables inside a static method.
// Java program to check accessibility // of non - static variables inside // static methods class GFG { // declaring variable 'a' as non - static int a = 5; // main is also a static type public static void main(String args[]) { // accessing value of // non - static variable System.out.println("Non - Static variable:" + a); } }
Output
prog.java:16: error: non-static variable a cannot be referenced from a static context System.out.println("Non - Static variable:" + a); ^ 1 error
Example 3:
// Java Program to demonstrate the accessibility // of static and non-static variables // by static method class Student { // initialized to zero int a; // initialized to zero when class is loaded // but not for each object created. static int b; // Constructor Student() { // incrementing static variable b b++; } // method for printing public void printData() { System.out.println("Value of a = " + a); System.out.println("Value of b = " + b); } /*public static void increment(){ a++; }*/ } // Driver class class GFG { // main is a static block public static void main(String args[]) { // creating instance Student s1 = new Student(); s1.printData(); // directly accessing variable 'b' // by class name because it is static Student.b++; s1.printData(); } }
Output
Value of a = 0 Value of b = 1 Value of a = 0 Value of b = 2
In the above program, if we delete the comment of the increment method, an error will be raised, because the increment method is static, and the variable a is non-static. We already know that static methods cannot access non-static variables.