导航:首页 > 编程语言 > java反射获取私有属性

java反射获取私有属性

发布时间:2022-08-09 05:11:19

java里一个私有的属性如何在其他类里面进行访问

既然是私有属性就不建议直接访问的,一般会提供方法来访问私有属性,这样可以在方法中对属性的访问做一些控制。
当然也可以通过反射来直接访问。
我们准备一个包含私有属性的类
然后通过反射来访问属性,记得一定要加aField.setAccessible(true);这句代码,不然就不能访问私有属性。
不加aField.setAccessible(true);
加了aField.setAccessible(true);

② java反射机制怎么判断一个属性是否为私有属性

private,public类似与 WEB系统中管理员,普通用户权限 . 是一种权限安全机制 反射的主要目的并不在与看到私有方法,更重要的是能在运行时可以动态自查自己的结构,在开发某些功能时特别有用, 例如:(1)把XML节点自动映射后JAVA BEAN中.

③ java中私有属性可以通过反射获取,那设置成私有是不是没多大意思

私有、公有这些访问控制,主要是针对类的扩展或子类化设置的,针对现实世界的抽象和封装。

一般都是一些Web框架需要用反射,日常代码里面一般不用,用到的时候一般来说破坏了面向对象的特性。

④ java 中 父类写初始化代码 反射获取类中的所有属性 并按照某种逻辑赋值(我是为了初始化Spring中的Bean)

这种想法是不可能实现的,父类中是获取不到子类的属性的,你需要换一个思路解决问题。

⑤ java 怎么用反射访问私有变量

field2.setAccessible(true);
访问之前对访问的属性加上上面这句话才行。

⑥ java中,利用反射可以调用私有的属性,那么私有还有什么意义,求大神解答。

因为现实世界中,都没有绝对的限制,而且有很多奇葩的需求,说不定什么时候就需要破坏原有的结构,反射在特定条件下是必要的

⑦ java反射访问私有方法的的问题

