欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java中class和Class的區(qū)別示例詳解

 更新時間:2022年04月02日 15:31:00   作者:YuShiwen  
class 是java的關(guān)鍵字,在聲明java類時使用,Class是java JDK提供的一個類,完整路徑為java.lang.Class,下面這篇文章主要給大家介紹了關(guān)于Java中class和Class區(qū)別的相關(guān)資料,需要的朋友可以參考下

一.class與Class區(qū)別

class是Java中的關(guān)鍵字,如public class Xxx 或者 class Xxx ,在聲明Java類時使用。 而Class是一個類。 我們通常認為類是對象的抽象和集合,Class就相當于是對類的抽象和集合。 也可以認為對象是類的實例,類是Class的實例。

二.Class介紹

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

它的構(gòu)造函數(shù)是private屬性,所以我們不能直接new一個Class對象出來,如下圖注釋段所說: “私有構(gòu)造函數(shù)。只有Java虛擬機創(chuàng)建類對象。不使用此構(gòu)造函數(shù),并阻止生成默認構(gòu)造函數(shù)。”

三.如何得到Class對象

1.通過getClass()方法獲取到Class對象

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

如果我們已經(jīng)創(chuàng)建了某個類型的對象,那么我們可以通過getClass()方法來獲取該類型的Class的對象:

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

class Try1{
}

測試運行結(jié)果:

2.通過forName()方法獲取到Class對象

Class.forName方法是Class類的一個靜態(tài)方法,如下圖:

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

package Task;
import org.junit.Test;
public class Try0 {
    @Test
    public void toTry() throws ClassNotFoundException {
        //forName方法:參數(shù)為其類的路徑
        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方法:參數(shù)為其類的路徑
//        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{
}

測試運行結(jié)果:

四.Class常用方法

package Task;
import org.junit.Test;
public class Try0 {
    @Test
    public void toTry() throws ClassNotFoundException {
//        //forName方法:參數(shù)為其類的路徑
//        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方法,判斷是否為數(shù)組
        System.out.println(b.isArray());
        //isPrimitive方法,判斷是否是基本類型,例如int是基本類型,Integer為包裝類
        System.out.println(b.isPrimitive());
        //isAnnotation方法,判斷是否為注解,注解如常見的重寫注解@Override,我們所用的單元測試@Test注解
        System.out.println(b.isAnnotation());
        //isInstance方法參數(shù)是一個對象,判斷該對象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的類型是數(shù)組,則獲取數(shù)組里元素的類型
        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方法,獲取泛型類中的泛型參數(shù)數(shù)組
//        getClasses方法,獲取Class對象中public修飾的內(nèi)部類
//        getDeclaredClasses方法,獲取Class對象中的內(nèi)部類,繼承成員不包含在內(nèi)
//        getConstructors方法,獲取public修飾的構(gòu)造函數(shù)
//        getConstructor方法,查找對應的構(gòu)造函數(shù)
//        getDeclaredConstructors方法,獲取Class對象中的構(gòu)造函數(shù)
    }
}

class Try1 {
}

輸出截圖如下:

總結(jié)

到此這篇關(guān)于Java中class和Class區(qū)別的文章就介紹到這了,更多相關(guān)Java class和Class區(qū)別內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 如何使用 Shell 腳本查看多個服務器的端口是否打開的方法

    如何使用 Shell 腳本查看多個服務器的端口是否打開的方法

    這篇文章主要介紹了如何使用 Shell 腳本來查看多個服務器的端口是否打開的方法,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-06-06
  • Java基礎入門之switch怎么使用枚舉

    Java基礎入門之switch怎么使用枚舉

    在Java開發(fā)中,switch語句是一種常用的流控制語句,而當使用枚舉類型作為條件時,我們常常會遇到報錯問題,那么該如何解決呢,下面就來詳細講講
    2023-06-06
  • Java實現(xiàn)幾種序列化方式總結(jié)

    Java實現(xiàn)幾種序列化方式總結(jié)

    本篇文章主要介紹了Java實現(xiàn)幾種序列化方式總結(jié),包括Java原生以流的方法進行的序列化、Json序列化、FastJson序列化、Protobuff序列化。有興趣的可以了解一下。
    2017-03-03
  • 淺談Java8 的foreach跳出循環(huán)break/return

    淺談Java8 的foreach跳出循環(huán)break/return

    這篇文章主要介紹了Java8 的foreach跳出循環(huán)break/return,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Java8深入學習系列(三)你可能忽略了的新特性

    Java8深入學習系列(三)你可能忽略了的新特性

    一提到Java 8就只能聽到lambda,但這不過是其中的一個而已,Java 8還有許多新的特性,有一些功能強大的新類或者新的用法,還有一些功能則是早就應該加到Java里了,所以下面這篇文章主要給大家介紹了關(guān)于Java8中大家可能忽略了的一些新特性,需要的朋友可以參考下。
    2017-08-08
  • Spring IOC源碼剖析_如何整體認知Spring體系結(jié)構(gòu)

    Spring IOC源碼剖析_如何整體認知Spring體系結(jié)構(gòu)

    這篇文章主要介紹了Spring IOC源碼剖析_如何整體認知Spring體系結(jié)構(gòu)方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • springmvc+mybatis 做分頁sql 語句實例代碼

    springmvc+mybatis 做分頁sql 語句實例代碼

    本文通過一段實例代碼給大家介紹了springmvc+mybatis 做分頁sql 語句的方法,代碼簡單易懂,非常不錯,具有參考借鑒價值,需要的朋友參考下吧
    2017-07-07
  • SpringSecurity整合Jwt過程圖解

    SpringSecurity整合Jwt過程圖解

    這篇文章主要介紹了SpringSecurity整合Jwt過程圖解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-01-01
  • 詳解配置類為什么要添加@Configuration注解

    詳解配置類為什么要添加@Configuration注解

    這篇文章主要介紹了詳解配置類為什么要添加@Configuration注解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-05-05
  • 基于創(chuàng)建Web項目運行時出錯的解決方法(必看篇)

    基于創(chuàng)建Web項目運行時出錯的解決方法(必看篇)

    下面小編就為大家?guī)硪黄趧?chuàng)建Web項目運行時出錯的解決方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08

最新評論