public class StaticInit1 {
StaticInit1(){
System.out.println("StaticInit_1_init");
}
StaticInit1(int i){
System.out.println("StaticInit_1_init,int i ="+i);
}
}
public class StaticInit {
StaticInit1 s2 = new StaticInit1(1);
public StaticInit() {
System.out.println("StaticInit-init");
}
static StaticInit1 s1 = new StaticInit1();
public static void main(String[] args) {
new StaticInit();
/* output:
StaticInit_1_init
StaticInit_1_init,int i =1
StaticInit-init
*/
}
}
根据输出结果,可以发现
在初始化 StaticInit类时,先初始化了类的静态变量. 再是执行了变量s2的初始化,最后 才是类构造器的执行输出
对StaticInit类再加一个f()方法
public class StaticInit {
StaticInit1 s2 = new StaticInit1(1);
public StaticInit() {
System.out.println("StaticInit-init");
}
static StaticInit1 s1 = new StaticInit1();
void f(){
new StaticInit();
}
public static void main(String[] args) {
new StaticInit().f();
/* output:
StaticInit_1_init
StaticInit_1_init,int i =1
StaticInit-init
StaticInit_1_init,int i =1
StaticInit-init
*/
}
}
查看输出结果 , 通过f()方法再次(第二次执行)创建Staticinit类时,初始化类时并未执行静态变量的初始化,也就是说 :静态变量的初始化只执行一次.
Next Example
public class Window {
Window(int i){
System.out.println("Window==i="+i);
}
}
public class House {
Window w1 = new Window(1);
House(){
System.out.println("house");
w3 = new Window(33);
}
Window w2 = new Window(2);
void walk(){
System.out.println("walk");
}
Window w3 = new Window(3);
}
public class OrderOfInit {
public static void main(String[] args) {
House house = new House();
house.walk();
}
/* Output:
Window==i=1
Window==i=2
Window==i=3
house
Window==i=33
walk
*/
}
静态数据初始化
public class Bowl {
Bowl(int i) {
print("Bowl->i="+i);
}
void f1(int i){
print("f1->i="+i);
}
}
public class Table {
static Bowl b1 = new Bowl(1);
Table(){
print("Table");
}
Bowl b3 = new Bowl(3);
void f2(int i){
print("f2->i="+i);
}
static Bowl b2 = new Bowl(2);
}
public class Cupboard {
Bowl b4 = new Bowl(4);
static Bowl b5 = new Bowl(5);
Cupboard(){
print("cupboard");
b4.f1(2);
}
void f3(int i){
print("f3->i="+i);
}
static Bowl b6 = new Bowl(6);
}
public class StaticInit {
public static void main(String[] args) {
new Cupboard();
new Cupboard();
table.f2(1);
cupboard.f3(1);
}
static Table table = new Table();
static Table table1 = new Table();
static Cupboard cupboard = new Cupboard();
/*Output: 产生输出对应的语句
Bowl->i=1
Bowl->i=2 static Table table = new Table();
Bowl->i=3
Table
-----------
Bowl->i=3 static Table table1 = new Table();
Table
-----------
Bowl->i=5
Bowl->i=6
Bowl->i=4 static Cupboard cupboard = new Cupboard();
cupboard
f1->i=2
-----------
Bowl->i=4
cupboard new Cupboard();
f1->i=2
-----------
Bowl->i=4
cupboard new Cupboard();
f1->i=2
-----------
f2->i=1 table.f2(1);
f3->i=1 cupboard.f3(1);
*/
}
封装System.out.println输出语句
只能打印字符串…
public class Print {
public static void print(String something){
System.out.println(something);
}
}
以静态方式引入
import static edu.Print.print;