这里介绍通过反射获取对象的成员变量,以及修改成员变量。

package Reflect.field;

public class Point {

int y;

public int getY() {

return y;

}

public void setY(int y) {

this.y = y;

}

public Point(int y) {

super();

this.y = y;

}

}

package Reflect.field;

public class ReflectPoint extends Point {

protected int x; // 必须要用public修饰 否则反射取不到

public int y; // 必须要用public修饰 否则反射取不到

public String str1 = "hello";

public String str2 = "world";

public String str3 = "OK";

public ReflectPoint(int x, int y) {

super(10);

this.x = x;

this.y = y;

}

// 覆盖了此方法,就可以直接System.out.println(new ReflectPoint());

@Override

public String toString() {

return str1 + ":" + str2 + ":" + str3;

}

public int getX() {

return x;

}

public void setX(int x) {

this.x = x;

}

public int getY() {

return y;

}

public void setY(int y) {

this.y = y;

}

}

package Reflect.field;

import java.lang.reflect.Field;

/**

* 成员变量的反射

*

* @author xiaoyu

*

*/

public class Test {

public static void main(String[] args) throws Exception {

// 测试通过反射 获取对象的变量

ReflectPoint pt1 = new ReflectPoint(3, 5);

Point pt = new Point(99);

Field fieldY = pt1.getClass().getField("y"); // 这样只能取得public 修饰的y

Field allFieldY = pt.getClass().getDeclaredField("y"); // 这样所有的y,不管是什么修饰符

// fieldY不是对象上的变量,它是类上的。 fieldY.get(pt1)

System.out.println(fieldY.get(pt1)); // 5

System.out.println(allFieldY.get(pt)); // 99

Field fieldX = pt1.getClass().getDeclaredField("x");

// 暴力反射 ,不管x 是不是Public

// 修饰的,都可以取到(用了getDeclaredField("x"),setAccessible(true)可以不用写了)

// fieldX.setAccessible(true);

System.out.println(fieldX.get(pt1)); // 3

// 下面测试通过反射改变一个对象的变量的值

changeStringValue(pt1);

// 打印出pt1中的String类型的值

System.out.println(pt1);

}

/**

* 该方法可以改变对象obj中String类型的变量

*

* @param obj

*/

public static void changeStringValue(Object obj) throws Exception {

Field[] fileds = obj.getClass().getFields(); // 获取obj对象的所以变量

for (Field field : fileds) { // 循环找出是String类型的变量

// 字节码只有一份,所以可以==,而且比equals()方法更好

if (field.getType() == String.class) {// 如果是String类型的,则改变其值

String oldValue = (String) field.get(obj);

String newValue = oldValue.replace('o', 'h');

field.set(obj, newValue);// 当然你也可以设置成新的值 ;field.set(obj, "WWW");

}

}

}

}

java 反射 成员变量_java基础--反射(成员变量)相关推荐

  1. Java入参关键字_Java基础17-成员变量、return关键字和多参方法

    1.成员变量 在类中声明的变量为成员变量 //Dog类 class Dog{ String name;//成员变量 } public class Test1{ public static void m ...

  2. java基础变量_Java基础语法之变量和常量

    上行没有"{"时,下行代码与上行首字母对齐 标识符 概述 在Java中对变量.常量.函数和语句块都是有名字的,他们的名字统称为Java标识符.是为类.对象.方法.变量.接口和自定义 ...

  3. java实例变量成员变量_Java的类成员变量、实例变量、类变量,成员方法、实例方法、类方法...

    总是被这些相似的概念搞晕,查阅了资料后做个小总结,以变量为例,方法辨析类似. 1.多胞胎名字汇总辨析 成员变量和成员方法是范围最大的定义,提到成员变量就可以理解成你所定义在一个类体中的各类变量的统称, ...

  4. java 反射 泛型 构造函数_Java复习——反射和泛型的复习

    反射 Class类 一个类被类加载器加载到内存之中,占有一片区域,这个空间里的内容就是类的字节码,不同的类的字节码是不一样的,这一个个空间页可以使用类来表示,这就是Class类. 根据这个概念可知:不 ...

  5. java性别数据类型_Java基础-数据类型及变量

    Java基本语法 1.标识符(zhi) 含义:名字 类名.对象名.方法名.变量名.常量名-- 一个合法的标识符的组成:数字.字母._和$ 注意事项: 不能重复 不能以数字开头 区分大小写 不能以关键字 ...

  6. java的类型转换关键字_Java基础知识:注释、关键字、标识符、数据类型、常量、变量、数据类型转换...

    1.java中注释有三种形式 单行注释:// 多行注释:/**/ 文档注释:/** */ 2.java中的关键词(不需要记忆) 关键词的特点:均由小写字母组成,代码编辑器会给颜色提示 在这里插入图片描 ...

  7. java package报错_Java基础知识总结 - 超详细篇(上)

    1,JDK:Java Development Kit,java的开发和运行环境,java的开发工具和jre. 2,JRE:Java Runtime Environment,java程序的运行环境,ja ...

  8. java单引号转义_Java基础入门——Java语言基础(上)

    本篇我们开始进入Java的学习,首先在学习如何编写Java语言前要先了解Java程序的基本结构. 一.Java程序的基本结构 一个Java程序的基本结构大体可以分为包.类.main()主方法.标识符. ...

  9. Java是有法_Java基础语法

    Java的基础语法包含三大类:标识符.修饰符.关键字. 一.标识符. 定义:标识符是以数字.字母.下划.$符号(美元符)所组成的用来标志类名.对象名.方法名.类型名.数组名.包名的有效字符序列.(简单 ...

最新文章

  1. 增量备份和差异备份的区别|什么是增量差异备份
  2. OpenGL坐标系转化之投影坐标系
  3. synchronized不能锁静态变量_肝了一下午的 Synchronized 解析!
  4. 大型的labview程序实例_【学院推荐】LabVIEW的核心要素——数据流
  5. VTK:图片之ImageVariance3D
  6. mysql索引的种类
  7. vue-cli构建的项目手动添加eslint配置
  8. Get_key.c模块流程
  9. [原创]数论个人模板
  10. 独家 | 一文读懂复杂网络(应用、模型和研究历史)
  11. 制动计算机,一种基于摩擦制动的计算机主机底座
  12. C++ 算术平均数及几何平均数
  13. ios 图片居中裁剪_iOS 自定义裁剪相册照片
  14. 目标检测:速度和准确性比较(Fater R-CNN,R-FCN,SSD,FPN,RetinaNet和YOLOv3)
  15. Google MapReduce论文中文版
  16. 【Avro一】Avro入门
  17. php 使用dataview,echarts如何优化数据视图dataView中的样式(代码示例)
  18. 手动清除灰鸽子***
  19. 《疯狂动物城》观影感受
  20. 零售店铺想要日进斗金?这三个点照着做就行!

热门文章

  1. NetworkOnMNetworkOnMainThreadException
  2. .NET C# I/O 操作
  3. java owl文件_jena解析.owl文件 实现owl文件的解析 - 下载 - 搜珍网
  4. 巨潮网怎么下载年报_上市公司年报(或财务报表)在哪里下载?
  5. HSSFCellStyle.ALIGN_CENTER报错
  6. pm2 守护 nuxt
  7. Linux系统的远程登录
  8. TCP/IP完整的基础介绍
  9. linux服务器配置端口,Linux服务器配置-新增端口
  10. 湖南师大计算机学院院长,董新汉(数学与计算机科学学院)老师 - 湖南师范大学 - 院校大全...