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