package com.bjpowernode.demo04;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
/**
* 通过反射技术访问实例的字段值
* field.get( 实例 ) 返回实例对应的字段值
* field.set( 实例名, 字段值) 设置实例的字段值
* field.setAccessible(true); 设置字段的可访问性
*
* @author Administrator
*
*/
public class Test05 {
public static void main(String[] args) throws Exception {
// 1)创建Class对象
Class<?> class1 = Computer.class;
//2)创建实例
//直接通过Class对象创建实例, 默认调用无参构造
Object obj1 = class1.newInstance();
System.out.println( obj1 ); //Computer [price=0, color=null, brand=null]
//3)反射brand字段
Field brandF = class1.getField("brand");
//4)返回字段的值,brandF.get( 实例 ); 返回某个实例的字段值
Object value = brandF.get(obj1);
System.out.println( value );
//5)设置字段的值,brandF.set( 实例名, 字段值);
brandF.set(obj1, "Lenovo");
System.out.println( obj1 );
//6)反射构造方法,创建实例
Constructor<?> constructor = class1.getConstructor(int.class, String.class, String.class);
Object obj2 = constructor.newInstance(6800, "black", "Dell");
System.out.println( obj2 ); //Computer [price=6800, color=black, brand=Dell]
//7)反射price私有字段
Field priceF = class1.getDeclaredField("price");
//可以设置字段的可访问性
priceF.setAccessible(true);
System.out.println( priceF.get(obj2) );
priceF.set(obj2, 2800);
System.out.println( obj2 );
//class1.getField()只能反射公共的字段, color字段是默认权限 , 应该使用getDeclaredField()
Field colorF = class1.getField("color");
System.out.println( colorF.get(obj2));
}
}
Java基础回顾之反射-----通过反射技术访问实例的字段值
最新推荐文章于 2022-05-15 18:31:03 发布