Pages

Static Initialization Blocks (SIB)

A static initialization block is a normal block of code enclosed in braces, { }, and preceded by the static keyword. A class can have any number of static initialization blocks, and they can appear anywhere in the class body. The runtime system guarantees that static initialization blocks are called in the order that they appear in the source code.
Here is an example:
static {
    // code which is needed for initialization goes here
}
---------------------------------------------------------------------------
1)
class B 
{
 static 
 {
  System.out.println("SIB");
 }
}
/*
SIB
Exception in thread "main" java.lang.NoSuchMethodError: main
*/
---------------------------------------------------------------------------
2)
class C 
{
 /*static 
 {
  System.out.println("SIB1");
 }*/
 public static void main(String[] args) 
 {
  System.out.println("Hello World!");
 }
 static 
 {
  System.out.println("SIB2");
 }
}
---------------------------------------------------------------------------
3)
class C 
{
 static 
 {
  main(null);//calling main method with null arg
 }
 public static void main(String[] args) 
 {
  System.out.println("Hello World");
 }

}
/*
Hello World
Hello World
*/
---------------------------------------------------------------------------
4)
class C 
{
 static 
 {
         System.out.println(1);
  main(null);
  System.out.println(2);
 }
 public static void main(String[] args) 
 {
  System.out.println("From main");
 }

}
/*
1
From main
2
From main
*/
---------------------------------------------------------------------------
5)
class C 
{
 static int i=test();
 static int test()
 {
  main(null);
  return 20;
 }
 /*static 
 {
        System.out.println(1);
  main(null);
  System.out.println(2);
 }*/
 public static void main(String[] args) 
 {
  System.out.println("From main :"+i);
 }

}
/*
From main :0
From main :20
-------
from main:0
1
from main:20
2
from main:20
*/
---------------------------------------------------------------------------
6)
class C 
{
 static int i=test1();
 static int test1()
 {
  System.out.println(1);
  test2();
  System.out.println(2);
  return 10;
 }
 static void test2()
 {
  System.out.println(3);
  main(null);
  System.out.println(4);
 }
 static 
 {
        System.out.println(5+":"+i);
  i=20;
  main(null);
  System.out.println(6+":"+i);
 }
 public static void main(String[] args) 
 {
  System.out.println(7+":"+i);
  i=30;//it is global hence re-initilization will reflect other blocks also
 }

}
//two initilizer is there test1(),static block ,so first execute these two initilizer
/*
1
3
7:0
4
2
5:10
7:20
6:30
7:30
*/
---------------------------------------------------------------------------
7)
class C 
{
 static int i=20;
 static
 {
         i=10;
 }
 public static void main(String[] args) 
 {
  System.out.println(i);
 }

}
10
---------------------------------------------------------------------------
8)
class C 
{
 static
 {
        int i=10;
 System.out.println(i);
 i++;
 }
 public static void main(String[] args) 
 {
  
 }
}
10
-----------------------------------------------
9)
class C 
{
 static int i=20;//declaring before the SIB
 static
 {
        i=10;
    System.out.println(i);
    i++;
 }

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

}
/*
10
11
*/
-----------------------------------------------
10)
class C 
{
 static
 {
         int i=10;//Cannot use outside the SIB
 }
 public static void main(String[] args) 
 {
  System.out.println(i);
 }
}
C.java:9: cannot find symbol
symbol : variable i
location: class C
System.out.println(i);
^
1 error

---------------------------------------------------------------------------
11)
Note :
we we can develope any no of class in a single java file.if all the class are non-public then can save with any name .java,if there is any public
class then we have save with that name .java ,one file can have only one public class
class A 
{
 static int i;
 static void test()
 {
         System.out.println("From test:"+i);
         System.out.println("From test:"+A.i);
 }
}
class B
{
 public static void main(String[] args) 
 {
  System.out.println("From main :"+A.i);
 }

}
/*
From main :0
*/
---------------------------------------------------------------------------
12)
class C 
{
 static int i;
 static void test()
 {
         System.out.println("From test:"+i);
         //System.out.println("From test:"+A.i);
 }
}
class D
{
 static int i=10;
 public static void main(String[] args) 
 {
  int i=20;
  System.out.println("From main :"+i);
  System.out.println("From main :"+D.i);
  System.out.println("From main :"+C.i);
  C.test();
 }

}
/*
From main :20
From main :10
From main :0
From test:0
*/
---------------------------------------------------------------------------
13)
class E 
{
 static 
 {
         System.out.println("From E.SIB");
 }
 public static void main(String[] args)
 {
         System.out.println("From E.main");
 }

}
class F
{
 static 
 {
        System.out.println("From F.SIB");
 }
 public static void main(String[] args) 
 {
  System.out.println("F-main begin");
  E.main(args);//E class will load in memory
  System.out.println("F-main end");
 }

}
/*
java E
--
From E.SIB
From E.main
--
java F
--
From F.SIB
F-main begin
From E.SIB
From E.main
F-main end
*/
---------------------------------------------------------------------------
14)
class I 
{
 static void test()
 {
         System.out.println("From Test");
 }
 static 
 {
         System.out.println("From I.SIB");
 }

}
class J
{
 public static void main(String[] args) 
 {
  System.out.println("---111---");
  I.test();
  System.out.println("---222---");
  I.test();
  System.out.println("---333---");
  I.test();
  System.out.println("---444---");
 }
 
 static 
 {
         System.out.println("From J.SIB");
 }

}
/*
From J.SIB
---111---
From I.SIB
From Test
---222---
From Test
---333---
From Test
---444---
*/
---------------------------------------------------------------------------
15)
class K 
{
 static int i=10;
 static 
 {
         System.out.println("From K.SIB");
 }
 static void test()
 {
         System.out.println("From K-Test");
 }

}
class L
{
 
 static 
 {
         System.out.println("From L.SIB");
 }
 public static void main(String[] args) 
 {
  System.out.println("---aaa---");
  K.test();
  System.out.println("---bbb---");
  K.test();
  System.out.println("---ccc---");
  System.out.println(K.i);
  System.out.println("---ddd---");
 }
 
}
/*
From L.SIB
---aaa---
From K.SIB
From K-Test
---bbb---
From K-Test
---ccc---
10
---ddd---
*/
---------------------------------------------------------------------------
16)
class C 
{
 static int i;
 static int j=10;
 static 
 {
         System.out.println("From C.SIB");
 }
 static void test()
 {
         System.out.println("From Test");
 }
 public static void main(String[] args) 
 {
  System.out.println("MAIN BEGIN");
  test();
  System.out.println("MAIN END");
 }
 
}
/*
From C.SIB
MAIN BEGIN
From Test
MAIN END
*/
---------------------------------------------------------------------------
17)
class C 
{
 static int i;
 static 
 {
    i=10;
       System.out.println("From C.SIB");
 }
 static void test()
 {
       System.out.println("From C-Test");
 }
}
class D
{
 static 
 {
       System.out.println("D-SIB");
 }
 public static void main(String[] args) 
 {
  System.out.println(1);
  C.test();
  System.out.println(2);
  System.out.println(C.i);
 }
 
}
/*
D-SIB
1
From C.SIB
From C-Test
2
10
*/


No comments:

Post a Comment