【求解】关于类的Class对象的一些疑惑?
--------------------编程问答-------------------- 1.编译时生成的class类是一个文件,用来存储jvm能执行的指令集和类的信息.2.JVM要运行程序就要在jvm中找到执行的指令,没有class对象就没有相应的指令.所有要加载class,把class加载到了JVM就会在JVM的方法区里生成类信息也就是class对象,等你在代码里有new操作时,就会在JVM的堆区里生成一个实例每个new都会有不同的实例.
所以class类的class对象只是一个概念, --------------------编程问答--------------------
那请问是不是说类的Class对象是在加载类的时候JVM创建的呢 --------------------编程问答-------------------- Java源程序(.java文件)在经过 Java编译器 编译之后就被转换成 Java字节代码(.class 文件)
JVM会执行该类的静态代码段,动态加载和创建Class 对象
楼主这和c++的静态绑定动态绑定是一样的 --------------------编程问答--------------------
很感谢你的解答,有些书上就是你的这个意思,加载类的时候动态创建Class对象,但是有些书上不是,有些书上说的是每当编写并编译了一个java类后就产生了一个Class对象,保存在同名的.class文件中(包括网上好多都这么说),甚至有些视频就是直接说类对应的Class对象就是类字节码文件(每个字节码文件就是一个Class对象)。
如果是按你说的那个意思:
class LoadedClass{
static{
System.out.println(“类LoadedClass载入”);
}
public LoadedClass(){
System.out.println(“类LoadedClass实例化”);
}
}
class Test{
public static void main(String[] args){
System.out.println(“以下是通过.class的方式取得LoadedClass类的Class对象”);
Class cls=LoadedClass.class;
}
}
运行结果:
以下是通过.class的方式取得LoadedClass类的Class对象
通过“类名.class”方式可以取得Class的对象,由运行结果看出此时静态代码块没有执行,也就是说类并没有加载,那么我们课本上说:Class对象是在加载类时由JVM或者调用类加载器中的defineClass方法自动构造的。此时类并没有加载,按这种说法就说JVM就还没有创建Class对象,但是现在“类名.class”方式取得的Class对象是哪里来的呢?
补充:Java , Java SE