A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 曹昌豪 中级黑马   /  2012-5-22 19:13  /  3227 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

Class类是描述java类的类,按照面向对象的思想,除Class类以外的java类是Class类的实例对象,但为什么说java类加载在内存中的字节码是Class类的实例对象?看到这个问题感觉不好,不知道答案也就罢了,连java类的理解也不知道了,就知道类是一类事物统一描述???汗

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

6 个回复

倒序浏览
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对象载入。

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
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对象被载入内存,它就用来创建这个类的所有对象。
回复 使用道具 举报
楼主,类是模具,对象是零件,零件(对象)是按照模具(类)刻划出来的,模具可以开始规定零件的参数,比如说重量啊,模样啊!!什么的,这个叫做初始化,也叫做实例化的过程,这个能理解不?然后把,对象也不是个老实的主,他也不想任由模具摆布,所以它有时候也自己加工一下,比如说减点肥啊,化点妆变个样子,这个是对象的特点,已经做出来了,怎么改都可以,但是模具(类)就改不了,你一改模具,生产出来的就不是这个型号的零件了!!!
回复 使用道具 举报
恩恩,比喻的好,再组织下语言,就可以了,挺好
回复 使用道具 举报
 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实例。


回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马