java的反射可以绕过访问权限,访问到类的私有方法和成员。可能这点会引起安全性的讨论。反射的使用帮助解决很多复杂的问题,其运行时的类型检查,动态调用,代理的实现等,反射为我们写程序带来了很大的灵活性,很多功能都是基于反射。
利用反射还可以访问内部类、匿名内部类的私有属性。
用java自带的java -private 类名 反编译命令可以查看类的完整定义。(参考think in java)
下面举例子说明。首先定义一个接口
Java代码
public interface Ref {
public void f();
}
public interface Ref {
public void f();
}
接口的实现类
Java代码
public class RefImpl implements Ref {
//实现接口方法
public void f() {
System.out.println("public method f()");
}

void g(String args){
System.out.println("package method g():" + args);
}

private void w(){
System.out.println("private method w()");
}
}
public class RefImpl implements Ref {
//实现接口方法
public void f() {
System.out.println("public method f()");
}

void g(String args){
System.out.println("package method g():" + args);
}

private void w(){
System.out.println("private method w()");
}
}
测试类
Java代码
public class TestRef {

public static void main(String[] args) {
Ref ref = new RefImpl();
System.out.println(ref.getClass().getSimpleName()); //RefImpl类型
ref.f(); //调用接口方法
// ref.g(); //向上转型后实现类添加的方法不能调用
if(ref instanceof RefImpl){
RefImpl ref1 = (RefImpl)ref; //类型识别后转型
ref1.g("zhouyang");
// ref1.w(); //私有方法不能访问
}

//通过反射调用方法
try {
Ref ref2 = new RefImpl();
Method m = ref2.getClass().getDeclaredMethod("f");
Method m1 = ref2.getClass().getDeclaredMethod("g", String.class);//有参的方法
Method m2 = ref2.getClass().getDeclaredMethod("w");
System.out.println("==============");
m.invoke(ref); //调用方法f()
m1.invoke(ref, "yangzhou");

m2.setAccessible(true);///调用private方法的关键一句话
m2.invoke(ref);
} catch (Exception e) {
e.printStackTrace();
}

//java的javap反编译能够查看类的信息,-private 开关能够打开所有信息
//javap -private 类名 类必须是编译成.calss 文件

//利用反射访问私有成员,改变私有成员值,但是final域可以访问不可改变
PrivateField pf = new PrivateField();
// ps.ss; //私有成员不能访问
//打印原来的成员值
pf.print();
try {
//反射访问和改变原来值
Field[] f = pf.getClass().getDeclaredFields();
for(int i=0;i<f.length;i++){
f[i].setAccessible(true);
System.out.println(f[i].getType());//打印字段类型
System.out.println(f[i].get(pf)); //打印值
if("ss".equals(f[i].getName())){
f[i].set(pf, "hehe"); //修改成员值
}else{
f[i].setInt(pf, 55);
}

}
//重新打印修改后的成员值,final域值不变
pf.print();
} catch (Exception e) {
e.printStackTrace();
}
/*打印输出的结果
* RefImpl
public method f()
&nb

⑧ Java反射 在只知道类名的情况下,怎样给其中的私有属性赋值

利用反射能

//假设类名为A
//实例化类
Ap=newA();
//获取class
Classc=p.getClass();
//获取该类所有的字段
Field[]fields=c.getDeclaredFields();
//遍历赋值
for(inti=0;i<fields.length;i++){
StringfiledName=fields[i].getName();
//AccessibleTest类中的成员变量为private,故必须进行此操作
fields[i].setAccessible(true);
//判断类型
Class<?>type=fields[i].getType();
//获取字段类型
StringtypeName=type.getName();
System.out.println(type.getName());

//对字段进行赋值第一个参数为对象引用第二个参数为要附的值

//如果为字符串类型
if("java.lang.String".equals(typeName)){
fields[i].set(p,"1");
}
//如果为日期类型
elseif("java.util.Date".equals(typeName)){
fields[i].set(p,newDate());
}
else{
fields[i].set(p,1);
}

}

//楼主我只是简单的写了下。可能还需要判断字段名称以及其他类型什么的。



最后希望楼主多看看java 文档。

⑨ java反射取对象属性值 不是通过get方法取值

反射不是通过get取值的,是通过该对象的信息,比如说名称、内存地址等来访问类,方法,属性等,可以获取任意对象的信息,但不能获得私有属性(private String s=“sd”;)的值,切记

推荐《JAVA核心技术》这本书会对你有帮助的

⑩ java,反射里,关于反射机制下列说法错误的是( )

B、反射机制指的是在程序编译期间,通过“.class”文件加载并使用一个类的过程。

假如有两个程序员,一个程序员在写程序的时候,需要使用第二个程序员所写的类,但第二个程序员并没完成他所写的类。这是不能通过编译的。利用Java反射的机制,就可以让第一个程序员在没有得到第二个程序员所写的类的时候,来完成自身代码的编译。

Java中编译类型有两种:

静态编译:一次性编译。在编译的时候把你所有的模块都编译进去。

动态编译:按需编译。程序在运行的时候,用到那个模块就编译哪个模块。

如果不理解,那么给个业务场景帮助你理解:比如开发一个阅读器,支持txt,pdf,doc三种格式。我们把读txt,读pdf,读doc定义为三个功能模块。

阅读全文

与java反射获取私有属性相关的资料

热点内容
什么路由可以刷机做打印机服务器 浏览:5
电脑怎么找到云服务器 浏览:871
微信怎么发应用app 浏览:776
花生壳dns服务器地址 浏览:648
squad服务器一般什么时候人多 浏览:479
程序员战门课 浏览:474
config保存服务器地址 浏览:317
预订网吧座位的app叫什么 浏览:416
香港服务器主机地址 浏览:640
网店美工pdf 浏览:447
一堆文件夹怎么弄出来 浏览:743
博途如何编译硬件 浏览:418
fortran程序pdf 浏览:504
电池消耗算法 浏览:394
服务器中断连接怎么处理 浏览:222
上世纪互联网不发达程序员很难 浏览:841
语音识别android开源 浏览:762
地埋式垃圾压缩中转站 浏览:902
apachehttpdlinux 浏览:944
快递员中通app预付款是什么 浏览:843