类的成员-代码块
# 类的成员
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