【反射】Reflect的使用

ReflectTest類:

import java.lang.reflect.Field;
import java.lang.reflect.Method;

public class ReflectTest {
	public static void main(String[] args) throws InstantiationException, IllegalAccessException {
		
		/*
		 * 1.獲得要操作的類的對象
		 */
		Class c = Person.class;
		System.out.println(c);
		/*
		 * 2.調用相應的getXXX()方法獲取列表
		 */
		Field [] fields = c.getDeclaredFields();
		for(Object o : fields){
			System.out.println(o);
		}
		/*
		 * 3.使用反射的API來操作這些信息
		 */
		System.out.println("---------使用反射前---------------------");		
		 //創建對象時,有兩種方法		 
		Person p = (Person)c.newInstance();
		Person p2 = new Person();
		//輸出信息
		System.out.println("name:" + p.getName() + " age:" + p.getAge());
		System.out.println("---------使用反射後---------------------");
		//分別對屬性name和age進行設置,在設置時要注意setAccessible(true)
		fields[0].setAccessible(true);
		fields[0].set(p,"tom");
		fields[1].setAccessible(true);
		fields[1].set(p, 29);
		System.out.println("name:" + p.getName() + " age:" + p.getAge());
		//獲取對象的方法
		Method[] method = c.getDeclaredMethods();
		for(Object o : method){
			System.out.println(o);
		}
		
	}
}

Perosn類: 

public class Person {
	private String name;
	private int age;
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章