Java反射

一 Class类

1 Java的反射是指程序在运行期可以拿到一个对象的所有信息

2 反射的出现原因:为了解决在运行期,对一个实例一无所知的情况下,如何调用其方法。

3 反射方法:通过Class的实例获得class的信息

4 获取class的Class实例的方法:

1 直接通过一个class的静态变量class获取
2 通过实例变量提供的getclass()方法
3 知道class完整类名,通过静态方法Class.forame()获取

5 JVM动态加载特性:只有第一次用到一个类时,才将其加载到内存

6 JVM为每个创建的class和interface创建了Class实例来保存class和interface信息

7 通过反射可以直接修改字段的值

8 反射是非常规方法,会破会类的封装

9 invoke()的第一个参数是对象实例,第二个可变参数要与方法参数一致
如果获取的是静态方法,invoke()的第一个参数永远为null

10 多态
使用反射调用方法时,仍然遵循多态原则,总是调用实际类型的复写方法

二 调用构造方法

1 用反射来创建实例,通常使用Class提供的newInstance()方法,(此方法只能调用该类的public无参数构造方法)
Person p = person.class.newInstance()

三 获取继承关系

1 Class getSuperclass():获取父类类型;
Class[] getInterfaces():获取当前类实现的所有接口。

四 动态代理

1 class可以实例化,interface()不能实例化,interface的变量总是通过向上转型并指向某个实例的。

2 动态代理:在运行期动态创建某个interface的实例。

3 静态写法:先定义接口,再编写实现类,最后创建实例,转型为接口并调用。

4 动态代码:先定义接口,直接通过Proxy.newProxyInstance()创建一个接口对象

发布了6 篇原创文章 · 获赞 0 · 访问量 47
App 阅读领勋章
微信扫码 下载APP
阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 深蓝海洋 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览