Java中class和Class的區(qū)別示例詳解
一.class與Class區(qū)別
class是Java中的關(guān)鍵字,如public class Xxx 或者 class Xxx ,在聲明Java類時使用。 而Class是一個類。 我們通常認(rèn)為類是對象的抽象和集合,Class就相當(dāng)于是對類的抽象和集合。 也可以認(rèn)為對象是類的實(shí)例,類是Class的實(shí)例。
二.Class介紹
Class是一個類。如下圖,它在java.lang包中。

它的構(gòu)造函數(shù)是private屬性,所以我們不能直接new一個Class對象出來,如下圖注釋段所說: “私有構(gòu)造函數(shù)。只有Java虛擬機(jī)創(chuàng)建類對象。不使用此構(gòu)造函數(shù),并阻止生成默認(rèn)構(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{
}測試運(yùn)行結(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{
}測試運(yùn)行截圖:

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{
}測試運(yùn)行結(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對應(yīng)的類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方法,查找對應(yīng)的構(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)文章
Springboot?前后端分離項目使用?POI?生成并導(dǎo)出?Excel的操作方法
在做一個?SpringBoot?前后端分離項目的時候,需要將數(shù)據(jù)存到?Excel中,用戶可以下載?Excel,具體實(shí)現(xiàn)是采用?Apache?強(qiáng)大的?POI,本文給大家介紹Springboot?前后端分離項目使用?POI?生成并導(dǎo)出?Excel相關(guān)知識,感興趣的朋友一起看看吧2023-09-09
java HttpClient傳輸json格式的參數(shù)實(shí)例講解
這篇文章主要介紹了java HttpClient傳輸json格式的參數(shù)實(shí)例講解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-01-01
Java多線程CountDownLatch的實(shí)現(xiàn)
本文主要介紹了Java多線程CountDownLatch的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-02-02
SpringBoot項目攔截器獲取Post方法的請求body實(shí)現(xiàn)
本文主要介紹了SpringBoot項目攔截器獲取Post方法的請求body,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-01-01
java啟動jar包設(shè)置啟動參數(shù)的實(shí)現(xiàn)
本文主要介紹了java啟動jar包設(shè)置啟動參數(shù)的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-06-06

