Java中獲取Class對(duì)象的3種方式代碼示例
前言
在Java中,Class對(duì)象是一個(gè)非常重要的概念,它代表了Java中的類、接口、數(shù)組類、基本數(shù)據(jù)類型或void關(guān)鍵字。本文將介紹獲取Class對(duì)象的三種常用方式。
1、對(duì)象調(diào)用getClass()方法
當(dāng)一個(gè)對(duì)象被創(chuàng)建后,Java運(yùn)行時(shí)系統(tǒng)就會(huì)為這個(gè)對(duì)象分配一個(gè)Class對(duì)象。這個(gè)Class對(duì)象被Java虛擬機(jī)用來跟蹤對(duì)象的運(yùn)行時(shí)狀態(tài)。我們可以通過調(diào)用對(duì)象的getClass()方法來獲取該對(duì)象的Class對(duì)象。
public class MyClass { public static void main(String[] args) { MyClass obj = new MyClass(); Class<?> objClass = obj.getClass(); System.out.println("對(duì)象的Class是: " + objClass.getName()); } }
在這個(gè)例子中,我們創(chuàng)建了一個(gè)MyClass的實(shí)例obj,然后調(diào)用obj.getClass()來獲取MyClass的Class對(duì)象,并打印出它的名字。
2、類名.class的方式
除了通過對(duì)象來獲取Class對(duì)象外,我們還可以直接使用類名加上.class來獲取該類的Class對(duì)象。這種方式在編譯時(shí)就能確定Class對(duì)象,因此更加安全,也是獲取Class對(duì)象的首選方式。
public class MyClass { public static void main(String[] args) { Class<?> classType = MyClass.class; System.out.println("類的Class是: " + classType.getName()); } }
在這個(gè)例子中,我們直接使用了MyClass.class來獲取MyClass的Class對(duì)象。
3、通過Class.forName()靜態(tài)方法
如果我們?cè)谶\(yùn)行時(shí)才知道類的名字,或者類的名字存儲(chǔ)在字符串中,那么我們可以使用Class.forName()方法來獲取該類的Class對(duì)象。這個(gè)方法會(huì)加載指定的類,并返回該類的Class對(duì)象。需要注意的是,如果指定的類不存在,或者加載過程中發(fā)生錯(cuò)誤,那么forName()方法會(huì)拋出ClassNotFoundException。
public class MyClass { public static void main(String[] args) { try { Class<?> classType = Class.forName("java.lang.String"); System.out.println("加載的類的Class是: " + classType.getName()); } catch (ClassNotFoundException e) { e.printStackTrace(); } } }
在這個(gè)例子中,我們使用了Class.forName(“java.lang.String”)來加載java.lang.String類,并獲取它的Class對(duì)象。
4、總結(jié)
在Java中,我們可以通過三種方式來獲取Class對(duì)象:對(duì)象調(diào)用getClass()方法、類名.class的方式和通過Class.forName()靜態(tài)方法。每種方式都有其適用的場(chǎng)景,我們需要根據(jù)具體的需求來選擇合適的方式。
附:三種方式的區(qū)別
(1)類名.class:JVM將使用類裝載器,將類裝入內(nèi)存(前提是:類還沒有裝入內(nèi)存),不做類的初始化工作,返回Class的對(duì)象。
(2)Class.forName(“類名字符串”):裝入類,并做類的靜態(tài)初始化,返回Class的對(duì)象。
(3)實(shí)例對(duì)象.getClass():對(duì)類進(jìn)行靜態(tài)初始化、非靜態(tài)初始化;返回引用運(yùn)行時(shí)真正所指的對(duì)象(子對(duì)象的引用會(huì)賦給父對(duì)象的引用變量中)所屬的類的Class的對(duì)象。
到此這篇關(guān)于Java中獲取Class對(duì)象的3種方式的文章就介紹到這了,更多相關(guān)Java獲取Class對(duì)象內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java通過apache poi生成excel實(shí)例代碼
本篇文章主要介紹了Java通過apache poi生成excel實(shí)例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-06-06Maven項(xiàng)目部署到服務(wù)器設(shè)置訪問路徑以及配置虛擬目錄的方法
今天小編就為大家分享一篇關(guān)于Maven項(xiàng)目部署到服務(wù)器設(shè)置訪問路徑以及配置虛擬目錄的方法,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2019-02-02創(chuàng)建Jersey REST 服務(wù),基于Maven的實(shí)現(xiàn)
下面小編就為大家?guī)硪黄獎(jiǎng)?chuàng)建Jersey REST 服務(wù),基于Maven的實(shí)現(xiàn)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-06-06Java 異常java.lang.NoSuchFieldException解決方案
這篇文章主要介紹了Java 異常java.lang.NoSuchFieldException解決方案,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-10-10Java后臺(tái)返回和處理JSon數(shù)據(jù)的方法步驟
這篇文章主要介紹了Java后臺(tái)返回和處理JSon數(shù)據(jù)的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09java復(fù)制文件和java移動(dòng)文件的示例分享
本文主要介紹了java將文件夾下面的所有的jar文件拷貝到指定的文件夾下面的方法,需要的朋友可以參考下2014-02-02