通过反射访问private的属性或方法
package reflect;import java.lang.reflect.Field;
import java.lang.reflect.Method;public class PrivateCarReflect {public static void main(String[] args) throws Throwable{//获取当前线程再获取类加载器ClassLoader loader = Thread.currentThread().getContextClassLoader();//通过类加载器获取我们想操作的类Class clazz = loader.loadClass("reflect.PrivateCar");//类转换一下PrivateCar pcar = (PrivateCar) clazz.newInstance();//field场地,declared宣告,//field用于获取字段Field colorFld = clazz.getDeclaredField("color");//取消java语言访问检查以访问private变量colorFld.setAccessible(true);colorFld.set(pcar, "红色");Method driveMtd = clazz.getDeclaredMethod("drive");//取消java语言访问检查以访问protected方法driveMtd.setAccessible(true);driveMtd.invoke(pcar, (Object[])null);}
}
//AccessibleObject 类是 Field、Method 和 Constructor 对象的基类。
public class AccessibleObject implements AnnotatedElement { /* * 1、实现了AnnotatedElement对注解支持的相关方法 * 2、提供访问控制 / void setAccessible(boolean flag) 设置该对象(Field,Constructor,Method)是否可访问 boolean isAccessible() 该对象是否可访问 void setAccessible(AccessibleObject[] array, boolean flag) 设置这一组对象(Field,Constructor,Method)是否可访问 }
public interface Member{ public static final int PUBLIC = 0; //标识类或接口的所有已声明成员的集合。 public static final int DECLARED = 1; //标识类或接口的所有公共成员(包括继承成员)的集合。 public Class<?> getDeclaringClass();// 所在类 public String getName(); //返回此 Member 表示的底层成员或构造方法的简单名称。 public int getModifiers(); //作为整数返回由此 Member 所表示的成员或构造方法的 Java 语言修饰符。 public boolean isSynthetic(); //如果此成员是编译器引入的,则返回 true;否则,返回 false。 }
public final class Field extends AccessibleObject implements Member{ // 1.字段的设值和取值 ,对于静态属性,obj传null set(Object obj, Object value) setXX(Object obj, Object value) ,比如setInt,setBoolean Object get(Object obj) getXX(Object obj) ,比如getInt,getBoolean // 2.字段上注解的获取 getDeclaredAnnotations() getAnnotation(Class<T> annotationClass); // 3.字段类型 Type getGenericType(); Class<?> getType(); // 4.字段修饰符 int modifer=field.getModifiers(); String modify = Modifier.toString(modifiers); // 5.字段名称 String getName();
}
参考博客:
转载于:https://www.cnblogs.com/wzdnwyyu/p/11082242.html
通过反射访问private的属性或方法相关推荐
- Vue父组件访问子组件属性和方法、父子组件双向绑定(两种方法)
Vue父组件访问子组件属性和方法.父子组件双向绑定(两种方法) 1. 使用vue-cli创建项目 目录结构如下图: 2. 编写代码 src/components/HelloWorld.vue < ...
- 关于“继承, 子类拥有父类非private的属性和方法“
我们以前经常看到这么一句话: "继承, 子类拥有父类非 private 的属性和方法."; 但是我们又会经常看到这样的代码 父类: public class People {pr ...
- java反射访问室友属性_如何与家人,室友和客人共享HomeKit访问权限
java反射访问室友属性 What's the point of having a house of the future if your family members, roommates, or ...
- 访问对象的属性和方法
class Person(object):name = ""age =0height = 0weight = 0def run(self):print("run" ...
- 【反射机制】Java中的反射机制,使用反射机制创建对象、访问属性、方法、构造方法等
这篇文章主要是整理了Java中的反射机制,包括:反射机制概念.反射机制访问构造方法.反射机制访问普通方法.反射机制访问属性,反射机制访问修饰符. 目录 一.反射机制概念 二.反射机制使用 (1)加载C ...
- 面试官:private修饰的方法可以通过反射访问,那么private的意义是什么?
欢迎关注方志朋的博客,回复"666"获面试宝典 Java,在一个类中,为了不让外界访问到某些属性和方法,通常将其设置为private,用正常的方式(对象名.属性名,对象名.方法名) ...
- java this关键字表示当前对象,可以访问属性、方法、构造方法
this关键字的三种访问方式:属性.方法.构造方法 1.访问属性 为了命名的规范,利用this关键字区分了属性与局部变量 public class Persion {String name;char ...
- 【面试题】Vue2为什么能通过this访问到data、methods的属性或方法
在我没接触vue之前我不着调this是啥压根就没有接触过,在我学过了vue之后我知道了this,那时候理解的this就是你要使用data中的属性或调用methods中的方法等其他东西都要用this去调 ...
- java反射机制调用带参数的方法_Java反射机制:跟着代码学反射
1. 前言 在OOP的世界里,万物皆对象.也就是说,我们可以将任何东西抽象成一个对象. 比如人,可以抽象成一个Person类,通过new Person()来实例化一个对象:再比如鸭子,可以抽象成一个D ...
- 趣味教程:从女娲造人谈类、属性、方法及实例
前言:相信大家都听说过女娲造人的故事,不过细节可能不会太清楚,我现在略述如下,您可要仔细听哦,这和我们今天要聊的主题有莫大的关系呀. 女娲是一个人身龙尾的女神.盘古开天辟地以后,也就在天地间到处游历. ...
最新文章
- AI换脸鉴别率超99.6%,微软用技术应对虚假信息
- Intel Optane(tm) Memory Pinning 无法加载DLLiaStorAfsServiceApi.dll:找不到指定模块。(异常来自HRESULT:0x8007007E)。
- 当 高并发系统下 Redis 发生高延迟时,其内部到底发生了什么
- linux系统安装serv u,建立第一个可用的FTP服务器
- python中构造函数可以重载吗_python中的函数重载了吗?
- bzoj 1296: [SCOI2009]粉刷匠(DP+DP)
- 通过证书连接服务器的小命令
- element的表格中scope中的东西
- 高斯混合模型(GMM)和高斯过程回归(GPR)的学习
- 湖南成考新生如何查询学籍信息
- 聆秘2013手游渠道之争:四大战役谁主沉浮?
- 苦涩的技术我该怎么学?Akka 实战
- 信息学奥赛一本通:1026:空格分隔输出
- 常用二十六大学术搜素引擎
- K210入门,用wifi通讯
- 《求职》第四部分 - 操作系统篇 - 操作系统基础
- 计算机系导师推荐意见,就业推荐表上导师评语
- 用Latex输入微米(micron)或者微秒的方法
- indigo版本teb_local_planner常见编译问题
- 办理公司经营贷款需要什么条件呢?-民兴商学院