import operate425.demo.demo1.Student;import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;/*** 通过反射突破private访问修饰符获取私有和公共的属性,设置和获取值** @author silence*/
public class ClassFile {public static void main(String[] args) throws Exception {//获得字节码文件Class<?> clazz = Class.forName("operate425.demo.demo1.Student");// 通过私有的构造,获取类 私有的单个属性值// method1(clazz);//获取公共的属性值 设置value 并获取值//  method2(clazz);//获取所有的公共属性//  method3(clazz);//  获取所有公共的和私有的属性//    method4(clazz);}/*** 获取所有公共的和私有的属性** @param clazz clazz*/private static void method4(Class<?> clazz) {Field[] declaredFields = clazz.getDeclaredFields();for (Field df : declaredFields) {System.out.println(df);}}/*** 获取所有的公共属性** @param clazz clazz*/private static void method3(Class<?> clazz) {Field[] fields = clazz.getFields();for (Field f : fields) {System.out.println(f);}}/*** 获取公共的值** @param clazz clazz*/private static void method2(Class<?> clazz) throws NoSuchFieldException, NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException {//通过公共的带参构造器获得构造引用Constructor<?> constructor = clazz.getConstructor(String.class);//创建对象Student student = (Student) constructor.newInstance("张三");//获取属性值的对象引用Field password = clazz.getField("passwrod");//给属性设置值password.set(student, "这里是我设置的密码");//获取属性值String pas = (String) password.get(student);System.out.println(pas);}/*** 通过私有的构造,获取类 私有的属性值** @param clazz clazz* @throws Exception Exception*/private static void method1(Class<?> clazz) throws Exception {//获得私有无参构造器Constructor<?> constructor = clazz.getDeclaredConstructor();//私有的构造器必须临时修改访问修饰符检测constructor.setAccessible(true);//通过构造器创建对象Student student = (Student) constructor.newInstance();//通过属性名, 获得属性引用Field username = clazz.getDeclaredField("username");//调用私有的属性 必须临时修改访问修饰符检测username.setAccessible(true);//获得属性应用的值String name = (String) username.get(student);//输出System.out.println(name);}
}

通过反射突破private访问修饰符获取私有和公共的属性,设置和获取值相关推荐

  1. 深入浅出OOP(五): C#访问修饰符(Public/Private/Protected/Internal/Sealed/Constants)

    访问修饰符(或者叫访问控制符)是面向对象语言的特性之一,用于对类.类成员函数.类成员变量进行访问控制.同时,访问控制符也是语法保留关键字,用于封装组件. Public, Private, Protec ...

  2. java 修饰符 访问控制符_Java访问修饰符(访问控制符)

    Java 通过修饰符来控制类.属性和方法的访问权限和其他功能,通常放在语句的最前端.例如: public classclassName { // body of class } private boo ...

  3. Java访问修饰符(访问控制符)

    Java 通过修饰符来控制类.属性和方法的访问权限和其他功能,通常放在语句的最前端.例如: public class className { // body of class } private bo ...

  4. java 接口中变量修饰符,Java的访问修饰符与变量的作用域讲解

    Java访问修饰符(访问控制符) Java 通过修饰符来控制类.属性和方法的访问权限和其他功能,通常放在语句的最前端.例如: ? Java 的修饰符很多,分为访问修饰符和非访问修饰符.本节仅介绍访问修 ...

  5. java 修饰符 访问控制符_《Java基础知识》Java访问修饰符(访问控制符)

    Java 通过修饰符来控制类.属性和方法的访问权限和其他功能,通常放在语句的最前端.例如: public classclassName {//body of class }private boolea ...

  6. C#的5种访问修饰符

    C#的5种访问修饰符 1.public 公共的 public 允许一个类将其成员变量和成员函数暴露给其他的函数和对象.任何公有成员都可以被外部的类访问. class Person {public st ...

  7. C#中的默认访问修饰符

    C#中的默认访问修饰符 1.命名空间下的元素的默认访问修饰符   public : 同一程序集的其他任何代码或引用该程序集的其他程序集都可以访问该类型或成员. internal : 同一程序集中的任何 ...

  8. 【小白学习C++ 教程】十一、C++类中访问修饰符

    @Author:Runsen 类是面向对象编程.它是一种用户定义的数据类型,它拥有自己的数据成员和成员函数,可以通过创建该类的实例来访问和使用它们. 一个对象是一个类的实例.定义类时,不会分配内存,但 ...

  9. java修饰符总结,java访问修饰符总结

    java的访问修饰符 java面向对象的基本思想之一是封装细节并且公开接口. java采用访问修饰符来封装类的方法和属性的访问权限,从而向使用者暴露接口.隐藏细节. public -- 对所有类可见. ...

最新文章

  1. Python logging调用Logger.info方法的处理过程
  2. selenium 验证码识别_如何获取验证码?
  3. 自建分布式存储新选择,性能是Ceph的1.84倍
  4. Protocol Buffer搭建及示例
  5. MySQL 语法问题:You can‘t specify target table ‘xxx‘ for update in FROM clause. 原因及解决方法
  6. Referenced file contains errors (http://www.springframework.org/schema/beans/spring-beans-4.3.xsd).
  7. linux下安装两个tomcat,linux安装两个tomcat-Go语言中文社区
  8. 【蓝桥官网试题 - 算法提高】change(思维)
  9. k8s实战之从私有仓库拉取镜像 - kubernetes
  10. sqoop导出数据单mysql_sqoop导出hive表数据到mysql
  11. 清除Docker中所有为<none>的镜像(虚悬镜像)
  12. Python使用Mysql官方驱动(取出dict类型的数据)
  13. 【sscom】 串口调试工具
  14. java文件转base64
  15. android蓝牙动态权限,Android蓝牙权限
  16. 【敏捷2.2】极限编程XP
  17. 教你怎么从Windows10彻底删除Flash
  18. android 经纬度方向,Android获取经纬度计算距离介绍
  19. Intelligent IME
  20. “基本系统设备”及“性能计数器”驱动无法安装问题解决

热门文章

  1. 2021数学建模C题题目
  2. 上海交大研究生计算机考研真题,2011年上海交通大学计算机研究生机试真题
  3. python可以在linux运行_服务器(Linux)上运行python总结
  4. mysql8.0本机登录要1秒_Mysql8.0的登录大坑……(忘记登录密码也可以这么搞)
  5. A20 文件系统预装APK
  6. 透析WINCE的控制面板
  7. linux 网络相关,Linux系统管理员必备的21个网络相关监控
  8. winform定义数据源名称_winform ComboBox自定义数据源实现用户输入时出现与用户输入匹配的项...
  9. quick time不可用是什么意思_fpga是什么意思(fpga怎么用)
  10. python 赋值方法_基于Python List的赋值方法