javaweb-codereview 学习记录-4
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javaweb-codereview 学习记录-4,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2494字,纯文字阅读大概需要4分钟。
内容图文
![javaweb-codereview 学习记录-4](/upload/InfoBanner/zyjiaocheng/646/ae163ae706f84707aa4612a813873a1d.jpg)
反射java.lang.Runtime
之前在p牛的知识星球中也学过反射机制调用Runtime来执行命令时需要用getruntime来返回Runtime类的实例,因为Runtime类设计是单例模式,并且该类的构造方法是私有的,因此无法直接通过newinstance来实例化该类,因此除了通过getRuntime来返回类的实例来调用该类的方法外,还可以通过反射直接获取该类的构造方法并且设置访问属性来实例化该类。
import sun.misc.IOUtils; import java.io.InputStream; import java.lang.reflect.Constructor; import java.lang.reflect.Method; public class reflect_runtime { private static Object cmd="calc"; public static void main (String args[]) throws Exception { // 获取Runtime类对象 Class runtimeClass1 = Class.forName("java.lang.Runtime"); // 获取构造方法 Constructor constructor = runtimeClass1.getDeclaredConstructor(); constructor.setAccessible(true); // 创建Runtime类示例,等价于 Runtime rt = new Runtime(); Object runtimeInstance = constructor.newInstance(); // 获取Runtime的exec(String cmd)方法 Method runtimeMethod = runtimeClass1.getMethod("exec", String.class); // 调用exec方法,等价于 rt.exec(cmd); Process process = (Process) runtimeMethod.invoke(runtimeInstance, cmd); } }
上面的代码注释已经解释的非常清楚了,此时可以通过class类型对象的getDeclaredConstructor()返回类的无参数构造方法,然后再通过setAccessible(true)来修改该构造方法的访问属性,从而方便接下来通过该构造器来newInstance该类的实例。
而这里getRuntime返回的就是该类的实例
getConstructor和getDeclareConstructor都可以获得类的构造方法,区别是后者可以拿到类的私有构造方法,而前者不行,所以一般来说要拿到类的构造方法都用前者,当然如果一个类有多个构造方法,那么取其构造方法时可以加上其方法的入口参数类型,和反射调用函数较为类似,那么getDeclareConstructors就可以获得类的所有的构造函数,返回为数组,就可以进行更多操作。
反射调用类方法
这一点在p牛的知识星球中也有,通过class类型的对象来调用类的方法,当然这里也有两种方式,getMethod和getDeclareMethod都能够获取到类成员方法,区别在于getMethod只能获取到当前类和父类
的所有有权限的方法(如:public修饰的方法),而getDeclareMethod能获取到当前类的所有成员方法(不包含父类)。
通过Method.invoke()反射调用方法时,invoke函数的第一个参数一般为反射调用的类的实例,第二个开始即为传入的参数,但是如果调用的是类的静态方法,则第一个参数可以为null,因为调用类的静态方法不需要实例化该类。
反射调用成员变量
通过getDeclaredField就能够拿到该类所有的成员变量。
getField
和getDeclaredField
的区别同getMethod
和getDeclaredMethod
获取成员变量值:
Object obj = field.get(类实例对象);
修改成员变量值:
field.set(类实例对象, 修改后的值);
同理这里修改类似privite修饰的变量时也可以使用setAccessible来修改访问权限
内容总结
以上是互联网集市为您收集整理的javaweb-codereview 学习记录-4全部内容,希望文章能够帮你解决javaweb-codereview 学习记录-4所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。