java獲取類名的方法詳解

如果我們要獲取當前運行的類名,怎麼來獲取?

在Class類中,有如下一個方法:

比如現在有一個類Demo7.java

package pxx.test1;
 
public class Demo7 {
    public static void main(String[] args) {
        Demo7 demo7 = new Demo7();
        System.out.println(demo7.getClass().getName());
    }
}

運行結果:

上面就是直接這個對象調用瞭getClass()得到瞭Class對象,然後調用getName()得到運行類名。

那麼假如一個類繼承瞭一個類,又怎麼獲取當前類名還有父類名呢

Demo8.java

package pxx.test1;
 
public class Demo8 {
    int num;
    String name;
    public Demo8(){};
}

Demo9.java

package pxx.test1;
 
public class Demo9 extends Demo8 {
    public void test() {
        System.out.println(super.getClass().getName());
    }
    public static void main(String[] args) {
        new Demo9().test();
    }
}

上面我們就用super調用瞭一個getClass()方法,然後又來獲取類名,這裡需要註意的是super隻能調用父類的非靜態方法,並且不能在static方法中調用,因為super與this一樣,是基於對象操作的。說回來,這裡調用父類的getClass(),因此想來得到父類的類名,好瞭,運行一下

還是拿不到父類的類名 ,那我們去看一下這個geClass()方法,這個方法在Object對象裡面

 原來這個方法是一個final,也就是說,這個方法被其他類繼承可以,但是不能被重寫,因此,this.getClass與super.getClass最終調用的都是Object類中的getClass方法,而這個方法的定義是返回Object的運行時類,所以,上面會返回自己的類名而不是父類名。

那麼怎麼獲取父類的名字呢?

我們去到Class類裡面去看一下,發現有下面這個方法:

上面這個意思也就是說,會返回這個當前調用類的父類,拿到父類之後我們依然可以用getName()來獲取名字,上代碼

package pxx.test1;
public class Demo9 extends Demo8 {
    public void test() {
        System.out.println(super.getClass().getSuperclass().getName());
    }
    public static void main(String[] args) {
        new Demo9().test();
 
    }
}

 運行結果:

這樣就拿到瞭父類的類名 

到此這篇關於java獲取類名的問題詳解的文章就介紹到這瞭,更多相關java獲取類名內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: