Java Class類常用方法描述


一 生成Class對象的三種方式

  1 Class.forName("全路徑名")

  2  類名.Class

  3 實例對象.getClass()

   接着看三種方式生成Class對象的區別

package com.shangcg.reflect; /** * * <p> * 三種方式生成Class對象的區別測試 * 說明:測試一、二、三可屏蔽代碼分開進行看輸出結果 * </p> */
public class ClassDemo { public static void main(String[] args) { try { /* * 測試一 測試類名.class * 輸出為: * testTypeClass---class com.shangcg.reflect.AnyOneObject 沒有執行構造函數沒有執行靜態塊 */ Class<?> testTypeClass = AnyOneObject.class; System.out.println("testTypeClass---" + testTypeClass); /*測試二 測試Class.forName() * 輸出為: ---靜態的參數初始化--- 說明執行靜態塊 testForName---class com.shangcg.reflect.AnyOneObject */ Class<?> anyOneTypeForName = Class.forName("com.shangcg.reflect.AnyOneObject"); System.out.println("testForName---" + anyOneTypeForName); /* 測試三 測試Object.getClass() * 輸出: * ---靜態的參數初始化--- 執行靜態塊 ----非靜態的參數初始化--- 執行非靜態塊初始化 ----構造函數--- 執行構造函數 testGetClass---class com.shangcg.reflect.AnyOneObject */ AnyOneObject testGetClass = new AnyOneObject(); System.out.println("testGetClass---" + testGetClass.getClass()); } catch (Exception e) { e.printStackTrace(); } } } class AnyOneObject { //構造函數 

  public AnyOneObject() { System.out.println("----構造函數---"); } //靜態的參數初始化 

  static { System.out.println("---靜態的參數初始化---"); } //非靜態的參數初始化 
 { System.out.println("----非靜態的參數初始化---"); } }

 

結論:

1 類名.class(也稱類字面常量)  方式生成Class對象不會初始化的靜態塊,不會初始化參數,不會調用構造函數
2 Class.forName()方式生成Class對象會初始化類靜態塊,但不會初始化非靜態的代碼塊,也不調用構造函數
3 Object.getClass()方式生成Class對象會先初始化靜態塊,接着執行非靜態塊的初始化,最后調用構造函數

二 java反射(介紹Class類中方法之前,先介紹一下反射)

  1 Java反射機制主要功能:

    1.在運行時判斷任意一個對象所屬的類。

    2.在運行時構造任意一個類的對象。

    3.在運行時判斷任意一個類所具有的成員變量和方法。

    4.在運行時調用任意一個對象的方法。

 

      2 對反射提供支持的類(反射功能主要由Class對象和java.lang.relflect包中的類提供支持)

    Class類:代表一個類,位於java.lang包下。

     Field類:代表類的成員變量(成員變量也稱為類的屬性)。

     Method類:代表類的方法。

     Constructor類:代表類的構造方法。

     Array類:提供了動態創建數組,以及訪問數組的元素的靜態方法。

 

三 Class常用方法解釋

 Class就是普通的一個類,和我們平時寫的類沒有什么區別,它位於java.lang包下,和java.lang.reflect包下的類共同支持了java的整個反射功能

 常用方法列表

  1getName():返回String形式的該類的名稱。
  2 newInstance():根據某個Class對象產生其對應類的實例,它調用的是此類的默認構造方法(沒有默認無參構造器會報錯)
  3 getClassLoader():返回該Class對象對應的類的類加載器。
  4 getSuperClass():返回某子類所對應的直接父類所對應的Class對象
  5 isArray():判定此Class對象所對應的是否是一個數組對象
  6 getComponentType() :如果當前類表示一個數組,則返回表示該數組組件的 Class 對象,否則返回 null。
  7 getConstructor(Class[]) :返回當前 Class 對象表示的類的指定的公有構造子對象。
  8 getConstructors() :返回當前 Class 對象表示的類的所有公有構造子對象數組。
  9 getDeclaredConstructor(Class[]) :返回當前 Class 對象表示的類的指定已說明的一個構造子對象。
  10 getDeclaredConstructors() :返回當前 Class 對象表示的類的所有已說明的構造子對象數組。
  11 getDeclaredField(String) :返回當前 Class 對象表示的類或接口的指定已說明的一個域對象。
  12 getDeclaredFields() :返回當前 Class 對象表示的類或接口的所有已說明的域對象數組。
  13 getDeclaredMethod(String, Class[]) :返回當前 Class 對象表示的類或接口的指定已說明的一個方法對象。
  14 getDeclaredMethods() :返回 Class 對象表示的類或接口的所有已說明的方法數組。
  15 getField(String) :返回當前 Class 對象表示的類或接口的指定的公有成員域對象。
  16 getFields() :返回當前 Class 對象表示的類或接口的所有可訪問的公有域對象數組。
  17 getInterfaces() :返回當前對象表示的類或接口實現的接口。
  18 getMethod(String, Class[]) :返回當前 Class 對象表示的類或接口的指定的公有成員方法對象。
  19 getMethods() :返回當前 Class 對象表示的類或接口的所有公有成員方法對象數組,包括已聲明的和從父類繼承的方法。
  20 isInstance(Object) :此方法是 Java 語言 instanceof 操作的動態等價方法。
  21 isInterface() :判定指定的 Class 對象是否表示一個接口類型
  22 isPrimitive() :判定指定的 Class 對象是否表示一個 Java 的基類型。
  23 newInstance() :創建類的新實例

 

 

參考文章http://www.cnblogs.com/mengdd/archive/2013/01/26/2877972.html

    http://blog.csdn.net/ghuilee/article/details/45821537
 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM