java文件被JDK编译成为class文件,class文件又被jvm加载到内存生成Class对象,Class对象又可以在运行时,生成java类的对象。这篇文章就来介绍一下他们之间的转化关系。
1> class文件
当使用编辑器编写完毕class文件后,使用javac命令或者编译器自动就把java文件编译成为class文件。class文件是以十六进制字节码的形式保存。java的编译过程就是把java文件翻译成为class字节码的过程。有关class文件的详细介绍,可以查看《深入理解Java虚拟机:JVM高级特性与最佳实践》一书,里面有非常详尽的介绍。
2> Class对象
class文件作为物理文件,可以再磁盘上保存,可以作为普通文件复制粘贴,但是Class对象只能在内存中,他是class文件在内存中的代言人,是在内存中的保存方式。
当java程序运行时,需要使用到一个java类的实例,jvm现在方法区中判断Class对象是否被加载,没有被加载,类加载器根据使用类的路径找到class文件,把class文件加载到内存中,生成Class对象。Class对象存放于方法区(方法区和堆区区别可以查看《深入理解Java虚拟机:JVM高级特性与最佳实践》)。
Class对象生成方式有三种:
1.Class.forName("类名字符串") (注意:类名字符串必须是全称,包名+类名)
2.类名.class
3.实例对象.getClass()
理解Class对象是学习反射和代理的基础。
3> java类对象
java类对象又称为java实例对象等,是java程序的主要执行者。保存到堆内存中。
使用Class对象的newInstance()方法,就能取得一个实例对象。