第三十二章 反射的更多細節

通過一個類,創造這個類的實例

通過一個類,查找這個類的方法

通過一個類,查找這個類的屬性


package cn.itcast.jdbc;

import java.lang.annotation.Annotation;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;




public class ReflectTest {
	public static void main(String[] args)throws Exception{
		Class clazz = User.class;
		Object obj = create(clazz);
		System.out.println(obj);
		
		invoke1(obj,"getId");  //作用?
		field(clazz);   //輸出 id name birthday money 這些類的屬性
	}
	
	/*通過一個類,創造出一個實例*/
	static Object create(Class clazz)throws Exception{
		Constructor con = clazz.getConstructor(String.class);
		Object obj = con.newInstance("test name");
		return obj;
	}
	
	/*通過類的方法名,調用這個類的方法*/
	static void invoke1(Object obj, String methodName) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException, SecurityException, NoSuchMethodException {
		//Method 提供關於類或接口上單獨某個方法(以及如何訪問該方法)的信息
		Method[] ms = obj.getClass().getDeclaredMethods(); //包括私有方法,不包括公共方法
		ms = obj.getClass().getMethods(); //不包括私有方法,包括公共方法
		for(Method m : ms){
			System.out.println(m.getName());
			if(methodName.equals(m.getName())){
				m.invoke(obj, null);
			}
		}
		Method m = obj.getClass().getMethod(methodName,null);
		m.invoke(obj, null);
	}
	
	//查找某個類的屬性
	static void field(Class clazz) throws Exception{
		Field[] fs = clazz.getDeclaredFields();
		//fs = clazz.getFields();
		for(Field f : fs){
			System.out.println(f.getName());
		}
	}
	
	//?
	static void annon(Class clazz) throws Exception{
		Annotation[] as = clazz.getAnnotations(); 
	}
	
}




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