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

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

三.如何得到Class對(duì)象
1.通過(guò)getClass()方法獲取到Class對(duì)象
getClass()方法是Object類(lèi)的一部分,如下圖:

如果我們已經(jīng)創(chuàng)建了某個(gè)類(lèi)型的對(duì)象,那么我們可以通過(guò)getClass()方法來(lái)獲取該類(lèi)型的Class的對(duì)象:
package Task;
import org.junit.Test;
public class Try0 {
@Test
public void toTry() throws ClassNotFoundException {
// //forName方法:參數(shù)為其類(lèi)的路徑
// Class a = Class.forName("Task.Try1");
// System.out.println(a);
//通過(guò)對(duì)象得到類(lèi)
Try1 try1 = new Try1();
Class b = try1.getClass();
System.out.println(b);
}
}
class Try1{
}測(cè)試運(yùn)行結(jié)果:

2.通過(guò)forName()方法獲取到Class對(duì)象
Class.forName方法是Class類(lèi)的一個(gè)靜態(tài)方法,如下圖:

所以可以直接通過(guò)Class.forName("類(lèi)的路徑")獲取Class對(duì)象:
package Task;
import org.junit.Test;
public class Try0 {
@Test
public void toTry() throws ClassNotFoundException {
//forName方法:參數(shù)為其類(lèi)的路徑
Class a = Class.forName("Task.Try1");
System.out.println(a);
}
}
class Try1{
}測(cè)試運(yùn)行截圖:

3.類(lèi).class獲得Class對(duì)象(類(lèi)字面常量)
package Task;
import org.junit.Test;
public class Try0 {
@Test
public void toTry() throws ClassNotFoundException {
// //forName方法:參數(shù)為其類(lèi)的路徑
// Class a = Class.forName("Task.Try1");
// System.out.println(a);
// //通過(guò)對(duì)象得到類(lèi)
// Try1 try1 = new Try1();
// Class b = try1.getClass();
// System.out.println(b);
//類(lèi)字面常量
Class c = Try1.class;
System.out.println(c);
}
}
class Try1{
}測(cè)試運(yùn)行結(jié)果:

四.Class常用方法
package Task;
import org.junit.Test;
public class Try0 {
@Test
public void toTry() throws ClassNotFoundException {
// //forName方法:參數(shù)為其類(lèi)的路徑
// Class a = Class.forName("Task.Try1");
// System.out.println(a);
//通過(guò)對(duì)象得到類(lèi)
Try1 try1 = new Try1();
Class b = try1.getClass();
System.out.println(b);
// //類(lèi)字面常量
// Class c = Try1.class;
// System.out.println(c);
//isInterface方法,判斷是否為接口
System.out.println(b.isInterface());
//isArray方法,判斷是否為數(shù)組
System.out.println(b.isArray());
//isPrimitive方法,判斷是否是基本類(lèi)型,例如int是基本類(lèi)型,Integer為包裝類(lèi)
System.out.println(b.isPrimitive());
//isAnnotation方法,判斷是否為注解,注解如常見(jiàn)的重寫(xiě)注解@Override,我們所用的單元測(cè)試@Test注解
System.out.println(b.isAnnotation());
//isInstance方法參數(shù)是一個(gè)對(duì)象,判斷該對(duì)象try1對(duì)應(yīng)的類(lèi)Try1是否是b的對(duì)象
System.out.println(b.isInstance(try1));
//getClassLoader方法,獲取類(lèi)加載器
System.out.println(b.getClassLoader());
//getSuperclass方法,獲取父類(lèi)信息
System.out.println(b.getSuperclass());
//getGenericSuperclass方法,也是獲取父類(lèi)信息
System.out.println(b.getGenericSuperclass());
//getComponentType方法,如果b的類(lèi)型是數(shù)組,則獲取數(shù)組里元素的類(lèi)型
System.out.println(b.getComponentType());
//getDeclaredClasses方法,獲取b繼承于哪個(gè)類(lèi)
System.out.println(b.getDeclaredClasses());
//幾個(gè)獲取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());
// 以下還有一些方法只列舉出來(lái)
// getTypeParameters方法,獲取泛型類(lèi)中的泛型參數(shù)數(shù)組
// getClasses方法,獲取Class對(duì)象中public修飾的內(nèi)部類(lèi)
// getDeclaredClasses方法,獲取Class對(duì)象中的內(nèi)部類(lèi),繼承成員不包含在內(nèi)
// getConstructors方法,獲取public修飾的構(gòu)造函數(shù)
// getConstructor方法,查找對(duì)應(yīng)的構(gòu)造函數(shù)
// getDeclaredConstructors方法,獲取Class對(duì)象中的構(gòu)造函數(shù)
}
}
class Try1 {
}輸出截圖如下:

總結(jié)
到此這篇關(guān)于Java中class和Class區(qū)別的文章就介紹到這了,更多相關(guān)Java class和Class區(qū)別內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
如何使用 Shell 腳本查看多個(gè)服務(wù)器的端口是否打開(kāi)的方法
這篇文章主要介紹了如何使用 Shell 腳本來(lái)查看多個(gè)服務(wù)器的端口是否打開(kāi)的方法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-06-06
Java基礎(chǔ)入門(mén)之switch怎么使用枚舉
在Java開(kāi)發(fā)中,switch語(yǔ)句是一種常用的流控制語(yǔ)句,而當(dāng)使用枚舉類(lèi)型作為條件時(shí),我們常常會(huì)遇到報(bào)錯(cuò)問(wèn)題,那么該如何解決呢,下面就來(lái)詳細(xì)講講2023-06-06
Java實(shí)現(xiàn)幾種序列化方式總結(jié)
本篇文章主要介紹了Java實(shí)現(xiàn)幾種序列化方式總結(jié),包括Java原生以流的方法進(jìn)行的序列化、Json序列化、FastJson序列化、Protobuff序列化。有興趣的可以了解一下。2017-03-03
淺談Java8 的foreach跳出循環(huán)break/return
這篇文章主要介紹了Java8 的foreach跳出循環(huán)break/return,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07
Java8深入學(xué)習(xí)系列(三)你可能忽略了的新特性
一提到Java 8就只能聽(tīng)到lambda,但這不過(guò)是其中的一個(gè)而已,Java 8還有許多新的特性,有一些功能強(qiáng)大的新類(lèi)或者新的用法,還有一些功能則是早就應(yīng)該加到Java里了,所以下面這篇文章主要給大家介紹了關(guān)于Java8中大家可能忽略了的一些新特性,需要的朋友可以參考下。2017-08-08
Spring IOC源碼剖析_如何整體認(rèn)知Spring體系結(jié)構(gòu)
這篇文章主要介紹了Spring IOC源碼剖析_如何整體認(rèn)知Spring體系結(jié)構(gòu)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-09-09
springmvc+mybatis 做分頁(yè)sql 語(yǔ)句實(shí)例代碼
本文通過(guò)一段實(shí)例代碼給大家介紹了springmvc+mybatis 做分頁(yè)sql 語(yǔ)句的方法,代碼簡(jiǎn)單易懂,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下吧2017-07-07
詳解配置類(lèi)為什么要添加@Configuration注解
這篇文章主要介紹了詳解配置類(lèi)為什么要添加@Configuration注解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-05-05
基于創(chuàng)建Web項(xiàng)目運(yùn)行時(shí)出錯(cuò)的解決方法(必看篇)
下面小編就為大家?guī)?lái)一篇基于創(chuàng)建Web項(xiàng)目運(yùn)行時(shí)出錯(cuò)的解決方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-08-08

