黑马程序员技术交流社区
标题:
关于类型信息,Class对象到底保存了类的什么?
[打印本页]
作者:
李栋梁
时间:
2012-11-18 20:38
标题:
关于类型信息,Class对象到底保存了类的什么?
关于类型信息,Class对象到底保存了类的什么?有此不是太明白的
作者:
张利
时间:
2012-11-18 21:07
刚学到这块,感觉理解的也不是很透彻了
我目前的理解就是对于class来说就是对于类的一个抽取,是类对象的类,保存了一个类中各种成分的变量以及与之的操作了
像是类的名称,类的包,类的方法,类的构造函数;不过class类中的变量就不是简单的int型什么的了 而且Method,Field这种
也是各种的类组成的了
作者:
杨卫腾
时间:
2012-11-18 21:18
我的理解是: 反射其实就是将Java类中的所有成分映射成相应的一个Java类。
字节码加载进内存中的时候,这个字节码就是唯一的,Java说的一切都是对象,那么我们使用
这个类(Class)就可以操作其他的类了,可以获取其他类中的 字段、方法、构造器.....
作者:
徐军涛
时间:
2012-11-18 21:45
我的理解:
类是用来描述事物的,描述事物当然少不了属性和行为及其所属了。
我们可以向上抽取:
属性→Field;
行为→Method
所属→Package
类一般又是用来创建对象的,所以少不了显示或隐式的构造函数
构造函数→Constructor
作者:
聽聽我dē❤
时间:
2012-11-18 21:46
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-11-18 22:03
Class对象是用来创建类的常规对象的,当我们编译一个Java类就会同时产生一个与该类相对应的Class对象(保存在.class文件中)。该Class对象中保存了创建对象所需的所有信息。
共有三种产生Class对象的方法下面分别说明之:
1.public static Class Class.forName("完整的类名") throws ClassNotFoundException;
public static Class forName(String name, boolean initialize,
ClassLoader loader) throws ClassNotFoundException
假若我们用Class.forName("");的方式获取Class对象,其实就相当于Class.forName("完整类名", true, this.getClass().getClassLoader())也就是说在默认情况下在产生Class对象的同时会对该Class对象进行初始化(若以前没有初始化过)。
2.public final Class getClass()
可以通过任何实例对象来引用该方法来获取相应的Class对象。使用此种方式的前提是我们需要产生相应的实例对象。
3.类名.class 此种方式产生Class对象较前两种简单,无需第一种还要进行异常处理(在编译期就进行错误的检查了)。此种方式不会自动初始化该Class对象。初始化被延迟到对静态方法(包括构造方法)或非常数静态域进行首次引用时才进行。
作者:
ssx0101
时间:
2012-11-18 22:14
我觉得是类名、类属性类型和名称、类静态常量、类静态块、等等。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2