一、代码块
简介: 在一个类中,只有修饰符和方法体的部分,称为代码块
-
代码块是对类的构造器的补充机制
-
代码块可以将同一类中多个构造器中相同部分抽取出来,写在单独的块中
-
代码块运行优先于构造器
-
修饰符是可选的,如果有修饰符就只能是static
-
修饰符是statice就是静态代码块,否则就是普通代码块
-
对象每创建一次,普通代码块就被执行一次,而静态代码块只会被执行一次
-
格式
[修饰符]{
}
class test{
private String name;//电影名
private double price;//价格
private String director;//导演
//未使用代码块
public test(String name){
System.out.println("荧幕打开");
System.out.println("广告");
System.out.println("电影开始");
this.name = name;
}
public test(String name,double price){
System.out.println("荧幕打开");
System.out.println("广告");
System.out.println("电影开始");
this.name = name;
this.price = price;
}
public test(String name,double price,String director){
System.out.println("荧幕打开");
System.out.println("广告");
System.out.println("电影开始");
this.name = name;
this.price = price;
this.director = director;
}
//使用代码块后
{
System.out.println("荧幕打开");
System.out.println("广告");
System.out.println("电影开始");
}
public test(String name){
this.name = name;
}
public test(String name,double price){
this.name = name;
this.price = price;
}
public test(String name,double price,String director){
this.name = name;
this.price = price;
this.director = director;
}
}
代码块细节
一、静态代码块
静态代码块:修饰符为static,随着类的加载而加载,只加载一次
作用:对类进行初始化
二、类什么时候被加载[重要!]
- 当对象被实例化时(new)
- 当对象的子类被实例化时
- 当对象中的静态属性或静态方法被调用时
三、类中静态代码块、普通代码块和构造器的运行顺序
- 先运行类中的静态属性和静态代码块(如果有多个静态属性和静态代码块,则按编写顺序执行)
- 然后运行类中的普通属性和普通代码块(如果有多个普通属性和普通代码块,则按编写顺序执行)
- 最后运行构造器
四、构造器运行顺序
构造器中包含一个super()和一个调用普通代码块的方法;
super()是调用父类的无参构造器;
只有对象被创建时构造器才会被调用;
class A extends 父类{
{
sout("A 的普通代码块");
}
public A(){
super();
//这里还有一个调用普通代码块的方法
sout("A 构造方法");
}
}
五、继承关系中类的静态代码块、普通代码块和构造器的运行顺序
- 父类静态代码块、静态属性和静态方法
- 子类静态代码块、静态属性和和静态方法
- 父类普通代码块、普通属性和和普通方法
- 父类构造方法
- 子类普通代码块、普通属性和和普通方法
- 子类构造方法
六、调用
静态代码块只能调用静态成员,普通代码块可以调用任意成员