导航:首页 > 编程语言 > java反射私有方法

java反射私有方法

发布时间:2022-11-25 18:56:35

java反射机制怎样调用类的私有方法

为了一看就懂,请看下面的示例(假设调用 MyTest类的私有方法 privateMethod()):

publicclassReflectionTest{

(Objectobj)throwsSecurityException,NoSuchMethodException,IllegalArgumentException,IllegalAcces***ception,InvocationTargetException{//核心代码加粗
Classcls=obj.getClass();
//获得类的私有方法
Methodmethod=cls.getDeclaredMethod("privateMethod",null);
method.setAccessible(true);//没有设置就会报错
//调用该方法
method.invoke(obj,null);
}
publicstaticvoidmain(Stringargs[])throwsSecurityException,IllegalArgumentException,NoSuchMethodException,IllegalAcces***ception,InvocationTargetException{

setObjectColor(newMyTest());
}
}
//测试类
classMyTest{

publicvoidsetMyTest(){
System.out.println("setMyTest");
}
/**
类的私有方法
**/
privatevoidprivateMethod(){
System.out.println("调用了privateMethod");
}

}

⑵ java反射,调用private的方法

soeasy
Stringpath=“com.test.B”
Classclazz=Class.forName(path);//获得b的反射
Bb=(B)clazz.newInstance();//前提是b类有个无参构造函数
Methodm=clazz.getDeclaredMehod("SetName",String.class);
m.setAccessible(true);//不做安全检查,你才可以去访问私有方法
m.invoke(b,"哈哈");

这里是给B里面的(下面这个方法进行调用赋值)
privatevoidSetName(Strings){}


psgetDeclaredMehod是对私有的方法进行调用要访问必须加setAccessible
getMehod是对通用方法进行调用,不用加setAccessible

⑶ 什么是java的反射

Java反射指的是对于任何的一个java类,我们都可以通过反射获取到这个类的所有属性和方法(包含私有的属性方法),使用java反射我们也可以调用一个对象的任何方法。
我们知道Java是一门面向对象编程的语言,我们编程的时候,经常会将类的属性进行封装,然后提供public方法进行属性的设置和获取。类的属性我们通常会设置成private的私有属性,为的就是保护对象属性不被随意的修改和访问。但是反射机制却恰恰相反,通过反射,我们可以获取到这些被保护的属性和方法,并且可以修改和访问他们。
在java中我们可以使用object对象的getClass();方法获得Class的对象classObject;语法格式为 Class classObject = object.getClass() ;可以根据Class对象的方法获取object对象的相关属性和方法;
获取object对象的名字可以使用 classObject.getName();获取类的名称,获取到的结果包含包的名称;
获取object对象的包名称,可以使用classObject.getPackage();获取包的名称;
获取object对象的所有public属性,可以使用classObject.getFields();方法,返回列表是属性类Field[]对象列表;
获取object对象所有属性,可以使用classObject.getDeclaredFields();方法,返回的是所有属性列表(包含private属性);
获取object对象某个特定的属性,可以使用classObject.getField( fieldName );可以根据属性名称获取属性类的对象;
获取object对象private属性,可以使用classObject.getDeclaredField( fieldName );根据属性名获取属性对象信息;
获取object对象public方法,使用classObject.getMethods();可以获取到方法类Method[]对象列表;
获取object对象某个特定的public方法,使用classObject.getMethod( funName , Class... parameterTypes);根据方法名和方法参数类型列表,可以获取到方法类的对象;
获取object对象所有方法(包含private方法);使用classObject.getDeclaredMethods();可以获取所有的方法对象列表;
获取object对象某个特定方法(包含private方法),使用classObject.getDeclaredMethod ( funName, Class... parameterTypes );根据方法名和方法参数类型列表,可以获取到类的特定方法(包含private方法);
获取object对象类中所有的public构造方法,可以使用classObject.getConstructors(); 获取到构造类Constructor的对象列表;
获取object对象类中某个特定的构造方法,可以使用classObject.getConstructor( Class... parameterTypes ); 根据参数类型列表,获取指定的构造函数对象;
获取object对象类中所有的构造方法(包含private),可以使用classObject.getDeclaredConstructors(); 获取到构造类Constructor的对象列表;
获取object对象类中某个特定的构造方法(包含private),可以使用classObject.getDeclaredConstructor( Class... parameterTypes ); 根据参数类型列表,获取指定的构造函数对象;

⑷ java反射机制可以调用到私有方法,是不是就破坏了JAVA的卦装性呢。

