Class类

来源:互联网 发布:奇迹哥 知乎 编辑:程序博客网 时间:2024/05/29 02:25

类的祖宗是Class,对象的祖宗是Object,成员变量的祖宗是filed。

Class类是反射的基础。

Java程序在运行时,会一直对所有的对象进行所谓的运行时类型标识,这样才能选准正确的方法去执行,也就是俗称的后期绑定。Class类是一个特殊的类,每个类都有一个Class对象,用来封装一个对象和接口的运行时状态,包含了与类相关的信息。每当编写并且编译了一个类,一个Class类型的对象就会自动被创建,它被保存在.class文件中。它没有公共的构造方法,所以你不能显式地声明一个Class对象,它的对象是在加载类时由JVM和classLoader中的子系统自动构造的。每个类都有一个独一无二的Class对象。运行程序的时候,JVM 先检查是不是所要加载的类对应的Class对象已经被加载,如果还没有,那么就根据类名去找相应的.class文件,并且将其Class对象加载进去。

这样说起来,我觉得Class类有点像单例模式,因为每个类都有独一无二的Class对象。

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

既然Class类不能通过new的方法来创建对象,那么有什么方法可以获取Class对象呢?一共有3种方法可以。


1.用Object类自带的getClass方法。

比如

TestClass testClass;

Class  class = testClass.getClass();

2.使用Class类自身的静态方法forName(String className),还有一个重载方法需要指定classLoader

比如

Class class = Class.forName("TestClass");

或者

Class class = Class.forName("com.test.class.TestClass");

3.直接使用类名.class

注意,基本类型,数组,也有自己的Class对象,数组也有

比如

Class class = int.class;


一些常用的方法

1. public T newInstance() 

这是另外一个可以为类创建实例的方法。

x.getClass().newInstance(),这样的话就会创建一个和x一样类型的新的实例。


使用技巧

1.forName和newInstance一起使用,先创建一个字符串对象,然后根据这个字符串对象的值创建实例

Object object = Class.forName(string).newInstance();

2.因为class对象独一无二,所以可以通过比较

if( example.getClass() == Example.class)








原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 牙龈肿痛脸肿了怎么办 孕妇牙疼的厉害怎么办 智齿引起的牙疼怎么办 蛀牙了有个大洞牙痛怎么办 长了蛀牙牙疼怎么办 面饼表面长黑点怎么办 牙结石自己掉了怎么办 狗狗得了牙结石怎么办 牙结石掉了有洞怎么办 内衣的钩子会掉怎么办? 新胸罩肩带老掉怎么办 牙齿少了一小块怎么办 儿童牙齿有黑斑要怎么办 牙齿又黄又臭怎么办 大牙烂空了很臭怎么办 牙齿已经烂没了怎么办 牙齿已经蛀没了怎么办 牙齿整个蛀掉了怎么办 小孩恒牙长歪了怎么办 孩子换牙长歪了怎么办 9岁门牙磕松动了怎么办 牙齿摔断了一半怎么办 牙齿从根部断了怎么办 牙断了还有牙根怎么办 牙根断在牙龈里怎么办 后槽牙掉了一半怎么办 孩子门牙摔断了怎么办 2岁宝宝牙齿断了怎么办 小孩乳牙摔掉了怎么办 9孩子门牙磕断了怎么办 牙齿断了但没掉怎么办 大人门牙摔断了怎么办 兔子内牙太长了怎么办 牙齿整个摔断了怎么办 大门牙摔断了怎么办 23岁门牙磕断了怎么办 门牙齿断了一半怎么办 牙齿从中间裂开了怎么办 牙齿断了牙根还在怎么办 手指被兔子咬了怎么办 被家兔咬出血了怎么办