halisi7

一个专注技术的组织

0%

Java面向对象3-代码块

类的成员之四:代码块(或初始化块)

  1. 代码块的作用:用来初始化类、对象
  2. 代码块如果有修饰的话,只能使用static.
  3. 分类:静态代码块 vs 非静态代码块

  4. 静态代码块

    >内部可以有输出语句
    >随着类的加载而执行,而且只执行一次
    >作用:初始化类的信息
    >如果一个类中定义了多个静态代码块,则按照声明的先后顺序执行
    >静态代码块的执行要优先于非静态代码块的执行
    >静态代码块内只能调用静态的属性、静态的方法,不能调用非静态的结构
    
  5. 非静态代码块

     >内部可以有输出语句
     >随着对象的创建而执行
     >每创建一个对象,就执行一次非静态代码块
     >作用:可以在创建对象时,对对象的属性等进行初始化
     >如果一个类中定义了多个非静态代码块,则按照声明的先后顺序执行
     >非静态代码块内可以调用静态的属性、静态的方法,或非静态的属性、非静态的方法
    

对属性可以赋值的位置:

①默认初始化
②显式初始化/⑤在代码块中赋值
③构造器中初始化
④有了对象以后,可以通过”对象.属性”或”对象.方法”的方式,进行赋值

执行的先后顺序:① - ② / ⑤ - ③ - ④

Demo:

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
30
31
32
33
34
35
36
37
38
class Father {
static {
System.out.println("11111111111");
}
{
System.out.println("22222222222");
}

public Father() {
System.out.println("33333333333");

}

}

public class Son extends Father {
static {
System.out.println("44444444444");
}
{
System.out.println("55555555555");
}
public Son() {
System.out.println("66666666666");
}


public static void main(String[] args) { // 由父及子 静态先行
System.out.println("77777777777");
System.out.println("************************");
new Son();
System.out.println("************************");
new Son();
System.out.println("************************");
new Father();
}

}

输出:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
11111111111
44444444444
77777777777
************************
22222222222
33333333333
55555555555
66666666666
************************
22222222222
33333333333
55555555555
66666666666
************************
22222222222
33333333333

总结:

  • 由父及子 静态先行
打赏一下作者~ ฅ( ̳• ◡ • ̳)ฅ