反射学习3-通过反射机制修改类中的私有属性的值

 一、准备知识:
   Java反射机制以及域的获取与设置的相关方法

 二、实现步骤:

1、首先创建一个类包含一个私有属性:

class PrivateField{
    private
String username = "Jason";
}

2、通过反射机制修改username的值:

//创建一个类的对象
PrivateField privateField = new PrivateField();
//获取对象的Class
Class<?> classType =
privateField.getClass();
//获取指定名字的私有域
Field field = classType.getDeclaredField("username");

//设置压制访问类型检查,只有这样,才能获取和设置某个具体类的Field对应的值。
field.setAccessible(true);
System.out.println(field.get(privateField));
//设置私有域的值
field.set(privateField, "arthinking");
System.out.println(field.get(privateField));

时间: 2024-10-05 05:07:18

反射学习3-通过反射机制修改类中的私有属性的值的相关文章

Java通过反射机制修改类中的私有属性的值

首先创建一个类包含一个私有属性: class PrivateField{ private String username = "Jason"; } 通过反射机制修改username的值: //创建一个类的对象 PrivateField privateField = new PrivateField(); //获取对象的Class Class<?> classType = privateField.getClass(); //获取指定名字的私有域 Field field =

通过反射机制修改类中的私有属性的值

实现步骤: 1.首先创建一个类包含一个私有属性 public class PrivateTest { private String name = "hello"; public String getName() { return name; } } 2.通过反射机制修改name的值 import java.lang.reflect.Field; public class ReflectionTest { public static void main(String[] args) th

在仅拿到头文件的情况下,如何修改类中的私有成员值?

1 通过使用从对象开始处的硬编码/手工编码的偏移量构造指针来访问私有成员数据 class Weak { public: Weak() = default; ~Weak() = default; // 想想如果去掉该函数,外部想修改类中的私有成员变量 m_name 时该如何操作? void name(const std::string &name) { m_name = name; } std::string name() const { return m_name; } private: std

【Java 反射学习】Java 反射基础

知识点 类是用来描述对象的,而反射就可以理解为是用来描述类的. 类中的属性包括: Class 类本身 Package 类所在的包 Field 类中的属性 Method 类中的方法 Constructor 类中的构造方法 Annotation 类中的注解 如何获取Class 1.Class的静态方法,forName("全类名") 2.类.class关键字 3.对象引用.getClass()方法 Object中的方法 Class中的常用方法 /* 0--默认不写 1--public 2--

PHP通过反射方法调用执行类中的私有方法

PHP 5 具有完整的反射 API,添加了对类.接口.函数.方法和扩展进行反向工程的能力. 下面我们演示一下如何通过反射,来调用执行一个类中的私有方法: <?php //MyClass这个类中包含了一个名为myFun的私有方法class MyClass {        private $tmp = 'hello';        private function myFun()    {        echo $this->tmp . ' ' . 'world!';    }} //通过类

java自定义Annotation,得到注解类中Annotation设定的注解值

java注解机制在各大框架中应用普遍,注解中可以设置一些值,如何得到呢. 要得到注解类中Annotation设定的注解值 即:遍历自定义Annotation中的方法,反射执行方法,结果就是 对应的注解值. java代码例子: package com.doctor.spring.core; import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotat

基类成员在派生类中的访问属性——总结

首先回顾一下三种成员访问限定符: public(公用的):既可以被本类中的成员函数所引用,也可以被类的作用域内的其他函数(即类外)引用. private(私有的):只能被本类中的成员函数引用,类外不能调用(友元类除外) protected(受保护的):不能被类外访问,但可以在派生类的成员函数访问. 接下来就用一张表总结一下基类成员在派生类中的访问属性: 参考资料:<C++程序设计(第二版)>--谭浩强

友元——友元可以访问与其有好友关系的类中的私有成员。 友元包括友元函数和友元类。

简介:友元可以访问与其有好友关系的类中的私有成员.    友元包括友元函数和友元类. [1]将普通函数声明为友元函数 #include<iostream> using namespace std; class Time { public: Time(int,int,int); friend void display(Time &);//定义友元函数 private: int hour; int minute; int sec; }; Time::Time(int h,int m,int

对Integer类中的私有IntegerCache缓存类的一点记录

对Integer类中的私有IntegerCache缓存类的一点记录 // Integer类有内部缓存,存贮着-128 到 127. // 所以,每个使用这些数字的变量都指向同一个缓存数据 // 因此可以直接使用 == 来比较是否相等 Integer a = 88; Integer b = 88; System.out.println(a == b); // true // 下面这个不在Integer缓存类里的数字,在每次赋值的时候都会新建一个对象存放 // 所以,它们不能使用 == 来判断是否相