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

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

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

如果我們已經(jīng)創(chuàng)建了某個(gè)類型的對(duì)象,那么我們可以通過getClass()方法來獲取該類型的Class的對(duì)象:
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);
//通過對(duì)象得到類
Try1 try1 = new Try1();
Class b = try1.getClass();
System.out.println(b);
}
}
class Try1{
}測(cè)試運(yùn)行結(jié)果:

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

所以可以直接通過Class.forName("類的路徑")獲取Class對(duì)象:
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{
}測(cè)試運(yùn)行截圖:

3.類.class獲得Class對(duì)象(類字面常量)
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);
// //通過對(duì)象得到類
// Try1 try1 = new Try1();
// Class b = try1.getClass();
// System.out.println(b);
//類字面常量
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ù)為其類的路徑
// Class a = Class.forName("Task.Try1");
// System.out.println(a);
//通過對(duì)象得到類
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,我們所用的單元測(cè)試@Test注解
System.out.println(b.isAnnotation());
//isInstance方法參數(shù)是一個(gè)對(duì)象,判斷該對(duì)象try1對(duì)應(yīng)的類Try1是否是b的對(duì)象
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繼承于哪個(gè)類
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());
// 以下還有一些方法只列舉出來
// getTypeParameters方法,獲取泛型類中的泛型參數(shù)數(shù)組
// getClasses方法,獲取Class對(duì)象中public修飾的內(nèi)部類
// getDeclaredClasses方法,獲取Class對(duì)象中的內(nè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ù)器的端口是否打開的方法
這篇文章主要介紹了如何使用 Shell 腳本來查看多個(gè)服務(wù)器的端口是否打開的方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-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就只能聽到lambda,但這不過是其中的一個(gè)而已,Java 8還有許多新的特性,有一些功能強(qiáng)大的新類或者新的用法,還有一些功能則是早就應(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 做分頁sql 語句實(shí)例代碼
本文通過一段實(shí)例代碼給大家介紹了springmvc+mybatis 做分頁sql 語句的方法,代碼簡(jiǎn)單易懂,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下吧2017-07-07
基于創(chuàng)建Web項(xiàng)目運(yùn)行時(shí)出錯(cuò)的解決方法(必看篇)
下面小編就為大家?guī)硪黄趧?chuàng)建Web項(xiàng)目運(yùn)行時(shí)出錯(cuò)的解決方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-08-08

