黑马程序员技术交流社区

标题: Class类是描述java类的,还是描述加载在内存中的字节码? [打印本页]

作者: 永恒之翼网络    时间: 2012-4-29 22:45
标题: Class类是描述java类的,还是描述加载在内存中的字节码?
张老师说:Java程序中的各个Java类属于同一类事物,描述这类事物的Java类名就是Class。
但是又有不少人说描述java类加载在内存中的字节码,但是从反射(就是把Java类中的各种成分映射成相应的java类)的概念来看,应该是描述java的。如果理解成“描述java类加载在内存中的字节码”, 可以基本的 Java 类型(boolean、byte、等等) 是Class 对象,但是回头一想,它们同时也是关键字,那不是所以的关键字是Class对象?
作者: 奥特曼爱小怪兽    时间: 2012-4-30 18:40
   1.本人认为,class类就是对内存中的存在对象的管理,你可以把它当做一个类,因为在使用的时候,要对一个类进行反射操作,所使用到的方法在面向对象的概念中也是一个类的组成部分。java也将反射机制封装成了一个java类供用户使用。它既是一个java类,用来描述java类的,更是对正在内存区的加载类的字节码的描述。你获取了一个java类的class,实际上是java虚拟机将这个java类的字节码调入内存,然后以class类封装提交给你使用的。
   2.关于是不是所有的关键字都是class对象,这个,你调用一下class.class你会发现编译器会报错。应为关键字是一种标示,是给编译器看的,标示你是创建一个什么东西,是类,还是接口?如果有这种标示,那么编译器就会检查你的语句是否符合定义这个类或者说接口的规则。
作者: 罗旭维    时间: 2012-4-30 18:58
楼主思维有点混乱,什么关键字?是类型!
你也说了Java程序中的各个Java类属于同一类事物所以要有个类去描述,
所以这里关键是他们是描述类的!
就是反射的Class类和其他的如Method之类的描述的都是类和类的成分(方法,和字段)。
一个类编译后就有其对应的字节码,反射里的Class可以认为描述的是类的字节码也代表这个类。
而反射了其他的Method,Field等,是描述的类的组成成分,所以一般使用反射的流程是,
先得到类的Class对象,然后通过这个Class对象获得Method等类的其他成员。
作者: 隋营营    时间: 2012-4-30 19:03
本帖最后由 隋营营 于 2012-4-30 19:09 编辑

JAVASE程序的运行原理:将编译好的class文件装载内存中从main方法开始运行。类装载器将编译好的class文件载入内存,对于类装载器来说编译好的class文件相当于一个对象,而这些对象的类型是java.lang.Class<T> !
java.lang.Class<T>用来描述类(这里的类指.class文件)的元信息(即这个类的概况。如:类名、类的变量、方法等)
您可以这样理解:所有编译成的.class文件的类型都是java.lang.Class<T>。




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