反射学习总结

反射:根据现有对象倒推类的组成

最核心:Class类

任何一个类在JVM中都有唯一的一个class对象,此对象记录该类的组成结构,当类加载时由JVM产生,用户只能取得此对象无法创建

要想在Java中应用反射,首先取得该类的class对象。

三种获取Class对象的方式:
1.调用Object提供的getClass()方法
2.类名称.class
3.调用Class类提供的静态方法Class.forName(类的全名称);

拿到一个类的class对象后的操作:

1.创建该类的新对象
public T newInstance():使用的是类中无参构造进行对象的创建

2.取得包名,父类,父接口信息
Package:描述一个类的包信息
Class类提供的getPackage()方法

取得一个类的父类信息:Class
Class类提供的getSuperClass()方法

取得一个类所有父接口
Class类提供的getInterfaces():Class[]

3.取得构造方法 普通方法,普通属性
Constructor:描述一个类的构造方法
取得指定参数构造方法
Class类提供的getConstructor(参数):只能取得权限为public的构造方法
Clas类提供的getDeclaredConstructor(参数):可以取得类中所有构造方法,与权限无关

取得所有构造方法
Class类提供的getConstructors():只能取得权限为public的构造方法
Class类提供的getDeclaredConstructors():可以取得类中所有的构造方法,与权限无关

创建新对象:
Constructor类提供的
public T newInstance(Object … initargs)
若类中没有无参构造,或者无参构造的权限不是public权限,则只能调用Constructor类提供的newInstance方法使用有参构造来实例化对象

Method:描述一个类的普通方法
反射调用普通方法 Method是一个类
取得类中指定名称与参数的普通方法
public Method getMethod(String name,Class<?>… parameterTypes)

public Method getDeclaredMethod(String name,Class<?> … parameterTypes)

取得类中所有普通方法
public Method[] getMethods() throws SecurityException:取得本类以及父类中所有权限为public的普通方法(包含静态方法)

public Method[] getDeclaredMethods() throws SecurityException
只能取得本类中所有方法(包含private方法)Method[] getDeclaredMethods() 返回 Class 对象表示的类或接口的所有已声明的方法数组,但是不包括从父类继承和接口实现的方法。

Method类提供的反射调用普通方法
public Object invoke(Object obj,Object … args) obj类的实例化对象 args普通方法参数

**Field:**描述一个类的普通属性 Field是一个类
与Method一样
a.取得类中指定名称属性
public Field getField(String name)
public Field getDeclaredField(String name)

b.取得类中所有属性
public Field getFields()throws SecurityException
public Field getDeclaredFields()throws SecurityException

c. Field类提供的设置与取得值方法

/**
*设置属性值
*obj类的实例化对象
*value要设置的值
*/
public void  set(Object obj,Object value)
/**
*取得属性值
*obj是类的实例化对象
*/public Object get(Object obj)
/**
*取得属性类型
*/
public Class<?> getType()

动态破坏封装(反射特性)—在一次JVM进程中只能通过反射调用
Constructor、Method、Field类都继承AccessibleObject类,此类中有一个破坏封装的方法
public void setAccessible(boolean flag)throws SecurityException

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值