反射

本文目录

1 Class类

2 反射

 

1 Class类

1.1 引用方式

1.1.1 Class引用

Class c1= ClassDemo.class;
Classc2= Class.forName("demo.cla.ClassDemo");

1.1.2 泛化Class引用

通过泛化可以指定类型,只有满足要求的类型,才可以赋值。

Class<ClassDemo> c1 = ClassDemo.class;
Class<? extends ClassDemo> c1 = ClassDemoChild.class;
Class<?> c2 = Class.forName("demo.cla.ClassDemo");

1.1.3 引用方式区别

在使用某个类之前,需要一些准备工作,包含三个步骤:

(1)加载:类加载器查找字节码(.class文件)并从中创建一个Class类的对象。

(2)链接:验证字节码,为静态域分配空间。

(3)初始化:执行静态初始化器或静态初始化块。

 

通过.class方式获得一个Class对象引用时,不会执行初始化步骤。初始化会被延迟到对静态域进行首次引用时才执行。

 

通过Class.forName(String className)方式获得一个Class对象引用时,会执行初始化步骤。

 

实际上,Class.forName另一个重载方法,可以指定是否执行初始化步骤,而Class.forName(String className)也是调用这个重载方法并设置执行初始化步骤。

 

1.2 常用方法

// 获取一个指定类的Class对象
Class c = Class.forName(String className);

// 获取类的全名(含包名)
c.getTypeName();

// 获取类的类名(不含包名)
c.getSimpleName();

// 判断obj对象是否属性指定类型或其子类型,效果相当于 obj instanceof className
c.isInstance(Object obj);

// 将obj对象强制转化为指定类型
c.cast(Object obj);

// 创建一个指定类的实例对象
c.newInstance();

// 获取所有构造方法
Constructor[] ctors = c.getConstructors();

// 获取符合给定参数列表的构造方法
Constructor ctor = c.getConstructor(Class…);

// 获取所有方法
Method[] methods = c.getMethods();

// 获取符合给定名称和参数列表的方法
Method method = c.getMethod(StringmethodName, Class…);

// 获取所有属性
Fields[] fields = c.getFields();

// 获取指定名称的属性
Field field = c.getField(String fieldName);

 

2 反射

2.1 Constructor

// 获取符合给定参数列表的构造方法
Constructor ctor= c.getConstructor(int.class, int.class);
// 通过构造方法创建一个对象
Object obj = ctor.newInstance(1,2);

 

2.2 Method

// 获取符合给定名称和参数列表的方法
Method method = c.getMethod("show", int.class, int.class);
// 通过指定的对象调用当前方法
method.invoke(obj, 1, 2);

 

2.3 Field

// 获取指定名称的属性
Field field = c.getField("num1");
 
// 获取指定的对象的属性(不指定类型)
Object valueObj = field.get(obj);
// 获取指定的对象的属性(指定类型)
Object valueInt = field.getInt(obj);
 
// 设置指定的对象的属性值(不指定类型)
field.set(obj, 100);
// 设置指定的对象的属性值(指定类型)
field.setInt(obj, 200);

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值