Java基础反射---并没那么难系列【三】
1.发射概述
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
2.反射的使用
本文只讲具体的一个方法使用 实例可参照本文:反射
2.1.获取Class类的对象的三种方式
2.1.1.方式一
源代码时期 -> .class文件还没有加载到内存中.
Class.forName(“类的全限定类名”); Class.forName(“com.demo.Student”)
2.1.2.方式二
类加载时期ClassLoader -> 类名.class
2.1.3.方式三
Runtime运行期 -> 对象.getClass(); 来获取对象所在类的class对象
2.2.使用反射获取多个参数构造方法并使用+使用反射获取私有构造方法并使用
这里我们两个一起说
2.2.1.方式一(getXXX/getDeclaredXXX)
获取构造器 -> 构造方法的参数列表来进行判断具体要获取哪个的.
public Student(String name,int age){}
getDeclaredConstructor(String.class,int.class)
- 1
- 2
2.2.2.方式二(getXXXs/getDeclaredXXXs)
a.获取所有被public修饰的构造方法.
b.获取所有的构造方法
2.2.3.方式三(Constructor -> 构造器对象)
newInstance("张三",19);
- 1
2.2.4.方式四(暴力反射)
通过Constructor对象的setAccessible(true)设置暴力反射.
2.3.使用反射获取不同访问修饰的成员变量并使用
2.3.1.方式一(getXXX/getDeclaredXXX)
a.根据成员变量名进行成员变量对象(Filed)的获取,只能获取public修饰的.
b.根据成员变量名进行成员变量对象(Filed)的获取,可以获取任意修饰符修饰的成员变量对象.
2.3.2.方式二(getXXXs/getDeclareds)
a.获取所有被public修饰的成员变量对象.
b.获取所有的成员变量对象.
2.3.3.方式三(Filed -> 成员变量)
a.获取成员变量的值(get(Object o); -> 获取对象o的这个成员变量的值)
b.设置成员变量的值(set(Object o,Object value) -> 参数1:指定要被设置成员变量的对象,参数2:具体设置的值)
2.3.4.方式四(设置暴力反射)
通过Filed对象的setAccessible(true)设置暴力反射
2.4.使用反射获取带参带返回值的方法使用
2.4.1.方式一(通过什么参数去获取指定的成员方法)
方法名+参数列表
2.4.2.方式二
public void show(String name){}
public void method(String name){}
- 1
- 2
2.4.3.方式三
cls.getDeclaredMethod("method",String.class)
- 1
2.4.4.方式四
Method -> 要调用成员方法就必须指定哪个对象调用成员方法
2.4.5.方式五
method.invoke(Object o,Object...)
- 1
2.5.使用反射越过泛型检查
暴力反射
2.6.使用反射运行配置文件指定内容
2.6.1.方式一(getXXX/getDeclaredXX)
a.根据成员变量名进行成员变量对象(Filed)的获取,只能获取public修饰的.
b.根据成员变量名进行成员变量对象(Filed)的获取,可以获取任意修饰符修饰的成员变量对象.
2.6.2.方式二(getXXXs/getDeclareds)
a.获取所有被public修饰的成员变量对象.
b.获取所有的成员变量对象.
文章来源: baidaguo.blog.csdn.net,作者:白大锅,版权归原作者所有,如需转载,请联系作者。
原文链接:baidaguo.blog.csdn.net/article/details/118795066
- 点赞
- 收藏
- 关注作者
评论(0)