-
有觀點把void也歸為基本數據類型
void.class
查看全部 -
double.class不等于Double.class
查看全部 -
功能性的類盡量用動態加載
查看全部 -
動態加載,用哪個加載哪個
查看全部 -
編譯時刻加載類為靜態加載類
運行時刻加載類為動態加載類
查看全部 -
可以通過一個類的類類型創建該類的對象實例。
前提是該類具有無參的構造方法
查看全部 -
獲得類類型的3種方法
查看全部 -
一個類只可能是Class類的一個實例對象
class Cat{}
Cat.class == new Cat().getClass() 成立
查看全部 -
一個類的類類型 (class type)是一個對象,Class類的對象
查看全部 -
類是java.lang.Class類的實例對象
任何類都是Class類的實例對象
查看全部 -
java中靜態成員和普通數據類型不是面向對象的
查看全部 -
Class類
面向對象編程,一切皆對象。
靜態成員,基本數據類型不是面向對象的
寫的每一個類都是java.lang.Class的實例對象
Class對象只有java的虛擬機可以創建其實例化對象,其構造器是私有的
任何一個類都是Class類的實例對象,這個實例對象有三種表示方式
舉例:
Foo foo1=new Foo();
Foo是Class類的實例對象,稱之為Foo類的類類型;可用以下三種表示法:
1. ?Class c1=Foo.class(任何一個類都有一個靜態成員變量class)
2.已知一個類的對象
Class c2=foo1.getClass();
c1,c2表示了Foo類的類類型(class type)
一個類只有一個類類型,只是表達方式不同
3. Class c3=null;
try{
c3=Class.forName("Foo");
}catch(ClassNotFoundException e){
e.printStackTrace();
}
可以通過類的類類型創建該類的對象實例,通過c1orc2orc3創建Foo的對象
Foo foo=(Foo)c1.newInstance();需要無參數的構造方法
動態加載類
區分編譯/運行
編譯時加載類稱靜態加載類,運行時加載類是動態加載類?
new創建對象 是靜態加載類,在編譯時刻就需要加載所有可能使用到的類
通過動態加載類解決靜態加載存在的問題
class OfficeBetter
{
public static void main(String[] args)
{
try
{Class c=Class.forName(args[0]);//動態加載類,在運行時加載。
//通過類類型創建對象
OfficeAble oa=(OfficeAble)c.newInstance();
//interface OfficeAble
{
public void start();
}
oa.start();
}
catch(Exception e)
{
e.printStackTrace();
}
查看全部 -
一個類只可能是Class類的一個實例對象
查看全部 -
編譯時刻加載類是靜態加載類,運行時刻加載類是動態加載類 new 創建對象是靜態加載類,在編譯時刻就需要加載所有的可能使用到的類通過Class a=Class.forName(arg[0]);此時為動態加載,因為編譯時不知道使用哪個類,因此編譯沒有加載任何類,通過編譯。運行時,根據 Java OfficeBetter Word (Word為arg[0],也是類類型),去確定a是哪個類。這就是動態加載。如果word不存在,此時運行會報錯。這就是為何有時候會出現編譯通過,運行報錯的原因。 動態加載一個好處,就是可以隨時增加需要編譯的類。例如沒有excel類,只有word類,也可以運行,需要excel類時再由程序員寫此類(為了能統一控制,word類、excel類需要繼承同一個父類或者繼承同一個接口)。
查看全部 -
萬事萬物皆為對象,類也是對象,任何一個類都是Class類的對象。 Class c1就聲明了一個Class類的實例對象,但是不能通過new關鍵字來創建,而是有一下三種方法創建。 1、Class c1 = Foo.class;//任何一個類都有一個隱含的靜態成員變量class,如果Foo已經存在,可以用這種方法來創建Foo的類類型(class type),即Foo類的類類型就是Class類的一個實例對象。 2、Class c2 = foo.getClass();//如果Foo類的對象foo已經存在,可以通過這種方法來創建Foo類的類類型。 并且,c1==c2是true的,因為任何一個類只有一個類類型。 3、Class c3 = null; c3 = Class.forName("com.imooc.reflect.Foo");//通過Foo的全稱來創建 可知,c2==c3也是true的。 而且,可以用類類型來創建Foo的實例對象,如下 Foo foo1 = (Foo)c1.newInstance();//前提是Foo有無參的構造方法
查看全部
舉報