Java 反射 - `Class` 类

6 篇文章 0 订阅

Java 反射 - Class

在程序运行期间, 系统始终为所有对象维护一个 运行时类型标识. 这个信息会跟踪每个对象所属的类. 虚拟机利用运行时类型信息选择要执行的正确的方法.

Class 类被用于访问这些信息.

Employee e;
...
Class cl = e.getClass();

Class 对象会描述一个特定类的属性.

获得 Class 对象的三种方法

public final native Class<?> getClass();

static Class<?> forName(String className) throws ClassNotFoundException;

Class class = T.Class; // T 为任意的 Java 类型, 也可以是 void

虚拟机为内一个类型管理一个唯一的 class 对象. ==> 可以用 == 运算符实现两个类对象的比较.

class Manager extends Employee { ... }

Employee e = new EMployee();
System.out.println(e.getClass() == Employee.class); //true

与 e instanceof T 不同, 如果 e 是某个子类的实例, 则测试失败.

class Manager extends Employee { ... }

Manager m = new Manager();
Employee e = new Employee();

e instanceof Empolyee; // true
e instanceof Manager; // false
m instanceof Employee; // true
m instanceof Manager; // true

e.getClass() == Employee.class; // true
e.getClass() == Manager.class; // false
// m.getClass() == Employee.class; // 编译不通过
m.getClass() == Manager.class; // true

如果有一个 Class 类型的对象, 可以用 getConstructor() 来获取构造函数, 然后用 getInstance() 方法创建对象.

java.lang.Class :: getConstrutor()

public Constructor<T> getConstructor(Class<?>... parameterTypes)
 throws NoSuchMethodException, SecurityException;

java.lang.reflect.Constructor :: newInstance()

public T newInstance(Object ... initargs)
     throws InstantiationException, IllegalAccessException,
            IllegalArgumentException, InvocationTargetException;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值