1.Java类的初始化
- 只有在 Java类被第一次使用时,虚拟机才会对该Java类进行初始化。
- 初始化过程中静态代码块和静态域会按照书写顺序依次执行。
- 当访问Java类或接口中的静态域时,只有真正声明这个域的类或接口会被初始化。如:在类A中声明了静态域value,类B继承自类A。通过B.value可以直接访问类A中声明的静态域value。虽然引用时使用的类B,但是由于value是在类A中声明的,因此B.value只会初始化类A,类B不会被初始化。
/**
* @author lzzz
*
*/
public class J17101901 {
public static void main(String[] args) {
System.out.println(B.value);
/*
out:
A static
1
*/
}
}
class A {
static int value = 1;
static {
System.out.println("A static");
}
}
class B extends A {
static {
System.out.println("B static");
}
}
- 创建对象
- 调用类中的静态方法
- 为类或接口中的静态域赋值
- 访问类或接口中声明的静态域
- 调用Class类和反射API
2.Java对象的创建于初始化
- 在实际创建对象之前分配内存空间。所需的内存空间大小取决于Java类及其父类和祖先类包含的所有实例域的数量和类型。
- 内存分配成功之后将所有实例域设为默认值。
- 调用构造方法,类的构造方法调用过程分成三步:第一步是调用父类的构造方法,没有显示定义将会调用默认构造方法。第二步是按照书写顺序初始化类中的实例域。第三步是执行类的构造方法中的相应代码。
/**
* @author lzzz
*
*/
public class J17100805 {
static {
System.out.println("father static{}");
}
{
System.out.println("father {}");
}
private int id = print("father private int id");
private static int staticId = print("father private static int");
public static int print(String str) {
System.out.println(str);
return 1;
}
public static void main(String[] args) {
J17100805 j1 = new J17100805();
System.out.println("--------我在j1之后--------");
J17100805 j2 = new J17100805();
System.out.println("--------我在j2之后--------");
J17100805 j3 = new J17100805();
System.out.println("
--------我是分割线--------
");
System.out.println("--------我在jj1之后--------");
J171008051 jj2 = new J171008051();
System.out.println("--------我在jj2之后--------");
J171008051 jj3 = new J171008051();
/*
father static{}
father private static int
father {}
father private int id
--------我在j1之后--------
father {}
father private int id
--------我在j2之后--------
father {}
father private int id
--------我是分割线--------
--------我在jj1之后--------
child static{}
child private static int
father {}
father private int id
child {}
child private int id
--------我在jj2之后--------
father {}
father private int id
child {}
child private int id
*/
}
}
3.对象终止
- Java采用自动内存管理机制,对象回收工作由垃圾回收器自动完成。
- 如果一定要手动处理相关工作,Java提供了finalize方法。