黑马程序员技术交流社区
标题:
class类的理解
[打印本页]
作者:
曹昌豪
时间:
2012-5-22 19:13
标题:
class类的理解
Class类是描述java类的类,按照面向对象的思想,除Class类以外的java类是Class类的实例对象,但为什么说java类加载在内存中的字节码是Class类的实例对象?看到这个问题感觉不好,不知道答案也就罢了,连java类的理解也不知道了,就知道类是一类事物统一描述???汗
作者:
刘聪
时间:
2012-5-22 20:28
java类加载在内存中的字节码是Class类的实例对象?
本人对此也深表有些不解,但愿意探讨
其实我之前问过一个问题,在这里:
http://bbs.itheima.com/thread-15183-1-1.html
。里面只是提到怎样获取Class,但好像咱们的问题也不是太吻合。所以我也就说说我的看法。Class类的实例表示
java应用运行时的类或接口
,而你看到的所谓”内存中的字节码“是
Class类的实例对象
我这里想强调的是
”运行“
二字!!!众所周知,java是先将源代码解释成字节码文件(即.class文件),而每个java类(不管是public的还是,普通的类)都会生成一个.class文件,具体到java内部运行时就表现为每个java类运行时都在JVM里表现为一个class对象(实例对象),这就是楼主的问题的答案。没有形象的比喻还请楼主在思考一下。其实就是这个说法比较绕。
再说一下以前总结的一些东西。Java程序在运行时,Java运行时系统一直对所有的对象进行所谓的运行时类型标识。这项信息纪录了每个对象所属的类。虚拟机通常使用运行时类型信息选准正确方法去执行,用来保存这些类型信息的类是Class类。Class类封装一个对象和接口运行时的状态,当装载类时,Class类型的对象自动创建。
Class 没有公共构造方法。Class 对象是在加载类时由 Java 虚拟机以及通过调用类加载器中的 defineClass 方法自动构造的,因此不能显式地声明一个Class对象。
虚拟机为每种类型管理一个独一无二的Class对象。也就是说,每个类(型)都有一个Class对象。运行程序时,Java虚拟机(JVM)首先检查是否所要加载的类对应的Class对象是否已经加载。如果没有加载,JVM就会根据类名查找.class文件,并将其Class对象载入。
作者:
山水游客
时间:
2012-5-22 20:53
Java程序在运行时,Java运行时系统一直对所有的对象进行所谓的运行时类型标识。这项信息纪录了每个对象所属的类。虚拟机通常使用运行时类型信息选准正确方法去执行,用来保存这些类型信息的类是Class类。Class类封装一个对象和接口运行时的状态,当装载类时,Class类型的对象自动创建。
Class 没有公共构造方法。Class 对象是在加载类时由 Java 虚拟机以及通过调用类加载器中的 defineClass 方法自动构造的,因此不能显式地声明一个Class对象。
虚拟机为每种类型管理一个独一无二的Class对象。也就是说,每个类(型)都有一个Class对象。运行程序时,Java虚拟机(JVM)首先检查是否 所要加载的类对应的Class对象是否已经加载。如果没有加载,JVM就会根据类名查找.class文件,并将其Class对象载入。
基本的 Java 类型(boolean、byte、char、short、int、long、float 和 double)和关键字 void 也都对应一个 Class 对象。
每个数组属于被映射为 Class 对象的一个类,所有具有相同元素类型和维数的数组都共享该 Class 对象。
一般某个类的Class对象被载入内存,它就用来创建这个类的所有对象。
作者:
黄奕豪
时间:
2012-5-22 20:54
楼主,类是模具,对象是零件,零件(对象)是按照模具(类)刻划出来的,模具可以开始规定零件的参数,比如说重量啊,模样啊!!什么的,这个叫做初始化,也叫做实例化的过程,这个能理解不?然后把,对象也不是个老实的主,他也不想任由模具摆布,所以它有时候也自己加工一下,比如说减点肥啊,化点妆变个样子,这个是对象的特点,已经做出来了,怎么改都可以,但是模具(类)就改不了,你一改模具,生产出来的就不是这个型号的零件了!!!
作者:
曹昌豪
时间:
2012-5-25 08:57
恩恩,比喻的好,再组织下语言,就可以了,挺好
作者:
静等花开
时间:
2012-10-31 22:00
1.Class对象
Class对象包含了与类相关的信息。事实上,Class对象就是用来创建类的所有的"普通"对象的。
类是程序的一部分,每个类都有一个Class对象。换言之,每当编写并且编译了一个新类,就会产生一个Class对象(恰当地说,是被保存在一个同名 的。class文件中)。在运行时,当我们想生成这个类的对象时,运行这个程序的Java虚拟机(JVM)首先检查这个类的Class对象是否已经加载。 如果尚未加载,JVM就会根据类名查找。class文件,并将其载入。
一旦某个类的Class对象被载入内存,它就被用来创建这个类的所有对象。
2.获取Class实例的三种方式
1)利用对象调用getClass()方法获取该对象的Class实例。
2)使用Class类的静态方法forName(),用类的名字获取一个Class实例。
3)运用。class的方式来获取Class实例,对于基本数据类型的封装类,还可以采用。TYPE来获取相对应的基本数据类型的Class实例。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2