首先要搞明白什么是类的初始化,什么是实例初始化,这两个概念特别容易混淆
1、类初始化
类初始化:

1.创建实例需要先加载并初始化该类

此处main方法所在的类需要先加载并初始化

2.子类初始化要先初始化其父类

3.类初始化即是执行clinit(ClassInit)方法

A.(静态!)分为 静态变量的显式赋值操作 和 静态代码块
  B.上到下的顺序执行
  C.这个clinit方法只执行一次
  -----------------------------------------------------------------
2、实例初始化
实例bai初始化就是在内存中开辟一个类du的对象 如:
public class Animal{
public Animal(){ }
public void mthod(){ }
}
在main函数中通过语句 Animal a = new Animal();
表示把类zhiAnimal实例化,a为其对象引用dao
说白了就是用类名new个新对象