这是一个很值得探讨的问题,许多人接触反射时,对反射功能之强大都会抱有怀疑,感觉严重破坏了封装的性质。可是,什么是封装,什么是安全呢?
封装,是将具体的实现细节隐藏,而把功能作为整体提供给类的外部使用,也就是说,公有方法能够完成类所具有的功能。当别人使用这个类时,如果通过反射直接调用私有方法,可能根本实现不了类的功能,甚至可能会出错,因此通过反射调用私有方法可以说是没有任何用处的,开发人员没有必要故意去破坏封装好的类。从这点上看,封装性并没有被破坏。
所谓安全,如果意思是保护实现源码不被别人看见,那没有作用。不用反射也能轻易获取源码。
所以我以为反射机制只是提供了一种强大的功能,使得开发者能在封装之外,按照特定的需要实现一些功能。就好比核技术,虽然造核弹很危险吧,但造核电站还是很有用处的(这个比喻似乎不是很恰当,将就将就)。

曾经给朋友讨论过这个问题,感觉解释得不是很清楚,大家一起探讨探讨,看看怎样表述才能更容易理解:)

⑸ java有反射机制可以看到私有方法,为什么还要有private,public等之类的区别

  1. private,public类似与 WEB系统中管理员,普通用户权限 . 是一种权限安全机制

  2. 反射的主要目的并不在与看到私有方法,更重要的是能在运行时可以动态自查自己的结构,在开发某些功能时特别有用,

  3. 例如:(1)把XML节点自动映射后JAVA BEAN中.

  4. (2)批量操作带有接口的类的时

  5. (3)代理功能实现等....

  6. 楼主需要潜心修行才能大彻大悟啊

⑹ java中反射的三种方法是

第一种:通过forName()方法;

第二种:类.class;

第三种:对象.getClass()。

举例如下:

package
test;

public class Demo{

public static void
main(){

Class<?> c1 = null;

Class<?> c2 =
null;

Class<?> c3 =
null;

//三种反射用实例化方式

try{

//最常用的一种形式

c1 =
Class.forName("test.X");

}catch(ClassNotFoundException
e){

e.printStackTrace();

}

//通过Object类中的方法实例化

c2
= new X().getClass();

//通过类.class实例化

c3 =
X.class;

System.out.println("类名:" + c1.getName());
//得到类名

System.out.println("类名:" + c2.getName());
//得到类名

System.out.println("类名:" + c3.getName());
//得到类名

}

}

⑺ 请教java反射机制里可以调用私有方法吗

Method method=c.getDeclaredMethod(name);//可以调用类中的所有方法(不包括父类中继承的方法) Method method=c.getMethod(name);//可以调用类中有访问权限的方法(包括父类中继承的方法)

⑻ java反射调用private方法

Java程序不能访问持久化类的private方法,但是利用JAVA的反射机制可以实现调用,代码如下:

<spanstyle="font-size:14px;">
importjava.lang.reflect.InvocationTargetException;
importjava.lang.reflect.Method;
publicclassReflectDemo{
publicstaticvoidmain(String[]args)throwsException{
Methodmethod=PackageClazz.class.getDeclaredMethod("privilegedMethod",newClass[]{String.class,String.class});
method.setAccessible(true);
method.invoke(newPackageClazz(),"452345234","q31234132");
}
}
classPackageClazz{
privatevoidprivilegedMethod(StringinvokerName,Stringadb){
System.out.println("---"+invokerName+"----"+adb);
}
}
</span>
#程序输出结果为:---452345234----q31234132

⑼ java中怎么防止反射机制访问私有方法

java中有安全机制,对于管理私有方法(属性)的反射问题涉及到了这方面
我记得java中有个类还是配置叫SecurityManager,通过对jvm的配置来启用安全策略,然后在反射时进行权限检查

⑽ 反射机制访问私有方法代码异常"java.lang.ClassCastException"

Class clazz = loader.loadClass("com.baobaotao.reflect.PrivateCar");
PrivateCar pcar = (PrivateCar)clazz.newInstance(); // package com.testspring.reflect;

虽然类名相同,但包名不同,不是同一个类,所以不能转换。

Java中只有类的和包名完全相同,才是同一个类。

改为:
com.baobaotao.reflect.PrivateCar pcar = (com.baobaotao.reflect.PrivateCar)clazz.newInstance();
或者
Class clazz = loader.loadClass("com.testspring.reflect.PrivateCar");

阅读全文

与java反射私有方法相关的资料

热点内容
传奇引擎修改在线时间命令 浏览:105
php取域名中间 浏览:896
cad命令栏太小 浏览:830
php开发环境搭建eclipse 浏览:480
qt文件夹名称大全 浏览:212
金山云服务器架构 浏览:230
安卓系统笔记本怎么切换系统 浏览:618
u盘加密快2个小时还没有搞完 浏览:93
小米有品商家版app叫什么 浏览:94
行命令调用 浏览:434
菜鸟裹裹员用什么app 浏览:273
穷查理宝典pdf下载 浏览:514
csgo您已被禁用此服务器怎么办 浏览:398
打开加密软件的方法 浏览:156
云存储服务器可靠吗 浏览:967
2核1g的云服务器能带动游戏嘛 浏览:898
逆命20解压码 浏览:146
徐州办犬证需要下载什么app 浏览:1002
百保盾是什么样的app 浏览:699
文件和文件夹的命名规格 浏览:798