Java反射机制demo(六)—获得并操作一个类的属性
Java反射机制demo(六)—获得并操作一个类的属性
获得并操作一个类的属性?!
不可思议啊,一个类的属性一般都是私有成员变量啊,private修饰符啊!
但是毫无疑问,这些东西在Java的反射机制面前都成了渣渣,Java反射机制读的是字节码,是Class类,有什么获得不了,操作不了的呢。
待实验用的小白鼠Heros类:
package com.aaron.reflect;
public class Heros {
private String name;//名字
private String type;//类型
private int camp;//0,近卫;1,天灾
public Heros(){}
@Override
public String toString() {
return "Heros [\n name=" + name + ", \n type=" + type + ", \n camp=" + camp + "\n]";
}
}
测试类:
package com.aaron.reflect;
import java.lang.reflect.Field;
public class Demo6 {
public static void main(String[] args) {
Class<?> c = Heros.class;
try {
Object object = c.newInstance();
Field[] fields = c.getDeclaredFields();
System.out.println("Heros所有属性:");
for (Field f : fields) {
System.out.println(f);
}
Field field = c.getDeclaredField("name");
field.setAccessible(true);
field.set(object, "炸弹人");
System.out.println("修改后的属性值:");
System.out.println(field.get(object));
System.out.println("修改属性后的Heros:");
System.out.println((Heros)object);
} catch (Exception e) {
e.printStackTrace();
}
}
}
运行结果:
UserInfo所有方法:
private java.lang.String com.aaron.reflect.Heros.name
private java.lang.String com.aaron.reflect.Heros.type
private int com.aaron.reflect.Heros.camp
修改后的属性值:
炸弹人
修改属性后的UserInfo:
Heros [
name=炸弹人,
type=null,
camp=0
]
注意代码中有一句:
field.setAccessible(true);
基于对属性的保护,默认为false。这里相当于一个授权的过程,设置true来允许操作这个属性。反射机制真强大。真机智。
Java反射机制demo(六)—获得并操作一个类的属性的更多相关文章
- Java反射机制demo(四)—获取一个类的父类和实现的接口
Java反射机制demo(四)—获取一个类的父类和实现的接口 1,Java反射机制得到一个类的父类 使用Class类中的getSuperClass()方法能够得到一个类的父类 如果此 Class 表示 ...
- Java反射机制demo(七)—反射机制与工厂模式
Java反射机制demo(七)—反射机制与工厂模式 工厂模式 简介 工厂模式是最常用的实例化对象模式. 工厂模式的主要作用就是使用工厂方法代替new操作. 为什么要使用工厂模式?直接new不好吗? 直 ...
- Java反射机制demo(五)—获得并调用一个类中的方法
Java反射机制demo(五)—获得并调用一个类中的方法 这个demo在使用反射机制操作属性之前,主要原因是因为在.class文件字节码中,方法排在属性的前面. 1,获得一个类中的方法 先看一下方法和 ...
- Java反射机制demo(三)—获取类中的构造函数
Java反射机制demo(三)—获取类中的构造函数 1,获取类中所有的构造函数 如下面的代码中所示,这个类中显式的构造函数有五个. 空构造: public UserInfo() 带参构造有四个: pu ...
- Java反射机制demo(二)—通过Class实例化任意类的对象
Java反射机制demo(二)—通过Class实例化任意类的对象 上一章节中,实例化了Class类对象的实例,这个部分的demo展示了如何使用Class对象的实例去获得其他类的对象的实例. 任意一个类 ...
- Java反射机制demo(一)—实例化Class对象,并获得其他类包名和类型
Java反射机制demo(一)——实例化Class对象,通过对象获得包名和类型 使用Java中的 本地类作为实验对象,避免自定义的类带来的一些不便. public static void main(S ...
- Java反射机制(三):调用对象的私有属性和方法
一. 通过反射调用类中的方法 在正常情况下,得到类的对象后,我们就可以直接调用类中的方法了,如果要想调用的话,则肯定必须清楚地知道要调用的方法是什么,之后通过Class类中的getMethod方法,可 ...
- Java反射机制(一):认识Class类
一. 认识Class类 1.1 正常我们再使用一个类时,大多情况是先获取类的对象,然后通过对象去操作类中的属性或方法. 那,大家有没有想过,如果我们已经有了一个类的对象,我能否通过该对象去获取到类的信 ...
- Java反射机制Reflection
Java反射机制 1 .class文件 2 Class类 3 Class类与反射机制 4 Java反射机制的类库支持及简介 5 反射机制的定义与应用 6 反射机制Demo Java反射机制demo(一 ...
随机推荐
- Hadoop2.6.0在CentOS 7中的集群搭建
我这边给出我的集群环境是由一台主节点master和三台从节点slave组成: master 192.168.1.2 slave1 192.168.1.3 slave2 ...
- Shell基础-通配符
* - 通配符,代表任意字符 ? - 通配符,代表一个字符 # - 注释 | - 分隔两个管线命令的界定 ; - 连续性命令的界定 ~ - 用户的根目录 $ - 变量前需要加的变量值 ! - 逻辑运算 ...
- 表单验证插件-validator.js 使用教程
做网站的时候,常常会涉及到各种表单验证.选择一款好用的表单验证插件,会降低表单验证开发的难度.在开发中,我目前使用的表单验证插件是:validator.js. validator.js 是一款轻量的表 ...
- python作业堡垒机(第十三周)
作业需求: 1. 所有的用户操作日志要保留在数据库中 2. 每个用户登录堡垒机后,只需要选择具体要访问的设置,就连接上了,不需要再输入目标机器的访问密码 3. 允许用户对不同的目标设备有不同的访问权限 ...
- Java学习笔记——继承、接口、多态
浮点数的运算需要注意的问题: BigDecimal operand1 = new BigDecimal("1.0"); BigDecimal operand2 = new BigD ...
- 使用mysql的SUBSTRING_INDEX函数解决项目中编码非重复问题的实现方案!
一 SUBSTRING_INDEX函数介绍 作用:按关键字截取字符串 substring_index(str,delim,count) 说明:substring_index(被截取字段,关键字,关键字 ...
- java系统的优化
1.tomcat.jboss.jetty的jvm内存,增大 2.数据库的优化,如MySQL的innodb_buffer_pool_size等参数,增大
- c语言格式控制符
http://zhidao.baidu.com/link?url=-YJjz3U0fd_eSW9eLa8ankGo_QbyOOOaKYWyAY9g4mKWQj0DN6l12OSLJz24U8jCwo1 ...
- 四、springcloud之服务调用Feign(二)
一.Fegin的常见应用 Feign的Encoder.Decoder和ErrorDecoder Feign将方法签名中方法参数对象序列化为请求参数放到HTTP请求中的过程,是由编码器(Encoder) ...
- 32 Profiling Go Programs 分析go语言项目
Profiling Go Programs 分析go语言项目 24 June 2011 At Scala Days 2011, Robert Hundt presented a paper titl ...