黑马程序员技术交流社区

标题: Class对象是什么时候产生的? [打印本页]

作者: Oh_JAVA    时间: 2016-7-29 12:25
标题: Class对象是什么时候产生的?
本帖最后由 Oh_JAVA 于 2016-7-30 22:32 编辑

我看javaAPI中文版对 Class类如下叙述:
Class 没有公共构造方法。Class 对象是在加载类时由 Java 虚拟机以及通过调用类加载器中的 defineClass 方法自动构造的。
这个加载类是运行时加载相应的类?加载相应的class文件吗?如果是那么Class对象是运行时产生的

在JAVA编程思想中
类是程序的一部分,每个类都有一个Class对象。换言之每当编写或编译了一个新类,就会产生一个Class对象(保存在同名的.class文件中).
这句话我理解就是:Class对象是编译时JVM产生的,保存在.class中

第一种的加载类如果不是运行时加载而是编译时加载那么两种结合起来理解就行的通:
在写完一个java程序进行编译时时,JVM会加载这个类然后生成class对象保存在.class文件中

上述不知道有没有理解错,如题,Class对象是什么时候产生的,哪一种?还是我最后理解的这个两个结合版
还有一个问题Class是对象,用于创建这个类的所有对象.那么要是这些对象都成为垃圾被回收了,那么这个对应的Class对象也会被回收吗?

个人已解决了,谢谢大家~

作者: 花陌相惜    时间: 2016-7-29 12:25
在Java中,每个class都有一个相应的Class对象。也就是说,当我们编写一个类,编译完成后,在生成的.class文件中,就会产生一个Class对象,用于表示这个类的类型信息
   获取Class实例的三种方式:
   (1)利用对象调用getClass()方法获取该对象的Class实例;
   (2)使用Class类的静态方法forName(),用类的名字获取一个Class实例(staticClass forName(String className)  Returns the Classobject associated with the class or interface with the given stringname. );
   (3)运用.class的方式来获取Class实例,对于基本数据类型的封装类,还可以采用.TYPE来获取相对应的基本数据类型的Class实例
   在newInstance()调用类中缺省的构造方法 ObjectnewInstance()
不知道这个答案怎么样
作者: 敲敲敲dm    时间: 2016-7-29 21:54
编译时产生保存在方法区,能解决你的问题吗
作者: Oh_JAVA    时间: 2016-7-30 17:27
这个应该是对的:
Java编译器编译好Java文件之后,产生.class 文件在磁盘中。这种class文件是二进制文件,内容是只有JVM虚拟机能够识别的机器码。JVM虚拟机读取字节码文件,取出二进制数据,加载到内存中,解析.class 文件内的信息,生成对应的 Class对象:
作者: Oh_JAVA    时间: 2016-7-30 22:21
花陌相惜 发表于 2016-7-30 21:59
在Java中,每个class都有一个相应的Class对象。也就是说,当我们编写一个类,编译完成后,在生成的.class文 ...

我感觉第二楼这个应该是对的,我查了好多资料确定的.,class文件是编译后产生的,对象应该不会存在里面的。Java编程思想中的这句话应该是我们理解有点偏差吧,他这个换言之感觉就是打个比喻一样,因为class对象的确是根据此class文件产生的。个人理解,大神勿喷~
作者: 花陌相惜    时间: 2016-7-30 22:25
Oh_JAVA 发表于 2016-7-30 22:21
我感觉第二楼这个应该是对的,我查了好多资料确定的.,class文件是编译后产生的,对象应该不会存在里面的。 ...

嗯嗯,没有,再说我也不是大神,都是互相交流。class文件是编译后产生的这个大家都认同。
作者: shockzwel1    时间: 2016-7-30 22:53
不懂  帮顶!
作者: linguoqun    时间: 2016-8-1 00:44
已经解决就好,还想为您解答呢。呵呵。毕竟最近挺缺黑马币的。
作者: Oh_JAVA    时间: 2016-8-1 00:47
linguoqun 发表于 2016-8-1 00:44
已经解决就好,还想为您解答呢。呵呵。毕竟最近挺缺黑马币的。

可以在回答一遍的加深我理解,毕竟还有回收这些还有点迷惑呢~谢谢
作者: liusonglin    时间: 2016-8-9 00:39
.class文件加载进内存的时候创建Class对象。
作者: double_x    时间: 2016-8-10 20:35
可以 很强势
作者: Liangfwu    时间: 2016-8-10 22:23
产生的时候是编译期,但是回收垃圾的时候类文件会被回收吗?
作者: Oh_JAVA    时间: 2016-8-16 13:50
Liangfwu 发表于 2016-8-10 22:23
产生的时候是编译期,但是回收垃圾的时候类文件会被回收吗?

class文件是编译期产生的,对象不是编译期产生的
作者: double_x    时间: 2016-8-18 21:11
那到底怎么回事呢
作者: zhangliuxian    时间: 2016-8-21 13:11
Oh_JAVA 发表于 2016-7-30 17:27
这个应该是对的:
Java编译器编译好Java文件之后,产生.class 文件在磁盘中。这种class文件是二进制文件, ...

qq:798987006 看你技术比较厉害,私聊啊
作者: 小超超    时间: 2016-8-25 11:34
.class对象是在对.java程序编译时产生的,.class是JVM虚拟机的可执行文件。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2