博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
如何使用和理解java的反射机制
阅读量:7141 次
发布时间:2019-06-28

本文共 1983 字,大约阅读时间需要 6 分钟。

  先说下反射机制的概念:在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。

  那么我们再来说下反射机制实现需要用到的类,总共有四大类:Class,Constructor,Method,Field。

  其实实现反射需要如下几个步骤:

  1.获取Class类

  2.通过Class创建对象

  3.获取类中的方法

  4.获取类中的属性,属性值或类型

 

  首先来说一下获取Class的三种方法

public static void main(String[] args) {        //第一种方式 通过对象获取Class        Student student = new Student();        Class sc=student.getClass();    }

 

public static void main(String[] args) {        //第二种方式 直接通过类名获取        Class sc2=Student.class;  }

 

//第三种方式  通过类的全称获取(使用forName方法)        Class sc3=Class.forName("com.java.Student");  //其实就是这个类所在的包的路径

 

  接下来通过Instance方法实例化对象

//使用newInstance方法来创建实例对象。        Student s1=(Student)sc.newInstance();     //这里需要强转一下,因为创建出来的的对象是Object类型的

  最后就是通过创建Field对象和Method对象来获取属性和方法(这里如果想要实现动态输入必须要使set方法的setAccessible方法为true

     Field f1=s1.getClass().getDeclaredField("name");   //获取方法中的name属性                Method getm1=s1.getClass().getDeclaredMethod("getName", new Class[]{}); //获取getname方法  这里的getName是可以修改成你想获取的方法        Method setm1=s1.getClass().getDeclaredMethod("setName", new Class[]{f1.getType()});//这里的fi.getType是为了获取setName输入时的类型        setm1.setAccessible(true);                //设置setm1是可访问的        setm1.invoke(s1, "abc");                //通过setm1输入值        System.out.println(getm1.invoke(s1, null));     //通过getm1获取值 这段代码是可以获取到你所输入的值,如果只是想要获取属性或方法的名字只需要前两行!

上面介绍的是获取单一属性方法的办法,

也可以获取整个类的所有属性和方法如下代码所示:

  Field []f = s1.getClass().getDeclaredFields();//获取方法中所有的属性        for(Field inputf :f){                        //输出所有的属性            System.out.println(inputf);        }           Method[] allmethod = s1.getClass().getDeclaredMethods();//获取类中所有的方法        for(Method inputm : allmethod){                            //输出所有的方法            System.out.println(inputm);        }

 

这就是使用反射机制的具体步骤。

最后总结如下:

我们通过整体代码可以知道,我们是可以通过用户的输入来调取某个类的某个方法或属性,或是获取某个类的所有方法或属性,这也就对应了解到了开头我们所说的反射的概念:动态获取信息以及动态调用对象方法的功能称为java语言的反射机制

 

转载于:https://www.cnblogs.com/XiaojianGo/p/7476124.html

你可能感兴趣的文章
简单的ISIS协议的路由重分发实验详解
查看>>
Python模块学习--shutil和hashlib和json
查看>>
Linux防火墙iptables学习笔记(一)入门要领
查看>>
xshell 秘钥配对
查看>>
saltstack之SLS文件
查看>>
Redhat linux下cvs的安装配置
查看>>
cxgrid合并值相同的某列
查看>>
增量备份和差异备份的区别
查看>>
纯JS操作获取桌面路径方法
查看>>
thinkphp数据库添加表单提交的数据
查看>>
Hibernate事务属性
查看>>
OVS local network 连通性分析 - 每天5分钟玩转 OpenStack(132)
查看>>
反编译工具jad简单用法
查看>>
无法获取网关MAC地址表/radware备机流量——在不断的应急中提高
查看>>
iOS上使用自定义ttf字体
查看>>
关于CentOS/RHEL 7.x的yum组安装错误的解决方案
查看>>
通过PowerShell轻松转换VHD文件到VHDX格式
查看>>
OLTP应用之MySQL架构选型
查看>>
[Unity插件]LitJson杂谈
查看>>
调节effective_io_concurrenc优化PostgreSQL bitmap index scan性能
查看>>