构造函数本质和iOS没什么区别,但是引入了代码块的概念是以前不知道的
代码块的类别:
1、构造代码块
- 写在类中,构造代码块的大括号必须位于成员位置上
- 执行过程中,先执行构造代码块中的代码,再执行构造函数
构造 代码块要注意的事项: 1. java编译器编译一个java源文件的时候,会把成员变量的声明语句提前至一个类的最前端。 2. 成员变量的初始化工作其实都在在构造函数中执行的。 3. 一旦经过java编译器编译后,那么构造代码块的代码块就会被移动构造函数中执行,是在构造函数之前执行的,构造函数的中代码是最后执行 的。 4. 成员变量的显示初始化与构造代码块 的代码是按照当前代码的顺序执行的。
2、局部代码块。代码块位于方法之内,作用:缩短局部变量的生命周期,节省一点点内存。
- 局部代码块的大括号位于代码之内
- 有一个小作用,缩短局部变量的声明周期,节省一点点内存,没其他作用
3、静态代码块 static
- 不创建对象的时候,构造代码块是不执行的
- 静态代码优先
PS:经过JAVA编译器后无论代码顺序如何,都会变成:
构造方法
{
1、属性声明,直接赋值
2、构造代码块中的代码
3、构造方法中的代码
}
public class CarDemo {
public String name;
{
System.out.println("构造代码块执行");
System.out.println("执行构造代码块的时候,name为:" + this.name);
}
static {
System.out.println("静态代码块执行");
}
public static void main(String[] args){
CarDemo.Run();
}
public static void Run(){
System.out.println("执行一个静态方法");
CarDemo car = new CarDemo("R8");
}
public CarDemo(String name){
this.name = name;
System.out.println("构造函数调用了,name = " + this.name);
}
public CarDemo(){
System.out.println("无参数的构造函数");
}
public void aaa(){
System.out.println("父类方法");
}
}
以上代码的执行结果是:
静态代码块执行
执行一个静态方法
构造代码块执行
执行构造代码块的时候,name为:null
构造函数调用了,name = R8
结论:
- 执行一个静态方法的时候,优先执行静态代码块
- 创建一个对象的时候,构造代码块优先执行,然后才执行构造方法