反射-私有变量/私有方法-Java

 1 import java.lang.reflect.Field;
 2 import java.lang.reflect.InvocationTargetException;
 3 import java.lang.reflect.Method;
 4
 5 /**
 6  * Created with IDEA
 7  * author:foreign
 8  * Date:2019/9/30
 9  * Time:10:40
10  */
11 public class ReflectionFk {
12     public static void main(String[] args) throws NoSuchFieldException, IllegalAccessException, NoSuchMethodException, InvocationTargetException {
13         PersonFk personFk = new PersonFk();
14         personFk.setName("foreign");
15
16         Class clazz = PersonFk.class;
17         //1 获取全部private变量
18         Field[] declaredFields = clazz.getDeclaredFields();
19         for (Field field : declaredFields) {
20             field.setAccessible(true);
21             System.out.println("获取private字段:" + field);
22         }
23         //1.1 获取指定的private变量
24         Field name = clazz.getDeclaredField("name");
25         name.setAccessible(true);
26         String str = (String) name.get(personFk);
27         System.out.println("name字段值:" + str);
28
29         //2 获取全部private方法
30         Method[] declaredMethods = clazz.getDeclaredMethods();
31         for (Method method : declaredMethods) {
32             method.setAccessible(true);
33             System.out.println("获取private方法: " + method);
34         }
35         //2.1 获取指定private方法
36         PersonFk personFk1 = new PersonFk("123");
37         Method getDepartmentId = clazz.getDeclaredMethod("getDepartmentId", null);
38         getDepartmentId.setAccessible(true);
39         String returnStr = (String) getDepartmentId.invoke(personFk1, null);
40         System.out.println("获取指定的private方法:" + returnStr);
41     }
42 }

实体类

 1 /**
 2  * Created with IDEA
 3  * author:foreign
 4  * Date:2019/9/30
 5  * Time:10:39
 6  */
 7 public class PersonFk {
 8     private String name;
 9     private Integer age;
10     private Boolean gender;
11     public String desc;
12     private String departmentId;
13
14     public PersonFk(String name, Integer age, Boolean gender, String desc, String departmentId) {
15         this.name = name;
16         this.age = age;
17         this.gender = gender;
18         this.desc = desc;
19         this.departmentId = departmentId;
20     }
21
22     public PersonFk(String departmentId) {
23         this.departmentId = departmentId;
24     }
25
26     public PersonFk() {
27     }
28
29     public String getName() {
30         return name;
31     }
32
33     public void setName(String name) {
34         this.name = name;
35     }
36
37     public Integer getAge() {
38         return age;
39     }
40
41     public void setAge(Integer age) {
42         this.age = age;
43     }
44
45     public Boolean getGender() {
46         return gender;
47     }
48
49     public void setGender(Boolean gender) {
50         this.gender = gender;
51     }
52
53     public String getDesc() {
54         return desc;
55     }
56
57     public void setDesc(String desc) {
58         this.desc = desc;
59     }
60
61     private String getDepartmentId() {
62         return departmentId;
63     }
64
65     public void setDepartmentId(String departmentId) {
66         this.departmentId = departmentId;
67     }
68 }

原文地址:https://www.cnblogs.com/fangke/p/11611919.html

时间: 2024-10-31 16:04:26

反射-私有变量/私有方法-Java的相关文章

四.OC基础--1.文档安装和方法重载,2.self和super&static,3.继承和派生,4.实例变量修饰符 ,5.私有变量&私有方法,6.description方法

四.OC基础--1.文档安装和方法重载, 1. 在线安装 xcode-> 系统偏好设置->DownLoads->Doucument->下载 2. 离线安装 百度xcode文档 3. 方法重载: 是指在一个类中定义多个同名的方法 在OC中没有重载 2.self和super&static, self和super: 1. self理解: 谁调用当前方法, self就代表谁. 比如: 在对象方法中,self代表的是对象, 因为只有对象才可以调用对象方法 在类方法中, self代表的

Javascript的私有变量和方法、共有变量和方法以及特权方法、构造器、静态共有属性和静态共有方法

