构造代码块:
{ 构造代码块的位置:类里方法外 作用:用于提取构造方法中的共性内容 执行时机:优先于构造方法执行*/ subject = "Java培优"; System.out.println("构造代码块"); }
每次创建对象时,都会执行一次构造代码块和构造方法,并且构造代码块优先于构造方法执行
特点:
- 位置: 在类的内部,在方法的外部
- 作用: 用于抽取构造方法中的共性代码
- 执行时机: 每次调用构造方法前都会调用构造代码块
- 注意事项: 构造代码块优先于构造方法加载
总结:
构造方法:与类同名且没有返回值类型的用来创建对象的方法(还可以赋值).
构造代码块:类里方法外用来提取构造方法公性功能的代码块
局部代码块:写在方法里用来控制变量范围的代码块
局部代码块:
- 位置: 在方法里面的代码块
- 作用: 通常用于控制变量的作用范围,出了花括号就失效
- 注意事项:变量的作用范围越小越好,成员变量会存在线程安全的问题
演示:
//.定义普通方法
//方法定义:修饰符 返回值类型 方法名(参数列表){方法体...}
public void study() {
//创建局部代码块
局部代码块的位置:方法里
作用:控制变量的作用范围(作用范围越小越好,因为越小越安全)
执行时机:调用本方法时
{
int i = 10;
System.out.println(i);
}
//System.out.println(i);//报错,因为超出i的作用范围
System.out.println("正在备课...");
}
静态代码块:
定义:
静态资源随着类的加载而加载,并且只被加载一次,一般用于项目的初始化
特点: 被static修饰,位置在类里方法外
总结:
代码块之间的执行顺序:
静态代码块-->构造代码块-->构造方法-->局部代码块
为什么是这样的顺序:
静态代码块要优先于对象进行加载,是随着类的加载而加载到内存中的
静态资源只加载一次就会一直存在,直到类的消失,它才会消失
每个元素的作用:
静态代码块:专门用来完成一些需要在第一时间加载并且只加载一次的资源
构造代码块:创建对象时才会触发,用来提取构造方法中的共性内容
构造方法:创建对象时调用,用来创建对象,在构造代码块之后执行
局部代码块:调用其所在方法时才会执行,用于控制变量的作用范围.
思考题:
在继承当中这些顺序是什么样的?它们的执行顺序是什么样的?
注意:静态优先于普通,父类优先于子类
父类的静态代码块
子类的静态代码块
父类的构造代码块
子类的构造代码块
父类的构造方法
子类的构造方法
父类的普通方法
子类的普通方法
父类的局部代码块
子类的局部代码块