<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆 - 2  文章 - 2  trackbacks - 0
    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    留言簿

    隨筆檔案(1)

    文章分類(16)

    最新隨筆

    搜索

    •  

    最新評論

    Java Reflection 是一種內省機制,幫助程序在運行時對自身及軟件環境進行檢查,并根據檢查得到的程序結構,改變自身的部分行為。

    核心類為 java.lang.Class 類,抽象了程序的元數據,每一個類的元數據就是一個Class對象實例。這個Class實例是一個靜態實例,對應類的每一個實例都會關聯這個靜態實例。通過Class類可以查詢該類的方法、字段、接口、構造器等一系列信息。詳見下面。

    對象回去自身對應的Class實例是通過繼承自Object類的getClass()方法;
    對于基本類型,每一種也有一個名為class的靜態實例,如int.class double.class boolean.class;
    對于數組類型,也有Object[].class, 注意 int[][].class==int[].class


    判斷對象類型的接口:
    String getName() 獲得類全名
    Class getComponentType() 如果對象是數組,返回數據中元素的類類型
    boolean isArray()
    boolean isInterface()
    boolean isPrimitive()
    boolean isAnnotation()

    ###########################################################################################################
    接口
    java.lang.Class中定義的檢查接口的接口:
    Class[] getInterfaces()
    Class getSuperClass() 直系父類 ,對于Object、接口、void關鍵字、基本類型,返回null
    boolean isAssignableFrom(Class cls) 該類是參數的類型或參數的父類型
    boolean isInstance(Object obj) 該類是參數的實例或者參數的子類實例

    Class類和Object類存在比較糾結的關系
    Class.class.isIntance(Class.class) == true Class類的class實例是Class本身的實例
    Class.class.isInstance(Object.class) == true
    Object.class.isAssignableFrom(Class.class) == true
    Object.class.isIntance(Class.class) == true

    ###########################################################################################################
    java.lang.reflect部分類圖


    ###########################################################################################################

    java.lang.reflect.Constructor
    java.lang.Class中相關方法

    Constructor getConstructor(Class[] parameterTypes)
    Constructor getDeclaredConstructor(Class[]parameterTypes)
    Constructor[] getConstructors()
    Constructor[] getDeclaredConstructors()

    java.lang.reflect.Constructor
    Class getDeclaredClass()
    Class[] getExceptionTypes()
    int getModifiers()
    String getName()
    Class[] getParameterTypes()
    Object newInstance(Object[] initArgs) 創建實例

    對于數組,使用 java.lang.reflect.Array.newInstance(String.class,5)形式創建實例

    ###########################################################################################################

    java.lang.reflect.Method

    java.lang.Class類中定義了如下接口查詢一個類所具有的方法。
    Method getMethod(String name,Class[]parameterTypes)
    Method[] getMethods()
    上述2個接口查詢繼承獲得和自身聲明的方法
    Method getDeclaredMethod(String name,Class[]parameterTypes)
    Method[] getDeclaredMethods()
    上述2個接口查詢自身聲明的方法

    java.lang.reflect.Method類定義的方法
    Class getDeclaringClass() 聲明該方法的類實例
    Class[] getExceptionTypes() 方法的異常類型
    int getModifiers() 方法的可見性
    String getName() 方法名
    Class[] getParameterTypes() 方法參數類型
    Class getReturnType() 方法返回類型
    Object invoke(Object obj,Object[]args) 反射調用一個對象上面的該方法

    ###########################################################################################################

    java.lang.reflect.Field

    java.lang.Class類中關于Field的相關方法:
    Field getField(String name)
    Field[] getFields()
    Field getDeclaredField(String name)
    Field[] getDeclaredFields()

    java.lang.relect.Field中主要方法
    Class getType() 返回字段的Class
    Class getDeclaringClass() 返回什么該字段的Class
    String getName()
    int getModifiers()
    Object get(Object obj) 返回obj該字段的值
    boolean getBoolean(Object obj)
    void set(Object obj,Object value) 設置obj該字段的值
    void setBoolean(Object obj,boolean value)

    ###########################################################################################################

    java.lang.reflect.Modifier 字段或者方法的訪問性
    static boolean isPublic(int mod)
    static boolean isPrivate(int mod)

    共包括以下:
    public static native volatile protected transient
    abstract synchronized strictfp private final


    ###########################################################################################################
    動態加載
    Class cls = Class.forName(String className);
    Object obj 
    = cls.newInstance();

    動態加載機制使得可以避開編譯器類范圍的限制,常見場景是jdbc驅動。動態加載機制也是通過ClassLoader實現。
    通過動態加載機制的類名并不是一般意義的類名,而是:
    1、基本類型,首字母大寫,如 int -> I
    2、引用類型,L+全類名,如 Ljava.lang.String
    3、數組類型,[+***, 如[I,   [Ljava.lang.String  ,  [[I,  [[Ljava.lang.String

    注意:基本類型,不能通過Class.forName()加載,會拋出異常
    posted on 2011-03-31 14:06 liucs 閱讀(330) 評論(0)  編輯  收藏 所屬分類: Java

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 妞干网免费观看视频| 久久精品一区二区免费看| 999国内精品永久免费观看| 久久亚洲精品AB无码播放| 成人A毛片免费观看网站| 久久久亚洲精品蜜桃臀| 高潮毛片无遮挡高清免费| 国产成人无码a区在线观看视频免费| 亚洲第一男人天堂| 69成人免费视频无码专区| 亚洲日韩精品无码AV海量| 在线A级毛片无码免费真人| 亚洲av片在线观看| 国产无遮挡色视频免费视频| 色窝窝亚洲AV网在线观看| 国产一区二区三区免费在线观看| 成人亚洲国产精品久久| 亚洲美女高清一区二区三区| yellow视频免费在线观看| 久久精品国产亚洲| 亚洲大片免费观看| 亚洲 欧洲 日韩 综合在线| 国产又粗又猛又爽又黄的免费视频| 羞羞漫画小舞被黄漫免费| 国产亚洲精品福利在线无卡一 | 国产无遮挡又黄又爽免费网站| 色噜噜AV亚洲色一区二区| 日韩精品无码专区免费播放| 亚洲精品mv在线观看| 天天拍拍天天爽免费视频| 人妻仑刮八A级毛片免费看| 亚洲精品一品区二品区三品区| 免费A级毛片av无码| 亚洲s码欧洲m码吹潮| a级亚洲片精品久久久久久久| 69精品免费视频| 国产成人人综合亚洲欧美丁香花| 亚洲一区二区三区无码中文字幕| 18观看免费永久视频| 国产精品无码亚洲精品2021 | 亚洲色偷偷综合亚洲AVYP|