- 代码块又叫初始化块,属于类的五大成员之一,即使类的一部分 类似于方法,将逻辑语句封装在方法提中,通过{ }包围起来。但和方法不同,没有方法名,没有返回值,没有参数,只有方法体,而且不用通过对象或类显示调用,而是在加载类的时候或者创建对象的时候隐式调用。
{
System.out.println("电影屏幕打开。。");
System.out.println("电影开始");
System.out.println("电影结束了");
}
这就是一个代码块
- 在程序中通常给对象进行初始化,它的执行优先级要高于构造器,与属性调用优先级相同,他没有返回值和访问修饰符,也不用加void关键字。
- 代码块大体上分为两类:静态代码块和非静态代码块,也即普通代码块。
静态代码块
static {
System.out.println("jack is a boy");
}
静态代码块的使用细节:
1.可以有输出语句
2.可以对类的属性声明进行初始化操作
3.可以调用静态的变量或方法,但不可以对非静态的属性进行初始化,即不能调用非静态属性和方法
4.当有多个静态代码块时,按照从上到下的顺序依次执行
5.静态代码块随着类加载而加载,所以静态代码块的执行要先于非静态代码块。
6.静态代码块只能执行一次。
非静态代码块(普通代码块)
{
System.out.println("jack is a boy");
System.out.println("Mary is a girl");
}
非静态代码块的使用细节:
-
可以输出语句
-
可以对类的属性声明进行初始化操作
-
可以调用静态和非静态的变量或方法
-
如有多个非静态的代码块,那么按照从上到下的顺序一次执行
-
每次创建对象的时候,都执行一次。
-
值得注意的是:静态代码块中只能调用静态属性和方法,但非静态代码块既可以调用静态属性和方法,也可以调用非静态属性和方法。静态代码块只会执行一次,且随着类加载而加载,因此它的作用是对类进行初始化。而非静态代码块在每次创建对象的时候都会执行一次,因此非静态代码块的作用是对对象进行初始化。
-
当类与类存在继承关系时,类的成员调用优先级如下(重要):
1.父类的静态属性和静态代码块(优先级一样,按照从上到下的顺序执行)
2.子类的静态属性和静态代码块(优先级一样,按照从上到下的顺序执行)
3.父类的普通代码块和普通属性初始化(优先级一样,按照从上到下的顺序执行)
4.父类的构造方法
5.子类的普通代码块和普通属性初始化(优先级一样,按照从上到下的顺序执行)
6.子类的构造方法