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:
1)
SIB
Exception in thread "main" java.lang.NoSuchMethodError: main
*/
---------------------------------------------------------------------------
2)
3)
Hello World
Hello World
*/
---------------------------------------------------------------------------
4)
1
From main
2
From main
*/
---------------------------------------------------------------------------
5)
From main :0
From main :20
-------
from main:0
1
from main:20
2
from main:20
*/
---------------------------------------------------------------------------
6)
/*
1
3
7:0
4
2
5:10
7:20
6:30
7:30
*/
---------------------------------------------------------------------------
7)
---------------------------------------------------------------------------
8)
-----------------------------------------------
9)
10
11
*/
-----------------------------------------------
10)
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
From main :0
*/
---------------------------------------------------------------------------
12)
From main :20
From main :10
From main :0
From test:0
*/
---------------------------------------------------------------------------
13)
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)
From J.SIB
---111---
From I.SIB
From Test
---222---
From Test
---333---
From Test
---444---
*/
---------------------------------------------------------------------------
15)
From L.SIB
---aaa---
From K.SIB
From K-Test
---bbb---
From K-Test
---ccc---
10
---ddd---
*/
---------------------------------------------------------------------------
16)
From C.SIB
MAIN BEGIN
From Test
MAIN END
*/
---------------------------------------------------------------------------
17)
D-SIB
1
From C.SIB
From C-Test
2
10
*/
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 symbolsymbol : 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