唉!我還真是在面試中學習新東東啊,一個公司剛剛給了個測試,不過我很奇怪的是為什么web developer的職位居然考java的反射機制題,不過學習研究一下反射機制對我來說是件好事啦!
先說說什么是java反射機制吧,在運行狀態中,對於任意一個類,都能夠知道這個類的所有屬性和方法;對於任意一個對象,都能夠調用它的任意一個方法;這 種動態獲取的信息以及動態調用對象的方法的功能稱為java語言的反射機制。主要功能:在運行時判斷任意一個對象所屬的類;在運行時構造任意一個類的對 象;在運行時判斷任意一個類所具有的成員變量和方法;在運行時調用任意一個對象的方法;生成動態代理。
然后再留個示例吧。
package com.beidou.test; import java.lang.reflect.Method; public class Dynamic { public static void main(String[] args) throws Exception{ Class c = Dynamic.class;//得到對象 Method[] methods = c.getDeclaredMethods();//得到方法
for(Method method : methods){ System.out.print(method.getName());//打印參數名 Class[] parameterTypes = method.getParameterTypes();
for(int i=0;i<parameterTypes.length;i++){ String nameString=parameterTypes[i].getName(); System.out.print("parameterType:"+nameString);//打印方法參數類型 } System.out.print("ReturnType:"+method.getReturnType()); System.out.println(); } Object obj=c.newInstance();//獲取到方法對象,假設方法的參數是一個int,String,method名為getAge Method sAge = c.getMethod("getAge", new Class[] {int.class,String.class}); //獲得參數Object Object[] arguments = new Object[]{new Integer(23),new String("abc")}; //執行方法 String s=(String)sAge.invoke(obj , arguments); System.out.print(s); }
public String getAge(int age,String name){ return name+": "+age; } }