Class类

类的祖宗是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)








  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值