成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Java的Reflect記錄

suxier / 1881人閱讀

摘要:日常記錄作者對(duì)于的內(nèi)部類,我們注意的表達(dá)方法,其原因是內(nèi)部類編譯后是文件。代碼如下同時(shí),我們也可以通過的方法,來獲得指定類中的所有子類。在下面的代碼中,可以在輸出中獲得子類的,如,也驗(yàn)證了上面的的寫法。代碼如下接著來看一下中的。

Java 日常 記錄 作者: LinkSystem Java 2017/04/27

對(duì)于Java的內(nèi)部類,我們注意ClassName的表達(dá)方法:package.Classname$InnerClass,
其原因是內(nèi)部類編譯后是ClassName$InnerClass.class文件。

代碼如下

public class ReflectExplain {

    static class Node{
        public double i;
        public int    x;

        public Node() {
        }

        public Node(double i, int x) {
            this.i = i;
            this.x = x;
        }
    }

    public static void main(String args[]) throws Exception {
        String name = "com.link.core.reflect.ReflectExplain$Node";
        Class clazz = Class.forName(name);
        System.out.println(clazz);
    }
}

同時(shí),我們也可以通過ClassgetDeclaredClasses方法,來獲得指定類中的所有子類。在下面的代碼中,可以在輸出中獲得子類的ClassName,如 com.link.core.reflect.ReflectExplain$Node, 也驗(yàn)證了上面的ClassName的寫法。

代碼如下

public class ReflectExplain {

    static class Node{
        public double i;
        public int    x;

        public Node() {
        }

        public Node(double i, int x) {
            this.i = i;
            this.x = x;
        }
    }

    public static void main(String args[]) throws Exception {
        String name = "com.link.core.reflect.ReflectExplain";
        Class clazz = Class.forName(name);
        Class[] clazzes = clazz.getDeclaredClasses();
        for (Class object : clazzes){
            System.out.println(object);
        }
    }
}

接著來看一下java.lang.reflect中的Modifier。在Class中有getModifiers()這一方法,其返回值是int值,在Class類中是這樣描述的

Returns the Java language modifiers for this class or interface, encoded in an integer.
The modifiers consist of the Java Virtual Machine"s constants for {@code public}, {@code protected}, {@code private}, {@code final}, {@code static}, {@code abstract} and {@code interface}; they should be decoded using the methods of class {@code Modifier}.

大致的意思是每一個(gè)修飾符都有一個(gè)對(duì)應(yīng)的int值,在可以在Modifier類中匹配,所以可以
Modifier類中的方法,可見其中有 is() 的方法和toString()的方法,以下是is()的代碼和toString()的代碼:

    public static final int PUBLIC = 0x00000001;
    
    public static boolean isPublic(int mod) {
        return (mod & PUBLIC) != 0;
    }
    public static String toString(int mod) {
        StringBuilder sb = new StringBuilder();
        int len;

        if ((mod & PUBLIC) != 0)        sb.append("public ");
        if ((mod & PROTECTED) != 0)     sb.append("protected ");
        if ((mod & PRIVATE) != 0)       sb.append("private ");

        /* Canonical order */
        if ((mod & ABSTRACT) != 0)      sb.append("abstract ");
        if ((mod & STATIC) != 0)        sb.append("static ");
        if ((mod & FINAL) != 0)         sb.append("final ");
        if ((mod & TRANSIENT) != 0)     sb.append("transient ");
        if ((mod & VOLATILE) != 0)      sb.append("volatile ");
        if ((mod & SYNCHRONIZED) != 0)  sb.append("synchronized ");
        if ((mod & NATIVE) != 0)        sb.append("native ");
        if ((mod & STRICT) != 0)        sb.append("strictfp ");
        if ((mod & INTERFACE) != 0)     sb.append("interface ");

        if ((len = sb.length()) > 0)    /* trim trailing space */
            return sb.toString().substring(0, len-1);
        return "";
    }

可見其原理都是一致的,通過與方式來判斷是否為零,來返回相應(yīng)的值。那么我們可以Modified類來實(shí)現(xiàn)某些應(yīng)用。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/69949.html

相關(guān)文章

  • Idea 搭建SSH 架構(gòu)

    摘要:這幾天在學(xué)習(xí)中的架構(gòu)開始搭建時(shí)候遇到很多問題經(jīng)過幾天的探索記錄一下的搭建一使用創(chuàng)建新項(xiàng)目選擇相關(guān)相關(guān)相關(guān)選擇完成后二在項(xiàng)目目錄下創(chuàng)建和文件夾將相關(guān)的包導(dǎo)入項(xiàng)目三依賴包四調(diào)整項(xiàng)目依賴路徑選擇放包的文件夾點(diǎn)擊然后四配置五測(cè)試修改報(bào)錯(cuò)運(yùn)行項(xiàng) 這幾天在學(xué)習(xí)java web中的SSh架構(gòu),開始搭建時(shí)候遇到很多問題,經(jīng)過幾天的探索,記錄一下SSH 的搭建 一.使用Idea創(chuàng)建新項(xiàng)目 1.選擇Sp...

    syoya 評(píng)論0 收藏0
  • 反射機(jī)制與原理筆記

    反射機(jī)制與原理筆記 聲明 文章均為本人技術(shù)筆記,轉(zhuǎn)載請(qǐng)注明出處https://segmentfault.com/u/yzwall 反射機(jī)制 反射:當(dāng)程序無法獲知對(duì)象類型時(shí),在運(yùn)行期間動(dòng)態(tài)獲取類的所有屬性和方法,這種動(dòng)態(tài)獲取類信息和動(dòng)態(tài)調(diào)用對(duì)象方法的功能稱為反射機(jī)制;反射機(jī)制實(shí)現(xiàn):Class類與java.lang.reflect類庫一起實(shí)現(xiàn)機(jī)制,java.lang.reflect類庫包含F(xiàn)ield...

    fobnn 評(píng)論0 收藏0
  • UnsupportedOperationException

    摘要:本周在寫單元測(cè)試的時(shí)候遇見了一個(gè)新的,在此記錄一下。通過查看的源碼果然是這樣沒有重寫的但為什么會(huì)調(diào)用方法呢 本周在寫單元測(cè)試的時(shí)候遇見了一個(gè)新的exception,在此記錄一下。 單元測(cè)試中有一段代碼是這樣的: logger.debug(設(shè)置班級(jí)的學(xué)生); klass.setStudentList(Collections.singletonList(student1)); ...

    LiangJ 評(píng)論0 收藏0
  • Java動(dòng)態(tài)代理之InvocationHandler最簡單入門教程

    摘要:網(wǎng)上關(guān)于的動(dòng)態(tài)代理,和這些概念有講解得非常高深的文章?,F(xiàn)在咱們通過一個(gè)最簡單的例子認(rèn)識(shí)什么是。創(chuàng)建一個(gè)簡單的類,實(shí)現(xiàn)這個(gè)接口??纯从萌绾蝺?yōu)雅實(shí)現(xiàn)吧希望這個(gè)例子能讓大家對(duì)的動(dòng)態(tài)代理之有了最基本的了解。 網(wǎng)上關(guān)于Java的動(dòng)態(tài)代理,Proxy和InvocationHandler這些概念有講解得非常高深的文章。其實(shí)這些概念沒有那么復(fù)雜。現(xiàn)在咱們通過一個(gè)最簡單的例子認(rèn)識(shí)什么是Invocatio...

    lingdududu 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<