-
Method類,方法對象
一個成員方法就是一個Method對象
getMethods()方法獲取的是所有的public的函數,包括父類繼承而來的
getDeclaredMethods()獲取的是所有該類自己聲明的方法,不管訪問權限
查看全部 -
????????????????????????????????????????????Class類
Class.forName("類的全稱")
不僅表示了類的類類型,還代表了動態加載類
編譯時刻加載類是靜態加載類、運行時刻加載類是動態加載類
查看全部 -
class Foo{}
Foo foo1=new Foo();
任何一個類都是Class的實例對象,這個實例對象有三種表示方式
第一種表示方式????任何一個類都有一個隱含的靜態成員變量class
????Class c1=Foo.class;
第二種表達方式????已經知道該類的對象通過getClass方法
????Class c2=foo1.getClass();
c1,c2表示了Foo類的類類型(class type)
第三種表達方式
????Class c3=null;
????c3=Class.forName("路徑 ? 包.類名");
我們完全可以通過類的類類型創建該類的對象實例
Foo foo=(Foo) c1.newInstance();
查看全部 -
獲取一個類的類類型(java.lang.Class的實例對象)的三種方式: 1 類名.class 如: User.class 2 類的實例對象.getClass 如: user.getClass 3 Class.forName("類的全限定名") 如: Class.forName("com.zhuyc.User")查看全部
-
泛型的本質:編譯之后的泛型是去泛型化的
Java中集合的泛型,是防止錯誤輸入的,只在編譯階段有效,繞過編譯就無效了
驗證,我們可以通過方法的反射操作,繞過編譯,繞過編譯操作就繞過了泛型
動態代理中,要執行某個類的方法時,先生成該類的代理類,通過代理類去調用目標類的方法,從而可以在代理類中執行 額外的邏輯。為了動態生成代理類,而不事先生成,我們就需要利用到反射。
查看全部 -
Java方法反射的基本操作:
如何獲取某個方法:方法的名稱和方法的參數列表才能唯一決定某個方法
方法反射的操作:method.invoke(對象,參數列表)
查看全部 -
先得到類的類類型,就可以進行對該類的各種常規操作了
查看全部 -
編譯和運行怎么區分?
編譯時刻加載類是靜態加載類,運行時刻加載類是動態加載類
new 創建對象是靜態加載類,在編譯時刻就需要加載所有的可能使用到的類
通過動態加載類可以解決該問題,在運行時刻加載
查看全部 -
反射專題:
class類的使用:萬事萬物皆對象,但是普通的數據類型類不是對象,但是有包裝類,靜態的成員不是對象,類是誰的對象?類是java.lang.Class類 的實例對象
方法的反射,成員變量的反射,構造函數的反射,Java類加載機制
查看全部 -
反射的操作都是編譯之后的操作
查看全部 -
Class.forName("類的全稱")
不僅代表了類的類類型,還代表了動態加載類
編譯時刻 加載類是靜態加載類
運行時刻加載類是動態加載類
查看全部 -
new 創建對象是靜態加載類,在編譯時刻就需要加載所有的可能使用到的類
查看全部 -
反射查看全部
-
類名.class? ?類的類類型? ? (teacher所說類名.class是類的字節碼方便記憶)
類類型.getName();//打印類的全稱
類類型.getSimpleName();//打印不帶包名的類的名稱
基本數據類型,void關鍵字 都存在類類型
獲取類的信息,首先要獲取類的類類型(三種方法)
Class c=obj.getClass();????????//obj是哪個子類的對象,c就是該子類的類類型
//獲取類的名稱
c.getName();
//Method類,方法對象(一個成員方法就是一個method對象)
getMethods()方法獲取的是所有的public的函數,包括父類繼承而來的
getDeclaredMethods()獲取的是所有該類自己聲明的方法,不管訪問權限
查看全部 -
new 創建對象 是靜態加載類 ,在編譯時就需要加載所有的可能使用到的類
動態加載類就是避免整個程序不能編譯通過而影響正常的代碼的執行
具體方法:
//動態加載類,在運行時加載
Class c= Class.forName("類的全稱");
//通過類類型,創建該類對象
OfficeAble oa=(OfficeAble)c.newInstance();
oa.start();
具體使用的時候再來實現OfficeAble接口
查看全部
舉報