反射機制是在運行狀態中,對於任意一個類,都能夠知道這個類的所有屬性和方法;對於任意一個對象,都能夠調用它的任意一個方法和屬性;這種動態獲取的信息以及動態調用對象的方法的功能稱為java語言的反射機制。
Class類
我們知道Java是一門面向對象語言,在Java的世界裡,萬物皆為對象,比如我們有一個Person類:
public class Person {
}
我們創建一個Person類的實例,Person person = new Person(); 那麼這個person,就是Person類的實例對象。
那麼既然萬物都為對象,所以類也是對象。
類是什麼的對象呢?類是Class類的對象,表示方式有三種:
//第一種,任何一個類都有一個隱含的靜態成員變量class
Class c1 = Person.class;
//第二種,已經知道該類的對象,通過getClass()獲得
Class c2 = person.getClass();
//第三種,Class類的forName()方法
Class c3 = Class.forName("Person");
//這裡,c1,c2,c3都是Class類的實例,我們稱c1, c2 ,c3為Person類的類類型
//不難看出,c1 == c2結果是true, c2 == c3結果也是true
獲取方法信息
基本的數據類型,void關鍵字都Class 類的實例;可以通過getame();getSimpleName()獲取類的名稱。
Class c1=String.class;
Class c2=int.class;
Class c3=void.class;
System.out.println(c1.getName());
System.out.println(c2.getSimpleName());
獲取類的所有方法,並打印出來:
public static void printClassInfo(Object object){
Class c=object.getClass();
System.out.println("類的名稱:"+c.getName());
/**
* 一個成員方法就是一個method對象
* getMethod()所有的 public方法,包括父類繼承的 public
* getDeclaredMethods()獲取該類所有的方法,包括private ,但不包括繼承的方法。
*/
Method[] methods=c.getMethods();//獲取方法
//獲取所以的方法,包括private ,c.getDeclaredMethods();
for(int i=0;i //得到方法的返回類型 Class returnType=methods[i].getReturnType(); System.out.print(returnType.getName()); //得到方法名: System.out.print(methods[i].getName()+"("); Class[] parameterTypes=methods[i].getParameterTypes(); for(Class class1:parameterTypes){ System.out.print(class1.getName()+","); } System.out.println(")");
}
}
public class ReflectTest {
public static void main(String[] args){
String s="ss";
ClassUtil.printClassInfo(s);
}
}
運行:
類的名稱:java.lang.String
booleanequals(java.lang.Object,)
java.lang.StringtoString()
inthashCode()
…
尚學堂12大精英團隊+各類實戰項目,真正實現1+1>10的目標效果。幫助學員迅速成長,持久騰飛,成就學員“高富帥”人生;幫助企業技術和團隊成長,成就百年中華名企;助力中國持續成為世界強國而貢獻力量。尚學堂12大精英團隊,覆蓋IT行業十大領域,實戰團隊240人,服務學員累計超過10萬人,就業合作企業數量500+。
閱讀更多 Java的筆記 的文章