Java基础反射---并没那么难系列【三】

举报
baidaguo 发表于 2022/05/26 00:16:45 2022/05/26
【摘要】 1.发射概述 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为ja...

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

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。