zoukankan      html  css  js  c++  java
  • 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来允许操作这个属性。反射机制真强大。真机智。

  • 相关阅读:
    WebAPI下的如何实现参数绑定
    MYSQL主从不同步延迟原理
    mysql的limit经典用法及优化
    ASP.NET MVC中的模型绑定
    使用EF实现数据库的增删改查
    NoSQL数据库技术特性解析之文档数据库
    MySQL 缓存 Query Cache
    Loadrunner test web service which need username and password
    vb写文件时报'Invalid procedure call or argument'
    Shell 笔记
  • 原文地址:https://www.cnblogs.com/AaronCui/p/4915017.html
Copyright © 2011-2022 走看看