黑马程序员技术交流社区

标题: 该如何理解Class实例对象与Class类型 [打印本页]

作者: 骆传雄    时间: 2012-11-16 16:54
标题: 该如何理解Class实例对象与Class类型
听张老师讲高新技术,在透彻分析反射的基础_Class类时,"得到各个字节码对应的实例对象(Class类型)"与"只要是在源程序中出现的类型,都有各自的Class实例对象”这两句我有点不太明白。望高手指教。

作者: 许坤    时间: 2012-11-16 21:57
Class的理解:   在反射机制中,Class是一个很重要的类,该类的实例对象用来表示一个类型的特定信息。注意:这里讲的是类型的特定信息,不是类的特定信息哦。为什么这么讲,请看如下代码:int.class ; double[ ].class ;这两句都是正确的。
int.class是Class的一个实例对象,该对象中存有 int 的特定信息;同理,double[ ].class也是Class的一个实例对象,该对象中存有double数组的相关信息。大部分情况下,Class的实例对象表示的是一个类的特定信息,但是它的实际意义确不只于此。
作者: 初艳春    时间: 2012-11-16 22:14
Class对象包含了与类相关的信息。事实上,Class对象就是用来创建类的所有的“普通”对象的。

类是程序的一部分,每个类都有一个Class对象。换言之,每当编写并且编译了一个新类,就会产生一个Class对象(恰当地说,是被保存在一个同名的.class文件中)。在运行时,当我们想生成这个类的对象时,运行这个程序的 Java虚拟机(JVM)首先检查这个类的Class对象是否已经加载。如果尚未加载,JVM就会根据类名查找.class文件,并将其载入。

一旦某个类的Class对象被载入内存,它就被用来创建这个类的所有对象。

Class对象的生成方式如下:
1.Class.forName("类名字符串")
2.类名.class
3.实例对象.getClass()  
生成Class对象的过程其实是如此的:
当我们编写一个新的java类时,JVM就会帮我们编译成class对象,存放在同名的.class文件中。在运行时,当需要生成这个类的对象,JVM就会检查此类是否已经装载内存中。若是没有装载,则把.class文件装入到内存中。若是装载,则根据class文件生成实例对象。


作者: 灵感    时间: 2012-11-16 23:05
在Java中,每个class都有一个相应的Class对象。也就是说,当我们编写一个类,编译完成后,在生成的.class文件中,就会产生一个Class对象,用于表示这个类的类型信息。
在运行期间,如果我们要产生某个类的对象,Java虚拟机会检查该类型的Class对象是否已被加载。如果没有被加载,JVM会根据类的名称找到.class文件并加载它。一旦某个类型的Class对象已被加载到内存,就可以用它来产生该类型的所有对象
作者: 灵感    时间: 2012-11-16 23:05
在Java中,每个class都有一个相应的Class对象。也就是说,当我们编写一个类,编译完成后,在生成的.class文件中,就会产生一个Class对象,用于表示这个类的类型信息。
在运行期间,如果我们要产生某个类的对象,Java虚拟机会检查该类型的Class对象是否已被加载。如果没有被加载,JVM会根据类的名称找到.class文件并加载它。一旦某个类型的Class对象已被加载到内存,就可以用它来产生该类型的所有对象
作者: ssx0101    时间: 2012-11-17 00:00
两句话其实是一个意思,源程序就是以字节码来保存的。
两句话的意思都是:源程序里写的类在运行时都会有实例对象。
作者: 骆传雄    时间: 2012-11-17 10:17
严学韦 发表于 2012-11-16 23:05
在Java中,每个class都有一个相应的Class对象。也就是说,当我们编写一个类,编译完成后,在生成的.class文 ...

明白了,谢谢。




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