类加载
1.字节码文件经过类加载器加载后会获得Class对象,也可以说Class对象是类加载的最终产品 2.类加载过程
- 类加载过程分三个阶段:1.Loading;2.Linking;3.Initialization
3.类变量的加载过程
- 在linking/prepare阶段进行零值初始化
- 在Initialization阶段按照语句(赋值动作和静态代码块)在源文件出现的顺序执行clinit方法,对类变量进行重新赋值
4.Class对象是存放在堆区的,不是方法区。 类的元数据(元数据并不是类的Class对象!Class对象是加载的最终产品,类的方法代码,变量名,方法名,访问权限,返回值等等都是在方法区的)才是存在方法区的。在一个JVM实例的内部,类型信息被存储在一个称为方法区的内存逻辑区中。
5.静态方法和私有方法都是在类加载阶段解析的,它们的符号引用在类加载阶段或者第一次使用时被转化成直接引用,同时这种转化被称作静态解析;静态方法和私有方法不可被重写就与这条机制有关
实际类型和静态类型
1
2
3
4
5
6
class Human{
}
class Man extends Human{
}
class Woman extends Human{
}
Human man = new Man();
这里的Human就称为静态类型,而后面的Man称为实际类型;静态类型在编译器就可知,而实际类型需要在JVM运行时才可知;