Class類
java中類是誰的對象?
類是對象,類是java.lang.Class類的實例對象(there is a class named Class)
表達方式
Class c1 = 類.class;
Class c2 = 實例.getClass();
Class c3 = Class.forName("類的全稱");//會有異常拋出
c1 c2 表示某個類的類類型(class type)
通過類類型創(chuàng)建對象
c2.newInstance();//需要做類型的強制轉(zhuǎn)換,并且類需要有無參數(shù)的構(gòu)造函
動態(tài)加載類
- 編譯時刻加載的類是靜態(tài)加載類
類 c = new 類();
- 運行時刻加載的類是動態(tài)加載類
Class c = Class.forName("類的全稱");
c.newInstance();
獲取方法信息
c.getName();//打印類的全稱
c.getSimpleName();//打印類的名稱(不包含包名)
//獲取所有public方法(包括父類中的)
Method[] ms = c.getMethods();
//獲取該類自己聲明的方法不限制訪問權(quán)限
Method[] ms = c.getDeclaredMethods();
//得到方法的返回值類型的類類型
Class returnType = m.getReturnType();
//得到方法的名稱
System.out.println(m.getName());
//獲取參數(shù)類型,得到參數(shù)列表的類型的類類型
Class[] paramTypes = m.getParameterTypes();
獲取成員變量的信息
java.lang.reflect.Field類
該類封裝了關(guān)于成員變量的操作
//獲取所有public的成員變量的信息
Field[] fs = c.getFields();
//獲取所有類中自定義的成員變量的信息
Field[] fs = c.getDeclaredFields();
方法反射的基本操作
如何獲取某個方法?
方法的名稱和參數(shù)列表唯一決定一個方法
//獲取public中的方法
c.getMethod(name, parameterTypes);
//獲取類中自定義的方法
c.getDeclaredMethod(name, parameterTypes);
//例子
Method m = c.getMethod("print", new Class[]{int.class,int.class});//會拋出異常
//也可以不用數(shù)組,直接有幾個參數(shù)寫幾個參數(shù)
Method m = c.getMethod("print",int.class,int.class);
//用m來調(diào)用方法,obj是那個對象來調(diào)用這個方法,args是調(diào)用時用的參數(shù),有幾個寫幾個,或者用數(shù)組,和上面一樣
m.invoke(obj, args);
java集合泛型
java中集合的泛型是防止錯誤輸入用的,只會在編譯階段有效,可以用反射的方法繞過編譯,可以在集合中添加不符合集合定義時泛型的數(shù)據(jù)。
無論定義了什么類型的泛型集合,編譯之后都是一樣的,也就是說,他們的類類型是完全一樣的。