-
動態加載類,在運行時刻加載
Class c = Class.forName(args[0]);
通過類類型,創建該類對象
OfficeAble oa = (officeAble)c.newInstance();????//officeAble為一個接口,里面有start方法
oa.start;
查看全部 -
Class.forName("類的全稱")
不僅表示了類的類類型,還代表了動態加載類。
編譯時加載類是靜態加載類,運行時加載類是動態加載類。
查看全部 -
我們完全可以通過類的類類型創建該類的對象實例,即通過c1 or c2 or c3 創建Foo的實例
Foo foo = (Foo)c1.newInstance();
查看全部 -
Foo foo1 = new Foo();
任何一個類都是Class的實例對象,這個實例對象有三種表示方式
第一種表示方式:實際在告訴我們任何一個類都有一個隱含的靜態成員變量class
class c1 = Foo.class; //在知道類名時使用
第二種表示方式:已經知道該類的對象通過getClass方式
Class c2 = foo1.getClass; //在知道對象時使用
在官網c1、c2表示了Foo類的類類型(class type)
萬事萬物皆對象,類也是對象,是Class類的實例對象,
這個對象我們成為該類的類類型。
第三種表達方式:
Class c3 = null;
try{
c3 = Class.forName("com.imooc.reflect.Foo");
}catch(ClassNotFoundException e){
e.printfStackTrace();
}
注意:c1=c2=c3 一個類只可能是Class類的一個實例對象.
查看全部 -
Class aClass = Class.forName("完整的類名");
//調用類類型進行實例化時,類中必須有無參的構造函數
aClass.newInstace();
查看全部 -
靜態類似一次性?
動態則可回收?
(暫時還不知道該如何理解,等以后理解更深了再回頭看看這個問題,如果有大佬看到這個筆記也可以私聊告訴我一聲,麻煩了。
查看全部 -
任何一個類都是Class的實例對象,有三種方法表示這個實例對象
class屬性(隱含的靜態成員變量class),如Class c1 = Foo.class
getClass()方法,如Class c2 = foo1.getClass()
Class.forName()方法,會拋出異常
查看全部 -
編譯時刻加載類是靜態加載類.
運行時刻加載類是動態加載類.
查看全部 -
類 也是一個對象.
這個對象我們把它稱之為"類類型"
查看全部 -
每個對象所屬的類就是java.lang.Class的實例
查看全部 -
泛型,編譯階段有效
查看全部 -
返回值類型的類類型
返回值類型
查看全部 -
我們創建的每一個類(如a),都是Class的實例變量,通過new方式創建類對象
a的實例變量,套了兩層
查看全部 -
new 創建對象是靜態加載類:
編譯時需將其中所有的類加載進來,如共有100個類,其中出現1個類有問題,其他99個類均不能正常加載。例如:
????? ? /*如需求去掉Excel類功能,但保留Word功能,代碼中Word在前,則此時Word功能也無法執行*/
????????if("Word".equals(arg[0])){
????? ? Word w = new Word();
????????}
????????if("Excel".equals(args.[0])){
????????Excel e = new Excel();
????????}????
2.動態加載:用哪個就加載哪個,不用不加載
Class OfficeBetter{
????publice void static main(String[] args){
????????//動態加載類,在運行時刻加載
????????Class c = Class.forName(args[0]);
????????//通過返回類類型,創建該類對象
????????類名 待建類名 = (類名) c.newInstance();?
????????待建類名.start();
????}
}
【注意】
//下面一行可用Interface編寫標準,防不同類做強制轉換時報錯
*********類名 待建類名 = (類名) c.newInstance();*************
//例如:
OfficeAble oa = (OfficeAble) c.newInstance();
//新建一個接口文件:
interface OfficeAble{
????public void start();
}
//讓接口在待強制轉換類型的類中生效
class Word implements OfficeAble{
? ? public static void start(){
????System.out.println("This is Word");
????}
}
//不被轉換類型的類不生效OfficeAble接口
class Excel{
????publice static start(){
????????System.Out.println("This is Excel");
????}
}
//則????OfficeAble oa = (OfficeAble) c.newInstance();????就會自動創建Word類的對象,而不創建Excel類的對象
查看全部 -
1.創建一個類:
知道類名:直接.class
Class Name1 = Name.class
知道類的對象:使用getClass()方法
Name name = new Name();
Class name1 = name.getClass();
全稱創建類:
Class name = null;
name = Class.forName("com.packagename.classname.classname_toCreate");
類的對象創建:N類類型的對象創建N類的對象
//需要有無參的構造方法
Name name = new Name();
Name na =(Name) name.newInstance();
?
查看全部
舉報