Java学习——反射

本文详细介绍了Java反射机制,包括如何获取和操作类的成员变量、构造方法,以及利用Class对象和Proxy类实现动态代理,以实现代码的动态扩展和功能增强。
摘要由CSDN通过智能技术生成

反射:

反射允许对成员变量,成员方法和构造方法的信息进行编程访问

成员变量:获取修饰符、获取名字、获取类型、赋值/获取值

构造方法:获取修饰符、获取名字、获取形参、创建对象

成员方法:获取修饰符、获取名字、获取形参、获取返回值、抛出的异常、获取注解、运行方法

获取class对象的三种方式:

1.Class.forName("全类名"),源代码阶段,全类名 = 包名 + 类名,最为常用的方法

2.类名.class,加载阶段 一般更多的是当作参数进行传递

3.对象.getClass(),运行阶段,当我们已经有了这个类的对象时才可以使用

利用反射获取构造方法:

Class类中用于获取构造方法的方法:

Constructor<?>[] getConstructors():返回所有公共构造方法对象的数组

Constructor<?>[] getDeclaredConstructors():返回所有构造方法对象的数组

Constrcutor<T> getConstructor(Class<?> ... parameterTypes):返回单个公共构造方法对象

Constructor<T> getDeclaredConstructor(Class<?> ... parameterTypes):返回单个构造方法对象

Constructor类中用于创建对象的方法

T newInstance(Object ... initargs):根据指定的构造方法创建对象

setAccessible(boolean flag):设置为true,表示取消访问检查

利用反射获取成员变量:

Class类中用于获取成员变量的方法

Field[] getFields():返回所有公共成员变量对象的数组

Field[] getDeclaredFields():返回所有成员变量对象的数组

Field getField(String name):返回单个公共成员变量对象

Field getDeclaredField(String name):返回单个成员变量对象

Field类中用于创建对象的方法

void set(Object obj,Object value):赋值

Object get(Object obj):获取值

利用反射获取成员方法:

Class类中用于获取成员方法的方法

Method[] getMethods():返回所有公共成员方法对象的数组,包括继承的

Method[] getDeclaredMethods():返回所有成员方法对象的数组,不包括继承的

Method getMethod(String name,Class<?>... parameterTypes):返回单个公共成员方法对象

Method getDeclaredMethod(String name,Class<?>... parameterTypes):返回单个成员方法对象

Method类中用于创建对象的方法:

Object invoke(Object obj,Object...args):运行方法

        参数一:用obj对象调用该方法

        参数二:调用方法传递的参数

        返回值:方法的返回值

反射的作用:

1.获取一个类里面的所有信息,获取之后执行其他的业务逻辑

2.结合配置文件,动态的创建对象并调用方法

动态代理:

可以无侵入式的给代码增加额外的功能,可以将所有想要被代理的方法定义在接口当中,后面的对象和代理需要实现同一个接口,接口中就是被代理的所有方法

Java.lang.reflect.Proxy类提供了为对象产生代理对象的方法:

public static Object newProxyInstance(ClassLoader loader,Class<?>[] interface,InvocationHandler h):

        参数一:用于指定用哪个类加载器去加载生成的代理类

        参数二:指定接口,这些接口用于指定生成的代理长什么,也就是有哪些方法

        参数三:用来指定生成的代理对象要干什么事情

                new InvocationHandler{

                        public Object invoke(Object proxy,Method method,Object[] args) throws Throwable{

                        参数一:代理的对象

                        参数二:要运行的方法

                        参数三:调用该方法时传递的实际参数

                        }        

                }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值