Class對象

[ API] java.lang.Class 1.0

  • static Class forName(String className)
    返回描述類名為className的Class對象蚣抗。

  • String getName()
    返回類的全限定的類名(包含包名)匆瓜。

  • String getSimpleName()
    返回不含包名的類名

  • String getCanonicalName()
    返回全限定的類名

實例Test.java:

class Dog  {
    static {
        System.out.println("我被加載了");
    }
}
public class Test {
    public static void main(String[] args) {
        Class c = null;
        try {
             c = Class.forName("com.test.Dog");
            System.out.println(c.getName());
            System.out.println(c.getSimpleName());
            System.out.println(c.getCanonicalName());
        }catch (ClassNotFoundException e){
            System.exit(1);
        }
        try{
            Class.forName("com.test.Dog");
        }catch (ClassNotFoundException e){
            System.exit(1);
        }
    }
}

輸出:

我被加載了
com.test.Dog
Dog
com.test.Dog

forName()是取得Class對象的引用的一種方法。第二個try語句沒有輸出任何結(jié)果椅棺,說明痕寓,如果類Dog還沒有被加載就會加載它挣棕,如果加載了就不會再次加載厨疙。

[API] java.lang.Object 1.0

  • Class getClass()
    返回表示該對象的實際類型的Class引用

實例Test.java:

class Dog  {
    static {
        System.out.println("我被加載了");
    }
}
public class Test {
    public static void main(String[] args) {
        Dog dog= new Dog();
        Class c1 = dog.getClass();
        System.out.println(c1.getName());
        System.out.println(c1.getSimpleName());
        System.out.println(c1.getCanonicalName());
    }
}

上述代碼表明墙牌,當我們知道了某個類型的具體對象后,那就可以通過調(diào)用getClass()方法來獲取Class引用了魄缚。它是屬于Object類的一部分宝与。

[ API] java.lang.Class 1.0

  • Class[] getInterfaces()
    返回的是這個Class對象實現(xiàn)的接口的Class對象數(shù)組。

  • boolean isInterface()
    返回這個Class對象是否表示一個接口冶匹。返回的是基類习劫,而不是接口。

  • Object newInstance()
    返回這個類的新實例嚼隘。返回的是一個Object引用诽里,但是這個引用指向這個類的類型對象。使用newInstance()來創(chuàng)建的類飞蛹,必須帶有默認的構(gòu)造器谤狡。

  • Class getSuperClass()
    返回你可以用來進一步查詢的Class對象匿乃。

實例Test.java:

 interface Run {
    void run();
}

interface Jump {
    void jump();
}

class Person {
    private String name = "defaultName";
    private int age = 0;

    Person() {}

    Person(String name, int age) {
      this.name = name;
      this.age = age;
  }
    public String getName(){
        return name;
  }
    public int getAge(){
        return age;
    }
}

class Sportsman extends Person implements Run, Jump {
    Sportsman(String name, int age) {
        super(name, age);
    }

    public void run() {

    }

    public void jump() {

    }
}

public class Test {
    public static void main(String[] args) {
        Sportsman sportsman = new Sportsman("noshower", 22);
        Class c1 = sportsman.getClass();
        Class c2 = null;
        try {
            c2 = Class.forName("com.test.Jump");
        } catch (ClassNotFoundException e) {
            System.exit(1);
        }

        System.out.println("c1 is interface? " + c1.isInterface());
        System.out.println("c2 is interface? " + c2.isInterface());
        Class[] cc = c1.getInterfaces();
        for (Class face : cc) {
            System.out.println("face name is " + face.getName());
        }
        Class parent = c1.getSuperclass();
        System.out.println("parent is " + parent.getName());
        Object obj = null;
        try {
            obj = parent.newInstance();
        }catch (InstantiationException e){
            System.exit(1);
        }catch (IllegalAccessException e){
            System.exit(1);
        }
        System.out.println(" name is "+((Person)obj).getName()+"age is "+((Person) obj).getAge());
    }
}

輸出:

c1 is interface? false
c2 is interface? true
face name is com.test.Run
face name is com.test.Jump
parent is com.test.Person
 name is defaultNameage is 0

類字面量語法

生成對Class對象的引用,即使用類字面常量豌汇。就像下面這樣:

FancyToy.class

類字面常量不僅可以應用于普通的類,也可以應用于接口泄隔、數(shù)組以及基本數(shù)據(jù)類型拒贱。另外基本數(shù)據(jù)類型的包裝器類,還有一個標準的字段TYPE佛嬉。TYPE字段是一個引用逻澳,指向?qū)幕緮?shù)據(jù)類型Class對象。如下所示:

