尚硅谷JavaSE基础
7.3 代码块
7.3.1 什么是代码块
1. 什么是代码块
2.静态代码块
一个类中初始化块若有修饰符,则只能被static修饰,称为静态代码块(static block ),当类被载入时,类属性的声明和静态代码块先后顺序被执行,且只被执行一次。
static块通常用于初始化static (类)属性
class Person {
public static int total;
static {
total = 100;//为total赋初值
}
…… //其它属性或方法声明
}
3. 非静态代码块
概念:没有static修饰的代码块
特点:
- 可以有输出语句。
- 可以对类的属性、类的声明进行初始化操作。
- 可以调用静态的变量或方法。
- 若有多个非静态的代码块,那么按照从上到下的顺序依次执行。
- 每次创建对象的时候,都会执行一次。且先于构造器执行
4 静态和非静态关系
非静态的本质是什么
非静态也可以称为动态, 意思是确定的, 在程序中对象的创建是不确定的, 因为只要new就会产生对象, 所以非静态的概念必然是和对象相关的.
静态的本质是什么
静态的就是确定的, 唯一的, 在程序中是稳定的, 和有无对象无关, 也和有多少对象无关, 只和类相关, 所以, 所以静态成员是稳定并唯一的.
如何互相使用
在非静态环境中可以中直接使用静态成员, 因为在非静态环境中, 对象必然是已经创建了, 对象既然已经创建, 类也肯定已经加载过了, 所以在使用上并不会有问题.
但是 在静态环境中却不可以直接使用非静态成员, 因为静态成员可以使用, 不要求对象,只要求类加载好就可以了, 但是类加载, 并不意味着一定要创建对象, 并且对象创建在哪里也不知道. 所以在静态环境中不可以直接访问非静态成员, 因为非静态成员隶属于对象, 所以在静态环境中只能通过创建对象, 并再通过对象来间接访问非静态成员.