• 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 [
     name=" + name + ", 
     type=" + type + ", 
     camp=" + camp + "
    ]";
    	}
    	
    }
    

      测试类:

    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来允许操作这个属性。反射机制真强大。真机智。

  • 相关阅读:
    [codevs]线段树练习5
    【Java学习笔记之十六】浅谈Java中的继承与多态
    【Java学习笔记之十五】Java中的static关键字解析
    【Java学习笔记之十四】Java中this用法小节
    【Java学习笔记之十三】初探Java面向对象的过程及代码实现
    【Java学习笔记之十二】Java8增强的工具类:Arrays的用法整理总结
    hdu2896 AC自动机
    hdu2222 AC自动机
    字符串匹配--AC自动机模板
    字符串匹配--(K)MP模板
  • 原文地址:https://www.cnblogs.com/AaronCui/p/4915017.html
Copyright © 2020-2023  润新知