1、构造器初始化顺序(普通代码块、静态代码块、构造方法(子类、父类)、成员、静态成员的执行顺序)
public class Parent {
private int age = 2;
private String name = "micky";
public Parent(int age, String name) {
super();
System.out.println("构造方法---" + "age = " + age + "|" + "name =" + name );
this.age = age;
this.name = name;
System.out.println("构造方法+++" + "age = " + age + "|" + "name =" + name );
}
private static int version = 1;
static {
System.out.println("静态代码块---" + "verion" + version);
version = 2;
System.out.println("静态代码块+++" + "version" + version);
}
{
System.out.println("普通代码块---" + "version" + version);
age = 10;
name = "panda";
version = 3;
System.out.println("普通代码块+++" + "vesion =" + version +"|" + "age =" + age + "|" + "name = "+ name);
}
@Override
public String toString() {
System.out.println("toString方法" + "age = " + age + "|" + "name = " +name);
return super.toString();
}
输出结果为:静态代码块—verion1
静态代码块+++version2
普通代码块—version2
普通代码块+++vesion =3|age =10|name = panda
构造方法—age = 5|name =ruimin
构造方法+++age = 5|name =ruimin
toString方法age = 5|name = ruimin
执行顺序为 静态对象初始化>静态代码块>普通代码块>普通对象初始化>构造方法
2、垃圾回收器的回收机制
变量有两种:原始主数据类型和引用
原始主数据类型指的就是指八种基本数据类型
引用是指创建对象的变量。
我们首先分析这几种典型代码的堆栈情况:
首先为大家讲述一下实例变量和局部变量的概念
实例变量:对象的状态即为实例变量,实例变量是被声明在类而不是在方法里,实例变量存在于所属的对象中。
局部变量:对象的行为即为方法,声明在方法中的变量即为局部变量,局部变量和方法的参数被声明在方法中。它是暂时的,且生命周期只限于方法被放在栈上的这段空间。
对象一定是在堆中,实例变量永远都会有默认值,局部变量没有默认值,如果在变量初始化之前就使用的话,编译器会显示错误。
所有局部变量声明在方法或方法的参数上
当没有一个引用指向对象时,该对象就随时可能被垃圾回收器回收