-
Object類native JNI 技術查看全部
-
導出方法查看全部
-
為什么是true,沒有想明白。 ArrayList list1=new ArrayList(); ArrayList<String> list2=new ArrayList<String>(); Class c1=list1.getClass(); Class c2=list2.getClass(); System.out.print(c1==c2);//true查看全部
-
Class類查看全部
-
類。class class是隱藏的靜態成員變量查看全部
-
Java反射機制——通過反射了解集合泛型的本質 1:反射的操作都是編譯之后的操作;就是運行階段 2:java中集合的泛型是防止錯誤輸入的;只在編譯階段有效,只要繞過編譯就無效啦 我們可以通過方法的反射來操作,繞過編譯 eg: ArrayList list1=new ArrayList(); ArrayList<String> list2=new ArrayList<String>(); Class c1=list1.getClass(); Class c2=list2.getClass(); System.out.print(c1==c2);//true Method m=c2.getMethod("add",Object.class); m.invoke(list2,20);//向list2集合中添加一個int 型的值,可以繞過編譯,添加成功 但是不能直接foreach list2集合的,會報類型轉換錯誤查看全部
-
方法的反射: 1.獲取A類中的print(int,int)方法: ①要獲取一個方法就是獲取類的信息,獲取類的信息首先要獲取類的類類型 A a1=new A(); Class c= a1.getClass(); ②獲取方法 由名稱和參數列表來決定,getMethod獲取的是public方法,getDelcaredMethod獲取自己聲明的方法 Method m =c.getMethod(methodName,paramtypes);//paramtypes可以用數組的形式 表示new Class[]{int.class,int.class},也可以直接列舉類類型 2.方法的反射操作:是用m對象來進行方法調用,和a1.print(10,20)調用的方法相同 m.invoke(a1,new Object[]{10,20}) Object o=m.invoke(對象名,參數);//方法如果沒有返回值返回null,如果有返回值返回具體值,參數可用數組的方式表示,也可以直接列舉,沒有參數就不寫 public Class A{ public void print(){}; public void Print(Sting a,String b){} public void Print(int a,int b){}; } public Class B{ public static void main(String[] args){ A a1 = new A(); Class c= a1.getclass; Method getMet=c.getMethod("print",String.class,String.class);//忘了加引號 Object obj=getMet.invoke(a1,"df","df"); } }查看全部
-
只要在類里面聲明的都有類類型 public static void pringClassMessage(Object object){ //要獲取類的信息,首先要獲取類的類型 Class c=object.getClass();//傳遞的是哪個子類的對象,c就是該子類的類類型 //獲取類的名稱 System.out.println("類的名稱是:"+c.getName()); /* * Method類,方法對象 * 一個成員方法就是一個Method對象 * getMethods()方法獲取的是所有public函數,包括父類繼承而來的 * getDeclaredMethods()獲取的是所有該類自己聲明的方法,不問訪問權限 * */ Method[] ms=c.getMethods();//c.getDeclaredMethods(); for (int查看全部
-
1、靜態加載類,是編譯時刻加載;動態加載類,是運行時刻加載 2、new創建對象:是靜態加載類,在編譯時刻就需要加載所有的【可能使用到的類】。有一個類有問題(如不存在),都不能通過編譯,會報錯。 3、Class.forName()通過動態加載類,可以用到一個類時,才進行加載。 【功能性的類盡量使用動態加載,并對新添的類實現功能性接口(標準),這樣就不用重新編譯】 1.Clss.forName("類的全稱") 不僅表示了類的類類型,還代表了動態加載類 請大家區分編譯、運行 編譯時刻加載類是靜態加載類,運行時刻加載類是動態加載類 2.//new 創建對象是靜態加載類,在編譯時刻就需要加載所有的可能使用到的類。eg word excel //通過動態加載類可以解決該問題 //動態加載類,在運行時刻加載 Class c=Class.forName(args[0]); //通過類類型,創建該類對象 OfficeAble oa=(OfficeAble)c.newInstance();//word 和excel都想加載就用一個標準oa oa.start(); //編寫一個標準接口 interface OfficeAble { public void start(); } //讓word 和excel繼承oa class Excel implements OfficeAble { public void start(){ } }查看全部
-
Java反射機制——通過反射了解集合泛型的本質**特別重要*** 1:反射的操作都是編譯之后的操作,也就是運行時刻; 2:java中集合的泛型是防止錯誤輸入的;只在編譯階段有效,只要繞過編譯就無效啦 我們可以通過方法的反射來操作,繞過編譯 eg: ArrayList list1=new ArrayList(); ArrayList<String> list2=new ArrayList<String>(); Class c1=list1.getClass(); Class c2=list2.getClass(); System.out.print(c1==c2);//true Method m=c2.getMethod("add",Object.class); m.invoke(list2,20);//向list2集合中添加一個int 型的值;繞過編譯 這時就不能直接foreach list2集合的,會報類型轉換錯誤查看全部
-
方法的反射:****特別重要******* 1.獲取A類中的print(int,int)方法: ①要獲取一個方法就是獲取類的信息,獲取類的信息首先要獲取類的類類型 A a1=new A(); Class c= a1.getClass(); ②獲取方法 由名稱和參數列表來決定,getMethod獲取的是public方法,getDelcaredMethod獲取自己聲明的方法 Method m =c.getMethod(methodName,paramtypes);//paramtypes可以用數組的形式表示new Class[]{int.class,int.class},也可以直接列舉類類型 2.方法的反射操作:是用m對象來進行方法調用,和a1.print(10,20)調用的方法相同m.invoke(a1,new Object[]{10,20}) Object o=m.invoke(對象名,參數);//方法如果沒有返回值返回null,如果有返回值返回具體值,參數可用數組的方式表示,也可以直接列舉,沒有參數就不寫查看全部
-
Java反射機制——獲取成員變量&構造函數 一、成員變量是java.lang.reflect.Field的對象 1、Field類封裝了關于成員變量的操作 2、Field[] fs = c.getFields()方法獲取所有public的成員變量Field[]信息 3、c.getDeclaredFields獲取的是該類自己聲明的成員變量信息 4、field.getType()獲得成員類型的類類型 5、field.getName()獲得成員的名稱 二、構造函數是java.lang.Constructor類的對象 1、通過Class.getConstructor()獲得Constructor[]所有公有構造方法信息 2、建議getDeclaredConstructors()獲取自己聲明的構造方法 3、Constructor.getName():String 4、Constructor.getParameterTypes():Class[]查看全部
-
挺好的,老師講的,挺難得,查看全部
-
package com.imooc.reflect; import java.lang.reflect.Method; public class ClassUtil { /** * 打印類的信息,包括類的成員函數、成員變量 * @param obj */ public static void printClassMessage(Object obj){ //獲取類的信息,首先要獲取類的類類型 Class c=obj.getClass();//傳遞的是哪個子類的對象,c就是該子類的類類型 /*注釋:getClass()是native聲明的一個本地方法:java里面有一門技術JNI,專門由于制作本地方法,該方法用Java聲明,C語言去實現,在Java里面去調用*/ System.out.println("類的全名:"+c.getName());//獲取類的全名 /** * Method類,方法對象 * 一個成員方法就是一個Method對象 * getMethods()方法獲取的是所有的public的函數,包括繼承自父類的 * getDeclaredMethods()獲取的是該類聲明的所有方法,不論訪問權限 */ Method[] methods=c.getMethods();//包含繼承自父類的 for(int i=0;i<methods.length;i++){ Class returnType=methods[i].getReturnType();//方法的返回值類型的類類型 System.out.print(returnType.getName()+" "); System.out.print(methods[i].getName()+"(");//打印方法名 //獲取參數類型 Class [] paramTypes=methods[i].getParameterTypes();//參數列表的類型的類類型 for(Class c1:paramTypes){ System.out.print(c1.getName()+","); } System.out.println(")"); } } }查看全部
-
***這節的動態加載類很有意義の*** 1、Class.forName("類的全稱");不僅表示該類的類類型,還代表了動態加載類; 2、需明確區分編譯、運行 3、編譯時刻加載類是靜態加載類、運行時刻加載類是動態加載類; (1)new創建對象是靜態加載類,在編譯時刻就需要加載所有可能用到的類; (1)查看全部
舉報
0/150
提交
取消