changefieldsdemo.java

来自「java的反射机制的代码实例」· Java 代码 · 共 76 行

JAVA
76
字号
import java.lang.reflect.*;
public class ChangeFieldsDemo 
{
	public static void main(String[] args) 
	{
		//获取Class对象用来描述自定义类Employee
		Class c = Employee.class;
		
		try 
		{
			//获取自定义类Employee中,对应名称的属性字段
			Field f1 = c.getField("name");
			Field f2 = c.getDeclaredField("age");
			Field f3 = c.getDeclaredField("sex");
			
			//创建Employee对象,初始化属性值
			Employee em = new Employee();
			//输出未改变成员变量前,各成员变量的值
			System.out.println("Before Change:");
			System.out.println(em.get_name());
			System.out.println(em.get_age());
			System.out.println(em.get_sex()+"\n");
			
			//使用Field对象的set方法,改变成员变量的值		
			f1.set(em, "Xuq");
			f2.setInt(em, 23);
			f3.setAccessible(true);
			f3.set(em, "female");
			
			//输出改变成员变量后,各成员变量的值
			System.out.println("After Change:");
			System.out.println(em.get_name());
			System.out.println(em.get_age());
			System.out.println(em.get_sex());		
		} 
		catch (SecurityException e) {e.printStackTrace();} 
		catch (NoSuchFieldException e) {e.printStackTrace();} 
		catch (IllegalArgumentException e) {e.printStackTrace();} 
		catch (IllegalAccessException e) {e.printStackTrace();}
	}
}

class Employee   //自定义类
{
	public String name;
	int age;
	private String sex;
	
	public Employee() //无参数构造方法
	{
		name = "wangxyw";
		age = 24;
		sex = "male";
	}
	
	//含参数构造方法
	public Employee(String name,int age,String sex)
	{
		this.name = name;
		this.age = age;
		this.sex = sex;
	}
	
	//获取自定义类属性值方法	
	public String get_name(){return name;}
	public int get_age(){return age;}
	public String get_sex(){return sex;}
	
	//自定义类改变属性值方法	
	public void setAll(String name,int age,String sex)
	{
		this.name = name;
		this.age = age;
		this.sex = sex;
	}
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?