快速瞭解反射(Reflection)

JAVA反射機制:“程序運行時,允許改變程序結構或變量類型,這種語言稱爲動態語言”。
 
相信大多數讀者看到這句官方自以爲很簡單其實很深奧的解釋都會一臉茫然。到底什麼是反射呢,反射到底是什麼呢?
 
其實,瞭解接口的特性,以及會讀取配置文件的人很容易就能理解什麼是反射。
 
反射,通俗來講,就是動態改變類。
 
例如:當我們用到配置文件時,配置的大多數都是一些參數。而反射,其實就是配置類,像接口一樣擁有可擴展性。
 
反射的簡單應用:
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;


public class TestReflection {

	public static void main(String[] args) throws ClassNotFoundException, IllegalArgumentException, IllegalAccessException, InvocationTargetException, InstantiationException {
		String str = "T";
		
		Class c = Class.forName(str);
		Object o = c.newInstance();
		Method[] methods = c.getMethods();
		for(Method m : methods){
			//System.out.println(m.getName());
			if(m.getName().equals("mm")){
				m.invoke(o);
			}
			if(m.getName().equals("m1")){
				m.invoke(o, 1, 2);
				
				Class[] parameters = m.getParameterTypes();
				for(Class p : parameters){
					System.out.println(p);
				}
			}
			if(m.getName().equals("getS")){
				Class returnType = m.getReturnType();
				System.out.println(returnType);
			}
			
		}
	}

}

class T{
	
	static{
		System.out.println("T loaded!");
	}
	
	public void mm(){
		System.out.println("mm invoked!");
	}
	
	int i;
	String s;
	
	public void m1(int i, int j){
		this.i = i + j;
		System.out.println(this.i);
	}
	
	public String getS(){
		return s;
	}
}

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