一.私有变量:定义在函数内部的属性和方法称之为该函数的私有属性和方法        共有变量:在函数内部通过this创建的对象和方法称之为该函数的共有属性和方法 特权方法:通过this创建的既可以访问该函数的共有属性和方法,也可以访问该函数的私有属性和方法称之为特权方法 构造器:对象在创建的时候调用特权方法来初始化实例的属性,这个方法也称为构造器 /** * 类的内部私有属性.私有方法.特权方法.共有属性和共有方法以及构造器 * @param id * @param bookname * @pa

iOS s私有变量 私有方法

实例变量既可以在@interface中定义 也可以在@implementation中定义 在@implementation中的成员变量默认是私有的成员变量 并且和利用@private修饰的不太一样 在@implementation中定义的成员变量在其他类中无法查看 也无法访问 在@implementation中定义的私有变量只能在本类中访问 如果只有方法的实现没有方法的声明 这个方法就是私有方法

iOS开发 私有变量 私有属性的使用选择

.m文件中可以声明私有成员变量和私有属性 属性(property)一共做了三件事:创建以下划线开头的实例变量.生成getter.setter方法. 成员变量:仅仅创建实例变量: 属性(property)会自动生成setter,getter方法,有的时候就会生成一些无用的方法,造成程序的IPA体积过大. 使用成员变量的方式运行的速度更快. 当开发使用懒加载(变量在需要的时候再去加载)的时候,使用属性(property) - (NSMutableArray *)imagesArr { if (_im

JDK安装与环境变量配置方法--Java环境

第一步:下载JDK,可直接双击安装,到如下图这一步可以点击[更改],将JDK安装到自己指定的路径. 注:若无安装目录要求,可全默认设置.无需做任何修改,两次均直接点下一步即可. 第二步:安装完JDK后配置环境变量  计算机→属性→高级系统设置→高级→环境变量 第三步: DOS的批处理命令直接运行: 创建auto.bat文件,在其末尾加入: set JAVA_HOME=C:\Program Files\Java\jdk1.8.0_121 set PATH=%JAVA_HOME%\bin;C:\Pr

Java Reflection(七):私有变量和私有方法

转载自并发编程网 – ifeve.com 内容索引访问私有变量访问私有方法 在通常的观点中从对象的外部访问私有变量以及方法是不允许的,但是Java反射机制可以做到这一点.使用这个功能并不困难,在进行单元测试时这个功能非常有效.本节会向你展示如何使用这个功能. 注意:这个功能只有在代码运行在单机Java应用(standalone Java application)中才会有效,就像你做单元测试或者一些常规的应用程序一样.如果你在Java Applet中使用这个功能,那么你就要想办法去应付Securi

oc中私有变量、私有方法

oc中私有变量.私有方法 私有变量 私有变量既是类的成员变量,仅能在类的内部使用,不受外部访问 定义方法有: 1. 定义在.h文件的{}中,使用关键字@private,如: @interface Test () { @private NSString *string_; } @end 1 2 3 4 5 6 2.也是定义在.h文件的{}中,但不使用关键字@private 3.定义在.m文件的@property,如下: @interface Test () @property (nonatomic

函数中的私有变量和特权方法

定义 [1][私有变量] 任何在函数中定义的变量,都可以认为是私有变量,因为不能在函数外部访问这些变量.私有变量包括函数的参数.局部变量和在函数内部定义的其他函数 [2][特权方法] 如果在函数内部创建一个闭包,那么闭包通过自己的作用域链也可以访问这些变量.而利用这一点,就可以创建用于访问私有变量的公有方法.有权访问私有变量和私有函数的公有方法称为特权方法. 创建方式 [1][构造函数] 在构造函数内部定义所有私有变量和函数.然后,创建能够访问这些私有成员的特权方法.能够在构造函数中定义特权方法

两种创建私有变量、私有方法的方法

在构造函数中定义特权方法: 利用函数的块级作用域,然后在里面创建了两个特权方法,两个特权方法作为构造函数的闭包可以访问到私有变量name,所以创建构造函数的实例之后只能通过这两个特权方法访问到name这个私有变量(并且每个实例的name不是同一个) 在私有作用域中创建构造函数 首先创建了一个私有作用域,然后在里面创建了一个构造函数,不是用声明式而是用函数表达式创建了一个私有作用域的闭包,这样Person就是一个全局变量,然后通过原型创建了两个特殊方法,然后私有变量name就只能通过这两个方法访问