..... 等介于....
boolean.class Boolean.TYPE
char.class Character.TYPE
byte.class Byte.TYPE
short.class Short.TYPE
int.class Integer.TYPE
long.class Long.TYPE
float.class Float.TYPE
double.class Double.TYPE
void.class Void.TYPE

注意:當使用".class"來創(chuàng)建對Class對象的引用時暖呕,不會自動地初始化該Class對象斜做。

初始化被延遲到了對靜態(tài)方法或非常數(shù)靜態(tài)域進行首次引用時才執(zhí)行。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末湾揽,一起剝皮案震驚了整個濱河市瓤逼,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌库物,老刑警劉巖霸旗,帶你破解...
    沈念sama閱讀 222,729評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異戚揭,居然都是意外死亡诱告,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,226評論 3 399
  • 文/潘曉璐 我一進店門民晒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來精居,“玉大人,你說我怎么就攤上這事潜必⊙プ耍” “怎么了?”我有些...
    開封第一講書人閱讀 169,461評論 0 362
  • 文/不壞的土叔 我叫張陵磁滚,是天一觀的道長空猜。 經(jīng)常有香客問我,道長恨旱,這世上最難降的妖魔是什么辈毯? 我笑而不...
    開封第一講書人閱讀 60,135評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮搜贤,結(jié)果婚禮上谆沃,老公的妹妹穿的比我還像新娘。我一直安慰自己仪芒,他們只是感情好唁影,可當我...
    茶點故事閱讀 69,130評論 6 398
  • 文/花漫 我一把揭開白布耕陷。 她就那樣靜靜地躺著,像睡著了一般据沈。 火紅的嫁衣襯著肌膚如雪哟沫。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,736評論 1 312
  • 那天锌介,我揣著相機與錄音嗜诀,去河邊找鬼。 笑死孔祸,一個胖子當著我的面吹牛隆敢,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播崔慧,決...
    沈念sama閱讀 41,179評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼拂蝎,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了惶室?” 一聲冷哼從身側(cè)響起温自,我...
    開封第一講書人閱讀 40,124評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎皇钞,沒想到半個月后捣作,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,657評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡鹅士,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,723評論 3 342
  • 正文 我和宋清朗相戀三年券躁,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片掉盅。...
    茶點故事閱讀 40,872評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡也拜,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出趾痘,到底是詐尸還是另有隱情慢哈,我是刑警寧澤,帶...
    沈念sama閱讀 36,533評論 5 351
  • 正文 年R本政府宣布永票,位于F島的核電站卵贱,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏侣集。R本人自食惡果不足惜键俱,卻給世界環(huán)境...
    茶點故事閱讀 42,213評論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望世分。 院中可真熱鬧编振,春花似錦、人聲如沸臭埋。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,700評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至畅蹂,卻和暖如春健无,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背液斜。 一陣腳步聲響...
    開封第一講書人閱讀 33,819評論 1 274
  • 我被黑心中介騙來泰國打工累贤, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人旗唁。 一個月前我還...
    沈念sama閱讀 49,304評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像痹束,于是被迫代替她去往敵國和親检疫。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,876評論 2 361

推薦閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法祷嘶,類相關(guān)的語法屎媳,內(nèi)部類的語法,繼承相關(guān)的語法论巍,異常的語法烛谊,線程的語...
    子非魚_t_閱讀 31,667評論 18 399
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn)嘉汰,斷路器丹禀,智...
    卡卡羅2017閱讀 134,716評論 18 139
  • Class對象是存放在堆區(qū)的,不是方法區(qū)鞋怀,這點很多人容易犯錯双泪。類的元數(shù)據(jù)(元數(shù)據(jù)并不是類的Class對象。Clas...
    值得一看的喵閱讀 5,771評論 0 2
  • 昨天去上選修課密似,老師說她明天都會寫日記焙矛,日記是一個很好的載體。所以盡管我文筆不好残腌,我也想寫些什么村斟。 昨天的天氣很好...
    岳喬子閱讀 251評論 0 0
  • #玩卡不卡·每日一抽# 每一位都可以通過這張卡片覺察自己: 1蟆盹、直覺他叫什么名字?小強 2闺金、他幾歲了日缨? 8歲 3、...
    天蝎的北半球閱讀 80評論 0 0