這篇文章主要介紹了Java中Class類的作用與深入理解的相關資料,希望透過本文能幫助到大家讓大家理解這部分內容,需要的朋友可以參考下
#Java中Class類別的作用與深入理解
在程式運作期間,Java執行時間系統總是會為所有的物件維護一個稱為執行時間的類型識別。這個資訊追蹤著每個物件所屬的類別。 JVM利用運行時資訊選擇對應的方法執行。而保存這些資訊的類別稱為Class。可能容易產生混淆,容易想到class。不過二者沒什麼關係,class不過是描述類別的一個關鍵字。而Class卻是保存著運行時資訊的類別。
它能做什麼? Class類可以幫助我們在程式執行時分析類,說白了就是取得類別中的值。可能瞬間就想到了反射,沒錯! Class一般就是和反射配套使用的,因為我們向Class提供一個類別或一個類別的類別名,Class就可以提供我們很多信息,例如屬性/方法/修飾符/建構器/類別名稱等等。然後我們就可以進一步進行反射。不過,還是先來簡單了解下Class類別的內容和使用方式吧!
我們通常使用以下方法來取得Class物件:
String str = new String(); Class cl = str.getClass();
因為這個類別包含太多資訊,所以我們可以透過它來獲得特定一個類別的域/方法和建構器。以下列舉一些常用的方法:
public static void main(String[] args) throws Exception { // 以String.class为例 String str = new String(); Class cl = str.getClass(); /** * 获取包名+类名<br> * java.lang.String */ cl.getName(); /** * 只获取类名 - String */ cl.getSimpleName(); /** * 获取数组的Class对象<br> * 因为所有的Java类都继承自Object,数组也一样.所以数组本身也是个Class, 得到数组的Class自然也可以转回数组. */ cl.getComponentType(); /** * 返回构造器数组,包括超类的公有成员. */ cl.getConstructors(); /** * 返回方法数组,包括超类的公有成员. */ cl.getMethods(); /** * 返回域数组,包括超类的公有成员. */ cl.getFields(); /** * 返回全部构造器数组,无论是public/private还是protected,不包括超类的成员. */ cl.getDeclaredConstructors(); /** * 返回全部域数组,无论是public/private还是protected,不包括超类的成员. */ cl.getDeclaredFields(); /** * 返回全部方法数组,无论是public/private还是protected,不包括超类的成员. */ cl.getDeclaredMethods(); /** * 获取类前的修饰符 */ cl.getModifiers(); }
我們可以透過一個類別來取得Class對象,進而取得這類的資訊。也可以透過全類別名稱來取得Class物件。
Class cl = Class.forName("java.lang.String");
有了這個類別的Class對象,我們就可以建立這個類別的物件。最方便/快速的方法是呼叫newInstance()。預設情況下,它預設會呼叫無參構造來傳回一個物件。
String str = (String)(Class.forName("java.lang.String").newInstance());
以下是使用Constructor透過取得建構器來建立物件:
##
// 调用无参的私有构造函数 Constructor c1 = Class.forName("java.lang.String") .getDeclaredConstructor(); c1.setAccessible(true); String str1 = (String) c1.newInstance(); // 调用有参的私有构造函数 Constructor c2 = Class.forName("java.lang.String") .getDeclaredConstructor(new Class[] { String.class }); c2.setAccessible(true); String str2 = (String) c2.newInstance("hello");Class不是太難,因為它就是個資訊類。在運行時追蹤類,掌握類的全部資訊。
以上是Java中Class類別的作用詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!