Friday, October 5, 2012

All about “static” Keyword


1. Static variable

  • It is a variable which belongs to the class and not to object(instance)
  • Static variables are initialized only once , at the start of the execution . These variables will be initialized first, before the initialization of any instance variables
  • single copy to be shared by all instances of the class
  • A static variable can be accessed directly by the class name and doesn’t need any object
  • Syntax : <class-name>.<variable-name>


2. Static method

  • It is a method which belongs to the class and not to the object(instance)
  • A static method can access only static data. It can not access non-static data (instance variables)
  • A static method can call only other static methods and can not call a non-static method from it.
  • A static method can be accessed directly by the class name and doesn’t need any object
  • Syntax : <class-name>.<method-name>
  • A static method cannot refer to “this” or “super” keywords in anyway
Side Note:
  • main method is static , since it must be be accessible for an application to run , before any instantiation takes place.
Lets learn the nuances of the static keywords by doing some excercises!
Assignment: To Learn working of static variables & methods
Step 1) Copy the following code into a editor
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
class Student {
int a; //initialized to zero
static int b; //initialized to zero only when class is loaded not for each object created.
  Student(){
   //Constructor incrementing static variable b
   b++;
  }
   public void showData(){
      System.out.println("Value of a = "+a);
      System.out.println("Value of b = "+b);
   }
//public static void increment(){
//a++;
//}
}
class Demo{
   public static void main(String args[]){
     Student s1 = new Student();
     s1.showData();
     Student s2 = new Student();
     s2.showData();
     //Student.b++;
     //s1.showData();
  }
}
Step 2) Save & Compile the code. Run the code as, java Demo.
Step 3) Check output.
Step 4) It is possible to access a static variable from outside the class using the syntaxClassName.Variable_Name. Uncomment line # 27 & 28 . Save , Compile & Run . Observe the output.
Step 5) Uncomment line 15,16 & 17 . Save , Compile & Run.
Step 5) Error = ? This is because it is not possible to access instance variable “a” from static method “increment“.

3. static block

The static block, is a block of statement inside a Java class that will be executed when a class is first loaded in to the JVM
1
2
3
4
5
class Test{
 static {
 //Code goes here
 }
}
static block helps to initialize the static data members, just like constructors help to initialize instance members.

References