摘要:日常記錄作者對于的內部類,我們注意的表達方法,其原因是內部類編譯后是文件。代碼如下同時,我們也可以通過的方法,來獲得指定類中的所有子類。在下面的代碼中,可以在輸出中獲得子類的,如,也驗證了上面的的寫法。代碼如下接著來看一下中的。
Java 日常 記錄 作者: LinkSystem Java 2017/04/27
對于Java的內部類,我們注意ClassName的表達方法:package.Classname$InnerClass,
其原因是內部類編譯后是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); } }
同時,我們也可以通過Class的getDeclaredClasses方法,來獲得指定類中的所有子類。在下面的代碼中,可以在輸出中獲得子類的ClassName,如 com.link.core.reflect.ReflectExplain$Node, 也驗證了上面的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}.
大致的意思是每一個修飾符都有一個對應的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 ""; }
可見其原理都是一致的,通過與方式來判斷是否為零,來返回相應的值。那么我們可以Modified類來實現某些應用。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/69949.html
摘要:這幾天在學習中的架構開始搭建時候遇到很多問題經過幾天的探索記錄一下的搭建一使用創建新項目選擇相關相關相關選擇完成后二在項目目錄下創建和文件夾將相關的包導入項目三依賴包四調整項目依賴路徑選擇放包的文件夾點擊然后四配置五測試修改報錯運行項 這幾天在學習java web中的SSh架構,開始搭建時候遇到很多問題,經過幾天的探索,記錄一下SSH 的搭建 一.使用Idea創建新項目 1.選擇Sp...
摘要:本周在寫單元測試的時候遇見了一個新的,在此記錄一下。通過查看的源碼果然是這樣沒有重寫的但為什么會調用方法呢 本周在寫單元測試的時候遇見了一個新的exception,在此記錄一下。 單元測試中有一段代碼是這樣的: logger.debug(設置班級的學生); klass.setStudentList(Collections.singletonList(student1)); ...
摘要:網上關于的動態代理,和這些概念有講解得非常高深的文章。現在咱們通過一個最簡單的例子認識什么是。創建一個簡單的類,實現這個接口。看看用如何優雅實現吧希望這個例子能讓大家對的動態代理之有了最基本的了解。 網上關于Java的動態代理,Proxy和InvocationHandler這些概念有講解得非常高深的文章。其實這些概念沒有那么復雜。現在咱們通過一個最簡單的例子認識什么是Invocatio...
閱讀 2966·2021-11-08 13:20
閱讀 1034·2021-09-22 15:20
閱讀 665·2019-08-30 15:53
閱讀 1972·2019-08-30 15:43
閱讀 1283·2019-08-29 17:21
閱讀 543·2019-08-29 12:15
閱讀 2381·2019-08-28 17:51
閱讀 3147·2019-08-26 13:26