Class cls = ClassforName("comqfedua_reflectPerson");
Method[] allPublicMethods = clsgetMethods();
for (Method method : allPublicMethods) {
Systemoutprintln(method);
}
//暴力反射
//能够获取Person里面的private方法, 并且能够过滤掉从父类继承而来的方法
Method[] allMethods = clsgetDeclaredMethods();
for (Method method : allMethods) {
Systemoutprintln(method);
}
invoke(Object obj, Object args);
Object obj 这是底层调用该方法的类对象
the object the underlying method is invoked from
Object args 不定参数,是执行该放的参数列表,是Object类型
args is arguments used for method call
//向利用反射,创建一个当前类的对那个
Person p = (Person) clsgetConstructor(intclass, Stringclass)
newInstance(1, "狗蛋");
//获取一个指定的方法,需要的参数是方法的名字字符串和参数列表,
Method aPublicMethod = clsgetMethod("sleep", intclass);
Systemoutprintln("49" + aPublicMethod);
aPublicMethodinvoke(p, 15);
//获取一个静态方法
Method aPublicStaticMethod = clsgetMethod("eat", null);
aPublicStaticMethodinvoke(null, null);
//利用暴力反射获取一个私有化的成员方法
Method aPrivateMethod = clsgetDeclaredMethod("testPrivate", null);
aPrivateMethodsetAccessible(true);
aPrivateMethodinvoke(p, null);
第一种:通过forName()方法;
第二种:类class;
第三种:对象getClass()。
举例如下:
package
test;
public class Demo{
public static void
main(){
Class<> c1 = null;
Class<> c2 =
null;
Class<> c3 =
null;
//三种反射用实例化方式
try{
//最常用的一种形式
c1 =
ClassforName("testX");
}catch(ClassNotFoundException
e){
eprintStackTrace();
}
//通过Object类中的方法实例化
c2
= new X()getClass();
//通过类class实例化
c3 =
Xclass;
Systemoutprintln("类名:" + c1getName());
//得到类名
Systemoutprintln("类名:" + c2getName());
//得到类名
Systemoutprintln("类名:" + c3getName());
//得到类名
}
}
在Java中,可以使用反射机制来获取和调用类中的私有方法。以下是一段示例代码,用于演示如何通过反射获取和调用私有方法:
在上述代码中,首先创建了一个ReflectionDemo类的实例obj,然后使用getDeclaredMethod方法获取了名为voidFunction的私有方法,并将其封装到一个Method对象中。
由于该方法是私有的,需要使用setAccessible方法取消访问限制,才能够对其进行访问和调用。
最后,使用invoke方法调用该方法,并传入需要调用的对象作为参数。这里我们将obj作为参数传递给invoke方法,表示要对obj对象调用voidFunction方法。
需要注意的是,在使用反射调用私有方法时,需要小心使用,因为这种方式会绕过Java语言的访问控制机制,可能会对系统的安全性产生影响。
以上就是关于反射(方法)全部的内容,包括:反射(方法)、java中反射的三种方法是、通过反射获取 private voidfunction( ) () 方法并调用等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)