类的成员-代码块
  # 类的成员
Java的基本单位是类class,Java成员即类中的成员,包括以下五个部分:
- 属性
 - 方法
 - 构造器
 - 代码块/初始化块
 - 内部类
 
# 代码块
什么是代码块?
就是一对大括号包起来的,就是代码块
代码块(或初始化块)的作用
对Java类或对象进行初始化
代码块(或初始化块)的分类:
一个类中代码块若有修饰符,则只能被static修饰,称为静态代码块(staticblock),没有使用static修饰的,为非静态代码块。
代码块静态和非静态有些细节需要了解,不难理解:
static代码块
- 通常用于初始化
static的属性,随着对象的加载而执行,而且只执行一次 
class Person{
    private int age;
    public static String desc = "我是一个人……";
    
    //代码块
    static{
        total = 100;
        System.out.println("初始化")
    }
    
    ……//其他属性或者声明
}
 1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
String desc1 = Person.desc;
String desc2 = Person.desc;
String desc3 = Person.desc;
 1
2
3
2
3
发现只输出一次初始化。
- 如果一个类中定义多个静态代码块,则按照声明的先后顺序执行。
 - 静态代码块的执行要优先于非静态代码块
 
非静态代码块
- 每创建一个对象,就执行一次静态代码块
 
class Person{
    private int age;
    public static String desc = "我是一个人……";
    
    static{
        total = 100;
        System.out.println("初始化")
    }
    
    ……//其他属性或者声明
}
 1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
new Person();
new Person();
new Person();
 1
2
3
2
3
你会发现输出了三次初始化。
- 如果一个类中定义多个非静态代码块,则按照声明的先后顺序执行。
 
代码块调用方法
无论是静态还是静态,都可以在代码块内调用方法,不过静态代码块内只能调用静态的属性或方法,而非静态代码块内可以调用任意的属性或方法。
# 程序中成员变量赋值的执行顺序
回顾:对属性可以赋值的位置(包含顺序)
默认初始化
显式初始化
构造器中初始化/ 5. 在代码块中赋值
通过对象属性或方法赋值
声明成员变量的默认初始化
显式初始化、多个初始化块依次被执行(同级别下按先后顺序执行)
构造器再对成员进行初始化操作
通过”对象.属性”或”对象.方法”的方式,可多次给属性赋值6.3 类的成员之四:代码块
总结成一句话是:由父从子,静态先行。
# 总结
- 代码块的作用:来初始化块、对象
 - 代码块如果有修饰的话,只能用
static - 分类:静态代码块vs非静态代码块
 - 静态代码块
- 内部可以由输出语句
 - 随着类的加载而执行,而且只执行一次
 - 作用:初始化类的属性
 - 如果一个类中定义多个静态代码块,则按照声明的先后顺序执行。
 - 静态代码块的执行要优先于非静态代码块
 - 静态代码块内只能调用静态的属性、方法,不能调用非静态的结构
 
 - 非静态代码块
- 内部可以有输出语句
 - 随着对象的创建而执行
 - 每创建一个对象,就执行一次静态代码块
 - 作用:可以在创建对象时,对对象的属性进行初始化
 - 如果一个类中定义多个非静态代码块,则按照声明的先后顺序执行。
 - 非静态代码块内可以调用静态的属性、方法或者非静态的属性、方法。
 
 
代码块其实使用频率不高,但是有些源码中使用,所需还是需要了解的,知道代码执行先后顺序,对读源码有用。
帮我改善此页面  (opens new window)
  上次更新: 2020/12/18, 12:50:58