首頁 > 軟體

Java中class和Class的區別範例詳解

2022-04-02 19:01:46

一.class與Class區別

class是Java中的關鍵字,如public class Xxx 或者 class Xxx ,在宣告Java類時使用。 而Class是一個類。 我們通常認為類是物件的抽象和集合,Class就相當於是對類的抽象和集合。 也可以認為物件是類的範例,類是Class的範例。

二.Class介紹

Class是一個類。如下圖,它在java.lang包中。

它的建構函式是private屬性,所以我們不能直接new一個Class物件出來,如下圖註釋段所說: “私有建構函式。只有Java虛擬機器器建立類物件。不使用此建構函式,並阻止生成預設建構函式。”

三.如何得到Class物件

1.通過getClass()方法獲取到Class物件

getClass()方法是Object類的一部分,如下圖:

如果我們已經建立了某個型別的物件,那麼我們可以通過getClass()方法來獲取該型別的Class的物件:

package Task;
import org.junit.Test;
public class Try0 {
    @Test
    public void toTry() throws ClassNotFoundException {
//        //forName方法:引數為其類的路徑
//        Class a = Class.forName("Task.Try1");
//        System.out.println(a);
        //通過物件得到類
        Try1 try1 = new Try1();
        Class b = try1.getClass();
        System.out.println(b);
    }
}

class Try1{
}

測試執行結果:

2.通過forName()方法獲取到Class物件

Class.forName方法是Class類的一個靜態方法,如下圖:

所以可以直接通過Class.forName("類的路徑")獲取Class物件:

package Task;
import org.junit.Test;
public class Try0 {
    @Test
    public void toTry() throws ClassNotFoundException {
        //forName方法:引數為其類的路徑
        Class a = Class.forName("Task.Try1");
        System.out.println(a);
    }
}

class Try1{
}

測試執行截圖:

3.類.class獲得Class物件(類字面常數)

package Task;
import org.junit.Test;
public class Try0 {
    @Test
    public void toTry() throws ClassNotFoundException {
//        //forName方法:引數為其類的路徑
//        Class a = Class.forName("Task.Try1");
//        System.out.println(a);

//        //通過物件得到類
//        Try1 try1 = new Try1();
//        Class b = try1.getClass();
//        System.out.println(b);

        //類字面常數
        Class c = Try1.class;
        System.out.println(c);
    }
}

class Try1{
}

測試執行結果:

四.Class常用方法

package Task;
import org.junit.Test;
public class Try0 {
    @Test
    public void toTry() throws ClassNotFoundException {
//        //forName方法:引數為其類的路徑
//        Class a = Class.forName("Task.Try1");
//        System.out.println(a);

        //通過物件得到類
        Try1 try1 = new Try1();
        Class b = try1.getClass();
        System.out.println(b);

//        //類字面常數
//        Class c = Try1.class;
//        System.out.println(c);
        //isInterface方法,判斷是否為介面
        System.out.println(b.isInterface());
        //isArray方法,判斷是否為陣列
        System.out.println(b.isArray());
        //isPrimitive方法,判斷是否是基本型別,例如int是基本型別,Integer為包裝類
        System.out.println(b.isPrimitive());
        //isAnnotation方法,判斷是否為註解,註解如常見的重寫註解@Override,我們所用的單元測試@Test註解
        System.out.println(b.isAnnotation());
        //isInstance方法引數是一個物件,判斷該物件try1對應的類Try1是否是b的物件
        System.out.println(b.isInstance(try1));
        //getClassLoader方法,獲取類載入器
        System.out.println(b.getClassLoader());
        //getSuperclass方法,獲取父類別資訊
        System.out.println(b.getSuperclass());
        //getGenericSuperclass方法,也是獲取父類別資訊
        System.out.println(b.getGenericSuperclass());
        //getComponentType方法,如果b的型別是陣列,則獲取陣列裡元素的型別
        System.out.println(b.getComponentType());
        //getDeclaredClasses方法,獲取b繼承於哪個類
        System.out.println(b.getDeclaredClasses());


        //幾個獲取name的方法:
        //getName方法
        System.out.println(b.getName());
        //getTypeName方法
        System.out.println(b.getTypeName());
        //getCanonicalName方法
        System.out.println(b.getCanonicalName());
        //getSimpleName方法
        System.out.println(b.getSimpleName());

//        以下還有一些方法只列舉出來
//        getTypeParameters方法,獲取泛型類中的泛型引數陣列
//        getClasses方法,獲取Class物件中public修飾的內部類
//        getDeclaredClasses方法,獲取Class物件中的內部類,繼承成員不包含在內
//        getConstructors方法,獲取public修飾的建構函式
//        getConstructor方法,查詢對應的建構函式
//        getDeclaredConstructors方法,獲取Class物件中的建構函式
    }
}

class Try1 {
}

輸出截圖如下:

總結

到此這篇關於Java中class和Class區別的文章就介紹到這了,更多相關Java class和Class區別內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com