前言
前面总结了,java反射的一些函数的相关用法,本篇主要总结如何利用这些函数来构造执行函数。
重要方法
newInstance()
该方法属于
Class
类,执行后返回一个
Object
,可以利用这个方法来实例化对应的类,作用就是调用这个类的无参构造函数。但要求要实例化的类必须要有无参构造函数,并且这个构造函数不是私有的。
Runtime类的分析
Runtime run = Runtime.getRuntime();//获取 Runtime 对象
run.exec("calc");//执行calc命令弹出计算器
getMethod()
该方法可获取一个
Method
对象,即获取类中的方法,通常要和
invoke()
方法一起使用,这里重点关注下它的各项参数
Class clazz = Class.forName("java.lang.Runtime");
Method cmd = clazz.getMethod("exec", String.class);
invoke()
invoke()
方法用于执行
getMethod
获取的方法,看看它的相关参数
第一个参数是函数所在的 类对象 ,第二个参数是所执行的函数的对象参数
Runtime run = Runtime.getRuntime();//获取Runtime对象
Class clazz = Class.forName("java.lang.Runtime");
Method cmd = clazz.getMethod("exec", String.class);
cmd.invoke(run, "calc");//执行函数
如果执行的方法是静态方法,那么
invoke
的第一个 obj 参数将被忽略
比如我们要执行上面所说的
Runtime
类中的静态方法
getRuntime()
去获取对象
Class clazz = Class.forName("java.lang.Runtime");
//调用静态方法getRuntime()获取Runtime对象
Runtime run = (Runtime) clazz.getMethod("getRuntime").invoke(null);//调用的是静态方法,invoke()里参数随便写一个就行,会忽略第一个参数
run.exec("calc");
等价于
Runtime.getRuntime().exec("calc");
利用反射执行命令
总结上面的
getMethod
和
invoke
,大白话说就是我们一般这个样执行函数
Object.Method(arg1, arg2, ...)
,或执行静态方法
Class.Method(arg1, arg2, ...)
用反射就是
Method.invoke(Object, arg1, arg2, ...)
,
Method.invoke(Class, arg1, arg2, ...)
//获取 Runtime 类