<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 是一種內(nèi)省機制,幫助程序在運行時對自身及軟件環(huán)境進行檢查,并根據(jù)檢查得到的程序結(jié)構(gòu),改變自身的部分行為。

    核心類為 java.lang.Class 類,抽象了程序的元數(shù)據(jù),每一個類的元數(shù)據(jù)就是一個Class對象實例。這個Class實例是一個靜態(tài)實例,對應類的每一個實例都會關(guān)聯(lián)這個靜態(tài)實例。通過Class類可以查詢該類的方法、字段、接口、構(gòu)造器等一系列信息。詳見下面。

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


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

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

    Class類和Object類存在比較糾結(jié)的關(guān)系
    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中相關(guān)方法

    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) 創(chuàng)建實例

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

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

    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() 方法參數(shù)類型
    Class getReturnType() 方法返回類型
    Object invoke(Object obj,Object[]args) 反射調(diào)用一個對象上面的該方法

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

    java.lang.reflect.Field

    java.lang.Class類中關(guān)于Field的相關(guān)方法:
    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


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

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

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

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


    網(wǎng)站導航:
     
    主站蜘蛛池模板: 亚洲中文字幕AV在天堂| 久久精品成人免费观看97| 免费一级一片一毛片| 99re6在线视频精品免费| 亚洲日产2021三区| 亚洲精品成a人在线观看| 久久免费精彩视频| 亚洲av永久中文无码精品 | 女人张开腿给人桶免费视频| 一级做a爰黑人又硬又粗免费看51社区国产精品视 | 水蜜桃视频在线观看免费播放高清 | 一二三四免费观看在线电影| 国产天堂亚洲国产碰碰| 情人伊人久久综合亚洲| 成人毛片免费观看视频| 男女一边桶一边摸一边脱视频免费| 久久精品国产亚洲av日韩| 国产男女猛烈无遮挡免费网站| 久久免费视频精品| 无人视频在线观看免费播放影院| 91亚洲国产在人线播放午夜| 免费国产不卡午夜福在线| 最近中文字幕免费2019| jizz免费在线影视观看网站| 亚洲最大在线观看| 亚洲日韩精品一区二区三区无码| 久久久久国色AV免费看图片| 国产在线观a免费观看| 亚洲AV无码国产精品永久一区| 亚洲爆乳精品无码一区二区三区| 国产成人免费手机在线观看视频| 99在线观看视频免费| 中文字幕不卡免费视频| 精品一区二区三区免费毛片| 亚洲剧场午夜在线观看| 亚洲永久永久永久永久永久精品| 国产成人精品日本亚洲专区 | 免费观看国产网址你懂的| 岛国岛国免费V片在线观看| 老湿机一区午夜精品免费福利| 亚洲综合亚洲国产尤物|