-
@Java反射機(jī)制——方法反射的基本操作 一、如何獲取某個(gè)方法:方法的【名稱】和【方法的參數(shù)列表】才能【唯一確定】某個(gè)方法 1、要獲取一個(gè)類的某個(gè)方法,需要先得到類類型 2、通過Class.getMethod(name,parameterTypes)獲得public的該方法:如c.getMethod("print",new Class[]{int.class,int.class})或者參數(shù)寫成int,int; ——> 來(lái)獲取 public void print(int a,int b) 3、同樣getDeclaredMethdo(name,paramterTypes)獲得自己聲明的該方法 二、方法的反射操作:method.invoke(對(duì)象,參數(shù)列表); 1、方法反射:通過調(diào)用方法的對(duì)象invoke(【對(duì)象】,參數(shù)列表),來(lái)操作定義該方法的【對(duì)象】,實(shí)現(xiàn)該方法 2、獲得方法的對(duì)象后,用對(duì)象method來(lái)進(jìn)行方法調(diào)用Object o = method.invoke(c,new Object[]{10,20})也可以直接寫10,20。若方?jīng)]有返回值,則返回null。查看全部
-
@Java反射機(jī)制——獲取成員變量&構(gòu)造函數(shù) 一、成員變量是java.lang.reflect.Field的對(duì)象 1、Field類封裝了關(guān)于成員變量的操作 2、Field[] fs = c.getFields()方法獲取所有public的成員變量Field[]信息 3、c.getDeclaredFields獲取的是該類自己聲明的成員變量信息 4、field.getType()獲得成員類型的類類型 5、field.getName()獲得成員的名稱 二、構(gòu)造函數(shù)是java.lang.Constructor類的對(duì)象 1、通過Class.getConstructor()獲得Constructor[]所有共有構(gòu)造方法信息 2、建議getDeclaredConstructors()獲取自己聲明的構(gòu)造犯法 3、Constructor.getName():String 4、Constructor.getParameterTypes():Class[]查看全部
-
everything is object very good查看全部
-
@Java反射機(jī)制——獲取方法信息 一、基本的數(shù)據(jù)類型,void關(guān)鍵字等都存在類類型 二、Class類的基本API操作的 1、c.getName()可以獲取類的名稱 2、c.getMethods()獲取類的【public方法】集合,【包括繼承來(lái)的】 ***注意【所有方法都是Method類的對(duì)象】 3、c.getDeclaredMethods()獲取的是所有該類【自己聲明】的方法,【不問訪問權(quán)限】 三、Method類提供了一些操作方法的方法。。。 1、.getReturnType()得到該方法的返回值類型的類類型(class),如int.class String.class 2、.getName()得到方法的名稱 3、.getParameterTypes()獲得參數(shù)列表類型的類類型,如參數(shù)為(int,int)則得到(int.class ,int class)查看全部
-
@Java反射機(jī)制——?jiǎng)討B(tài)加載類 1、靜態(tài)加載類,是編譯時(shí)刻加載;動(dòng)態(tài)加載類,是運(yùn)行時(shí)刻加載 2、new創(chuàng)建對(duì)象:是靜態(tài)加載類,在編譯時(shí)刻就需要加載所有的【可能使用到的類】。有一個(gè)類有問題(如不存在),都不能通過編譯,會(huì)報(bào)錯(cuò)。 3、Class.forName()通過動(dòng)態(tài)加載類,可以用到一個(gè)類時(shí),才進(jìn)行加載。 【功能性的類盡量使用動(dòng)態(tài)加載,并對(duì)新添的類實(shí)現(xiàn)功能性接口(標(biāo)準(zhǔn)),這樣就不用重新編譯】查看全部
-
@Java反射機(jī)制——Class類的使用 一、類是誰(shuí)的對(duì)象:類是java.lang.Class類的實(shí)例對(duì)象 1、任何類都是Class類的實(shí)例對(duì)象 ,這個(gè)對(duì)象表示這個(gè)類的類類型(class type) 2、獲得class實(shí)例有三種方法,例: Foo foo = new Foo(); · 通過類名 Class c1 = Foo.class 得到(說(shuō)明每個(gè)類都有一個(gè)隱含的靜態(tài)成員) · 通過類的實(shí)例 Class c2 = foo.getClass();得到 · 通過 Class c3 = Class.forName(Foo); 得到 3、使用類類型,可以創(chuàng)建類的實(shí)例:Foo foo = (Foo)c1.newInstance();//需要有無(wú)參數(shù)的構(gòu)造方法查看全部
-
5)Class類的基本API操作 public class ClassUtil { /** * 打印類的信息,包括類的成員函數(shù)、成員變量(只獲取成員函數(shù)) * @param obj 該對(duì)象所屬類的信息 */ public static void printClassMethodMessage(Object obj){ //要獲取類的信息 首先要獲取類的類類型 Class c = obj.getClass();//傳遞的是哪個(gè)子類的對(duì)象 c就是該子類的類類型 //獲取類的名稱 System.out.println("類的名稱是:"+c.getName()); /* * Method類,方法對(duì)象 * 一個(gè)成員方法就是一個(gè)Method對(duì)象 * getMethods()方法獲取的是所有的public的函數(shù),包括父類繼承而來(lái)的 * getDeclaredMethods()獲取的是所有該類自己聲明的方法,不問訪問權(quán)限 */ Method[] ms = c.getMethods();//c.getDeclaredMethods() for(int i = 0; i < ms.length;i++){ //得到方法的返回值類型的類類型 Class returnType = ms[i].getReturnType(); System.out.print(returnType.getName()+" "); //得到方法的名稱 System.out.print(ms[i].getName()+"("); //獲取參數(shù)類型--->得到的是參數(shù)列表的類型的類類型 Class[] paramTypes = ms[i].getParameterTypes(); for (Class class1 : paramTypes) { System.out.print(class1.getName()+","); } System.out.println(")"); } }查看全部
-
4)基本的數(shù)據(jù)類型 void關(guān)鍵字 都存在類類型 public class ClassDemo2 { public static void main(String[] args) { Class c1 = int.class;//int 的類類型 Class c2 = String.class;//String類的類類型 String類字節(jié)碼(自己發(fā)明的) Class c3 = double.class; Class c4 = Double.class; Class c5 = void.class; System.out.println(c1.getName()); System.out.println(c2.getName()); System.out.println(c2.getSimpleName());//不包含包名的類的名稱 System.out.println(c5.getName()); } }查看全部
-
Java中集合的泛型,是防止錯(cuò)誤的輸入,只在編譯階段有效查看全部
-
反射的操作是編譯后的操作查看全部
-
挺好的透徹查看全部
-
好查看全部
-
zyzyz查看全部
-
好神奇啊,類的動(dòng)態(tài)編譯真是太好玩了。查看全部
-
類的信息獲?。?查看全部
舉報(bào)
0/150
提交
取消