JAVA——反射机制,
分享于 点击 22918 次 点评:36
JAVA——反射机制,
1. Class类 普通对象构造方式:// 创建Book实例对象
Book book = new Book();
对于Class的实例对象如何构造呢?
Class的构造函数是私有的,只有JVM才能创建实例对象
<div class="linenums" style="margin:0px; padding-left:0px; color:rgb(30,52,123)"><div class="L0" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="com" style="color:#93a1a1;">// Class的构造函数是私有的,只有JVM才能创建Class实例对象</span></code></div><div class="L1" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="typ" style="color:teal;">Class</span><span class="pln" style="color:#48484c;"> class1 </span><span class="pun" style="color:#93a1a1;">=</span><span class="pln" style="color:#48484c;"> </span><span class="kwd" style="color:#1e347b;">new</span><span class="pln" style="color:#48484c;"> </span><span class="typ" style="color:teal;">Class</span><span class="pun" style="color:#93a1a1;">();</span><span class="pln" style="color:#48484c;"> </span><span class="com" style="color:#93a1a1;">// 错误</span></code></div></div>
<div class="linenums" style="margin:0px; padding-left:0px; color:rgb(30,52,123)"><div class="L0" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="kwd" style="color:#1e347b;">public</span><span class="pln" style="color:#48484c;"> </span><span class="kwd" style="color:#1e347b;">final</span><span class="pln" style="color:#48484c;"> </span><span class="kwd" style="color:#1e347b;">class</span><span class="pln" style="color:#48484c;"> </span><span class="typ" style="color:teal;">Class</span><span class="pun" style="color:#93a1a1;"><</span><span class="pln" style="color:#48484c;">T</span><span class="pun" style="color:#93a1a1;">></span><span class="pln" style="color:#48484c;"> </span><span class="kwd" style="color:#1e347b;">implements</span><span class="pln" style="color:#48484c;"> java</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">io</span><span class="pun" style="color:#93a1a1;">.</span><span class="typ" style="color:teal;">Serializable</span><span class="pun" style="color:#93a1a1;">,</span></code></div><div class="L1" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> java</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">lang</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">reflect</span><span class="pun" style="color:#93a1a1;">.</span><span class="typ" style="color:teal;">GenericDeclaration</span><span class="pun" style="color:#93a1a1;">,</span></code></div><div class="L2" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> java</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">lang</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">reflect</span><span class="pun" style="color:#93a1a1;">.</span><span class="typ" style="color:teal;">Type</span><span class="pun" style="color:#93a1a1;">,</span></code></div><div class="L3" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> java</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">lang</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">reflect</span><span class="pun" style="color:#93a1a1;">.</span><span class="typ" style="color:teal;">AnnotatedElement</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">{</span></code></div><div class="L4" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"> </code></div><div class="L5" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span><span class="com" style="color:#93a1a1;">/*</span></code></div><div class="L6" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="com" style="color:#93a1a1;"> * Constructor. Only the Java Virtual Machine creates Class</span></code></div><div class="L7" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="com" style="color:#93a1a1;"> * objects.</span></code></div><div class="L8" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="com" style="color:#93a1a1;"> */</span></code></div><div class="L9" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span><span class="kwd" style="color:#1e347b;">private</span><span class="pln" style="color:#48484c;"> </span><span class="typ" style="color:teal;">Class</span><span class="pun" style="color:#93a1a1;">()</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">{}</span></code></div><div class="L0" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"> </code></div><div class="L1" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">....</span></code></div><div class="L2" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span></code></div><div class="L3" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pun" style="color:#93a1a1;">}</span></code></div></div>
Class有三种表示方式:
(1)XXX.class XXX为类名 实际再告诉我们任何一个类都有一个隐含的已经太成员变量class
<div class="linenums" style="margin:0px; padding-left:0px; color:rgb(30,52,123)"><div class="L0" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="typ" style="color:teal;">Class</span><span class="pln" style="color:#48484c;"> class1 </span><span class="pun" style="color:#93a1a1;">=</span><span class="pln" style="color:#48484c;"> </span><span class="typ" style="color:teal;">Book</span><span class="pun" style="color:#93a1a1;">.</span><span class="kwd" style="color:#1e347b;">class</span><span class="pun" style="color:#93a1a1;">;</span></code></div></div>(2)XXX.getClass() XXX为对象名称 已知该类的实例对象,通过getClass()方法获取
<div class="linenums" style="margin:0px; padding-left:0px; color:rgb(30,52,123)"><div class="L0" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="typ" style="color:teal;">Book</span><span class="pln" style="color:#48484c;"> book </span><span class="pun" style="color:#93a1a1;">=</span><span class="pln" style="color:#48484c;"> </span><span class="kwd" style="color:#1e347b;">new</span><span class="pln" style="color:#48484c;"> </span><span class="typ" style="color:teal;">Book</span><span class="pun" style="color:#93a1a1;">();</span><span class="pln" style="color:#48484c;"> </span></code></div><div class="L1" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="typ" style="color:teal;">Class</span><span class="pln" style="color:#48484c;"> class2 </span><span class="pun" style="color:#93a1a1;">=</span><span class="pln" style="color:#48484c;"> book</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">getClass</span><span class="pun" style="color:#93a1a1;">();</span></code></div></div>(3)通过Class类的forName方法获取
<div class="linenums" style="margin:0px; padding-left:0px; color:rgb(30,52,123)"><div class="L0" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span><span class="kwd" style="color:#1e347b;">try</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">{</span></code></div><div class="L1" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span><span class="typ" style="color:teal;">Class</span><span class="pln" style="color:#48484c;"> class3 </span><span class="pun" style="color:#93a1a1;">=</span><span class="pln" style="color:#48484c;"> </span><span class="typ" style="color:teal;">Class</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">forName</span><span class="pun" style="color:#93a1a1;">(</span><span class="str" style="color:#dd1144;">"com.qunar.bean.Book"</span><span class="pun" style="color:#93a1a1;">);</span></code></div><div class="L2" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span><span class="typ" style="color:teal;">System</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">out</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">println</span><span class="pun" style="color:#93a1a1;">(</span><span class="pln" style="color:#48484c;">class1 </span><span class="pun" style="color:#93a1a1;">==</span><span class="pln" style="color:#48484c;"> class2</span><span class="pun" style="color:#93a1a1;">);</span></code></div><div class="L3" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span><span class="typ" style="color:teal;">System</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">out</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">println</span><span class="pun" style="color:#93a1a1;">(</span><span class="pln" style="color:#48484c;">class1 </span><span class="pun" style="color:#93a1a1;">==</span><span class="pln" style="color:#48484c;"> class3</span><span class="pun" style="color:#93a1a1;">);</span></code></div><div class="L4" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">}</span><span class="pln" style="color:#48484c;"> </span><span class="kwd" style="color:#1e347b;">catch</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">(</span><span class="typ" style="color:teal;">ClassNotFoundException</span><span class="pln" style="color:#48484c;"> e</span><span class="pun" style="color:#93a1a1;">)</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">{</span></code></div><div class="L5" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> e</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">printStackTrace</span><span class="pun" style="color:#93a1a1;">();</span></code></div><div class="L6" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">}</span></code></div><li style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:12px!important"> </li></div>
我们完全可以通过类的类类型创建该类的对象实例,通过class1,class2以及class3创建Book的实例
<div class="linenums" style="margin:0px; padding-left:0px; color:rgb(30,52,123)"><div class="L0" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span><span class="kwd" style="color:#1e347b;">try</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">{</span></code></div><div class="L1" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span><span class="typ" style="color:teal;">Class</span><span class="pln" style="color:#48484c;"> class3 </span><span class="pun" style="color:#93a1a1;">=</span><span class="pln" style="color:#48484c;"> </span><span class="typ" style="color:teal;">Class</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">forName</span><span class="pun" style="color:#93a1a1;">(</span><span class="str" style="color:#dd1144;">"com.qunar.bean.Book"</span><span class="pun" style="color:#93a1a1;">);</span></code></div><div class="L2" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span><span class="com" style="color:#93a1a1;">// 通过类类型的newInstance方法创建实例对象</span></code></div><div class="L3" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span><span class="typ" style="color:teal;">Book</span><span class="pln" style="color:#48484c;"> book2 </span><span class="pun" style="color:#93a1a1;">=</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">(</span><span class="typ" style="color:teal;">Book</span><span class="pun" style="color:#93a1a1;">)</span><span class="pln" style="color:#48484c;">class3</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">newInstance</span><span class="pun" style="color:#93a1a1;">();</span></code></div><div class="L4" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> book2</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">setPrice</span><span class="pun" style="color:#93a1a1;">(</span><span class="str" style="color:#dd1144;">"23.4"</span><span class="pun" style="color:#93a1a1;">);</span></code></div><div class="L5" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">}</span><span class="pln" style="color:#48484c;"> </span><span class="kwd" style="color:#1e347b;">catch</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">(</span><span class="typ" style="color:teal;">ClassNotFoundException</span><span class="pln" style="color:#48484c;"> e</span><span class="pun" style="color:#93a1a1;">)</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">{</span></code></div><div class="L6" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> e</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">printStackTrace</span><span class="pun" style="color:#93a1a1;">();</span></code></div><div class="L7" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">}</span><span class="pln" style="color:#48484c;"> </span><span class="kwd" style="color:#1e347b;">catch</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">(</span><span class="typ" style="color:teal;">InstantiationException</span><span class="pln" style="color:#48484c;"> e</span><span class="pun" style="color:#93a1a1;">)</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">{</span></code></div><div class="L8" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> e</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">printStackTrace</span><span class="pun" style="color:#93a1a1;">();</span></code></div><div class="L9" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">}</span><span class="pln" style="color:#48484c;"> </span><span class="kwd" style="color:#1e347b;">catch</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">(</span><span class="typ" style="color:teal;">IllegalAccessException</span><span class="pln" style="color:#48484c;"> e</span><span class="pun" style="color:#93a1a1;">)</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">{</span></code></div><div class="L0" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> e</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">printStackTrace</span><span class="pun" style="color:#93a1a1;">();</span></code></div><div class="L1" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">}</span></code></div></div>
2. Class动态加载类
Class.forName("类的全称") 不仅表示了类的类类型,还代表了动态加载类。 编译时刻加载类是静态加载类,运行时刻加载类是动态加载类。
3.反射
反射机制--用来检查可用的方法,并返回方法名。
人们想要在运行时获取类的信息的另一个动机,便是希望提供在跨网络的远程平台上创建和运行对象的能力。这被称为远程方法调用,它允许一个Java程序将对象分布到多台机器上。
class类与java.lang.reflect类库一起对反射的概念进行了支持,该类库包含了Filed,Method以及Constructor类(每个类都实现了Member接口)。这些类型的对象是由JVM在运行时创建的,用以表示未知类里对应的成员。这样你就可以使用Constructor创建新的对象,用get()和set()方法读取和修改与Field对象关联的字段,用invoke()方法调用与method对象关联的方法。另外,还可以调用getFields(),getMethods()和getConstructors()等很便利的方法,以返回表示字段,方法以及构造器的对象的数组。这样,匿名对象的类信息就能在运行时被完全确定下来,而在编译时不需要知道任何事情。
其实,反射机制并没有什么神奇之处。当通过反射与一个未知类型的对象打交道时,JVM只知道简单的检查这个对象,看它属于哪个特定的类。在用它做其他事情之前,我们必须先加载这个类的class对象。因此,那个类的.class文件对于JVM来说必须是可获取的,要么在本地机器上,要么可以通过网络可以获得。对于反射机制而言,在编译时不能取得.class文件,只能在运行时打开和检查.class文件。
3.1 获取方法信息
<div class="linenums" style="margin:0px; padding-left:0px; color:rgb(30,52,123)"><div class="L0" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="kwd" style="color:#1e347b;">package</span><span class="pln" style="color:#48484c;"> com</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">qunar</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">reflect</span><span class="pun" style="color:#93a1a1;">;</span></code></div><div class="L1" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"> </code></div><div class="L2" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="kwd" style="color:#1e347b;">public</span><span class="pln" style="color:#48484c;"> </span><span class="kwd" style="color:#1e347b;">class</span><span class="pln" style="color:#48484c;"> </span><span class="typ" style="color:teal;">ReflectDemo</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">{</span></code></div><div class="L3" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"> </code></div><div class="L4" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span><span class="kwd" style="color:#1e347b;">public</span><span class="pln" style="color:#48484c;"> </span><span class="kwd" style="color:#1e347b;">static</span><span class="pln" style="color:#48484c;"> </span><span class="kwd" style="color:#1e347b;">void</span><span class="pln" style="color:#48484c;"> main</span><span class="pun" style="color:#93a1a1;">(</span><span class="typ" style="color:teal;">String</span><span class="pun" style="color:#93a1a1;">[]</span><span class="pln" style="color:#48484c;"> args</span><span class="pun" style="color:#93a1a1;">)</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">{</span></code></div><div class="L5" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span><span class="com" style="color:#93a1a1;">// int的类类型</span></code></div><div class="L6" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span><span class="typ" style="color:teal;">Class</span><span class="pln" style="color:#48484c;"> class1 </span><span class="pun" style="color:#93a1a1;">=</span><span class="pln" style="color:#48484c;"> </span><span class="kwd" style="color:#1e347b;">int</span><span class="pun" style="color:#93a1a1;">.</span><span class="kwd" style="color:#1e347b;">class</span><span class="pun" style="color:#93a1a1;">;</span></code></div><div class="L7" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span><span class="typ" style="color:teal;">Class</span><span class="pln" style="color:#48484c;"> class2 </span><span class="pun" style="color:#93a1a1;">=</span><span class="pln" style="color:#48484c;"> </span><span class="typ" style="color:teal;">String</span><span class="pun" style="color:#93a1a1;">.</span><span class="kwd" style="color:#1e347b;">class</span><span class="pun" style="color:#93a1a1;">;</span></code></div><div class="L8" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span><span class="typ" style="color:teal;">Class</span><span class="pln" style="color:#48484c;"> class3 </span><span class="pun" style="color:#93a1a1;">=</span><span class="pln" style="color:#48484c;"> </span><span class="kwd" style="color:#1e347b;">double</span><span class="pun" style="color:#93a1a1;">.</span><span class="kwd" style="color:#1e347b;">class</span><span class="pun" style="color:#93a1a1;">;</span></code></div><div class="L9" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span><span class="typ" style="color:teal;">Class</span><span class="pln" style="color:#48484c;"> class4 </span><span class="pun" style="color:#93a1a1;">=</span><span class="pln" style="color:#48484c;"> </span><span class="typ" style="color:teal;">Double</span><span class="pun" style="color:#93a1a1;">.</span><span class="kwd" style="color:#1e347b;">class</span><span class="pun" style="color:#93a1a1;">;</span></code></div><div class="L0" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span><span class="typ" style="color:teal;">Class</span><span class="pln" style="color:#48484c;"> class5 </span><span class="pun" style="color:#93a1a1;">=</span><span class="pln" style="color:#48484c;"> </span><span class="kwd" style="color:#1e347b;">void</span><span class="pun" style="color:#93a1a1;">.</span><span class="kwd" style="color:#1e347b;">class</span><span class="pun" style="color:#93a1a1;">;</span></code></div><div class="L1" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span></code></div><div class="L2" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span><span class="typ" style="color:teal;">System</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">out</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">println</span><span class="pun" style="color:#93a1a1;">(</span><span class="str" style="color:#dd1144;">"class1->"</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">+</span><span class="pln" style="color:#48484c;"> class1</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">getName</span><span class="pun" style="color:#93a1a1;">());</span></code></div><div class="L3" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span><span class="typ" style="color:teal;">System</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">out</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">println</span><span class="pun" style="color:#93a1a1;">(</span><span class="str" style="color:#dd1144;">"class2->"</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">+</span><span class="pln" style="color:#48484c;"> class2</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">getName</span><span class="pun" style="color:#93a1a1;">());</span></code></div><div class="L4" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span><span class="typ" style="color:teal;">System</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">out</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">println</span><span class="pun" style="color:#93a1a1;">(</span><span class="str" style="color:#dd1144;">"class3->"</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">+</span><span class="pln" style="color:#48484c;"> class3</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">getName</span><span class="pun" style="color:#93a1a1;">());</span></code></div><div class="L5" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span><span class="typ" style="color:teal;">System</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">out</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">println</span><span class="pun" style="color:#93a1a1;">(</span><span class="str" style="color:#dd1144;">"class4->"</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">+</span><span class="pln" style="color:#48484c;"> class4</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">getName</span><span class="pun" style="color:#93a1a1;">());</span></code></div><div class="L6" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span><span class="typ" style="color:teal;">System</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">out</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">println</span><span class="pun" style="color:#93a1a1;">(</span><span class="str" style="color:#dd1144;">"class5->"</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">+</span><span class="pln" style="color:#48484c;"> class5</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">getName</span><span class="pun" style="color:#93a1a1;">());</span></code></div><div class="L7" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">}</span></code></div><div class="L8" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pun" style="color:#93a1a1;">}</span></code></div></div>运行结果:
class1->int class2->java.lang.String class3->double class4->java.lang.Double class5->void |
<div class="linenums" style="margin:0px; padding-left:0px; color:rgb(30,52,123)"><div class="L0" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="com" style="color:#93a1a1;">// 只打印简单名称(不包含包名称)</span></code></div><div class="L1" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="typ" style="color:teal;">System</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">out</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">println</span><span class="pun" style="color:#93a1a1;">(</span><span class="str" style="color:#dd1144;">"class2->"</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">+</span><span class="pln" style="color:#48484c;"> class2</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">getSimpleName</span><span class="pun" style="color:#93a1a1;">());</span><span class="pln" style="color:#48484c;"> </span><span class="com" style="color:#93a1a1;">// String</span></code></div></div>
<div class="linenums" style="margin:0px; padding-left:0px; color:rgb(30,52,123)"><div class="L0" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span><span class="com" style="color:#93a1a1;">/**</span></code></div><div class="L1" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="com" style="color:#93a1a1;"> * 打印类成员方法信息(public函数,包括父类继承而来的)</span></code></div><div class="L2" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="com" style="color:#93a1a1;"> * @param object</span></code></div><div class="L3" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="com" style="color:#93a1a1;"> */</span></code></div><div class="L4" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span><span class="kwd" style="color:#1e347b;">public</span><span class="pln" style="color:#48484c;"> </span><span class="kwd" style="color:#1e347b;">static</span><span class="pln" style="color:#48484c;"> </span><span class="kwd" style="color:#1e347b;">void</span><span class="pln" style="color:#48484c;"> </span><span class="typ" style="color:teal;">PrintClassPublicFunction</span><span class="pun" style="color:#93a1a1;">(</span><span class="typ" style="color:teal;">Object</span><span class="pln" style="color:#48484c;"> object</span><span class="pun" style="color:#93a1a1;">){</span></code></div><div class="L5" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span><span class="com" style="color:#93a1a1;">// 获取类的信息,首先获取类的类类型</span></code></div><div class="L6" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span><span class="com" style="color:#93a1a1;">// 传递的是哪个子类的对象 c 就是该子类的类类型</span></code></div><div class="L7" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span><span class="typ" style="color:teal;">Class</span><span class="pln" style="color:#48484c;"> c </span><span class="pun" style="color:#93a1a1;">=</span><span class="pln" style="color:#48484c;"> object</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">getClass</span><span class="pun" style="color:#93a1a1;">();</span></code></div><div class="L8" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span><span class="typ" style="color:teal;">System</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">out</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">println</span><span class="pun" style="color:#93a1a1;">(</span><span class="str" style="color:#dd1144;">"类的全称是:"</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">+</span><span class="pln" style="color:#48484c;"> c</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">getName</span><span class="pun" style="color:#93a1a1;">());</span></code></div><div class="L9" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span><span class="com" style="color:#93a1a1;">// 一个成员方法就是一个method对象</span></code></div><div class="L0" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span><span class="com" style="color:#93a1a1;">// getMethods方法是获取的是所有public的函数,包括父类继承而来的</span></code></div><div class="L1" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span><span class="typ" style="color:teal;">Method</span><span class="pun" style="color:#93a1a1;">[]</span><span class="pln" style="color:#48484c;"> methods </span><span class="pun" style="color:#93a1a1;">=</span><span class="pln" style="color:#48484c;"> c</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">getMethods</span><span class="pun" style="color:#93a1a1;">();</span></code></div><div class="L2" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span><span class="kwd" style="color:#1e347b;">for</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">(</span><span class="typ" style="color:teal;">Method</span><span class="pln" style="color:#48484c;"> method </span><span class="pun" style="color:#93a1a1;">:</span><span class="pln" style="color:#48484c;"> methods</span><span class="pun" style="color:#93a1a1;">)</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">{</span></code></div><div class="L3" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span><span class="com" style="color:#93a1a1;">// 获取方法返回值类型的类类型</span></code></div><div class="L4" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span><span class="typ" style="color:teal;">Class</span><span class="pln" style="color:#48484c;"> returnType </span><span class="pun" style="color:#93a1a1;">=</span><span class="pln" style="color:#48484c;"> method</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">getReturnType</span><span class="pun" style="color:#93a1a1;">();</span></code></div><div class="L5" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span><span class="typ" style="color:teal;">System</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">out</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">print</span><span class="pun" style="color:#93a1a1;">(</span><span class="pln" style="color:#48484c;">returnType</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">getName</span><span class="pun" style="color:#93a1a1;">()</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">+</span><span class="pln" style="color:#48484c;"> </span><span class="str" style="color:#dd1144;">" "</span><span class="pun" style="color:#93a1a1;">);</span></code></div><div class="L6" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span></code></div><div class="L7" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span><span class="com" style="color:#93a1a1;">// 获取方法的名称</span></code></div><div class="L8" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span><span class="typ" style="color:teal;">System</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">out</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">print</span><span class="pun" style="color:#93a1a1;">(</span><span class="pln" style="color:#48484c;">method</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">getName</span><span class="pun" style="color:#93a1a1;">()</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">+</span><span class="pln" style="color:#48484c;"> </span><span class="str" style="color:#dd1144;">"("</span><span class="pun" style="color:#93a1a1;">);</span></code></div><div class="L9" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span></code></div><div class="L0" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span><span class="com" style="color:#93a1a1;">// 获取方法参数</span></code></div><div class="L1" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span><span class="com" style="color:#93a1a1;">// 得到方法参数列表中类型的类类型</span></code></div><div class="L2" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span><span class="typ" style="color:teal;">Class</span><span class="pun" style="color:#93a1a1;">[]</span><span class="pln" style="color:#48484c;"> paramTypes </span><span class="pun" style="color:#93a1a1;">=</span><span class="pln" style="color:#48484c;"> method</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">getParameterTypes</span><span class="pun" style="color:#93a1a1;">();</span></code></div><div class="L3" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span><span class="kwd" style="color:#1e347b;">int</span><span class="pln" style="color:#48484c;"> size </span><span class="pun" style="color:#93a1a1;">=</span><span class="pln" style="color:#48484c;"> paramTypes</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">length</span><span class="pun" style="color:#93a1a1;">;</span></code></div><div class="L4" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span><span class="kwd" style="color:#1e347b;">for</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">(</span><span class="kwd" style="color:#1e347b;">int</span><span class="pln" style="color:#48484c;"> i </span><span class="pun" style="color:#93a1a1;">=</span><span class="pln" style="color:#48484c;"> </span><span class="lit" style="color:#195f91;">0</span><span class="pun" style="color:#93a1a1;">;</span><span class="pln" style="color:#48484c;">i </span><span class="pun" style="color:#93a1a1;"><</span><span class="pln" style="color:#48484c;"> size</span><span class="pun" style="color:#93a1a1;">;++</span><span class="pln" style="color:#48484c;">i</span><span class="pun" style="color:#93a1a1;">)</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">{</span></code></div><div class="L5" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span><span class="kwd" style="color:#1e347b;">if</span><span class="pun" style="color:#93a1a1;">(</span><span class="pln" style="color:#48484c;">i </span><span class="pun" style="color:#93a1a1;">!=</span><span class="pln" style="color:#48484c;"> </span><span class="lit" style="color:#195f91;">0</span><span class="pun" style="color:#93a1a1;">){</span></code></div><div class="L6" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span><span class="typ" style="color:teal;">System</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">out</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">print</span><span class="pun" style="color:#93a1a1;">(</span><span class="str" style="color:#dd1144;">","</span><span class="pun" style="color:#93a1a1;">);</span></code></div><div class="L7" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">}</span><span class="com" style="color:#93a1a1;">//if</span></code></div><div class="L8" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span><span class="typ" style="color:teal;">System</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">out</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">print</span><span class="pun" style="color:#93a1a1;">(</span><span class="pln" style="color:#48484c;">paramTypes</span><span class="pun" style="color:#93a1a1;">[</span><span class="pln" style="color:#48484c;">i</span><span class="pun" style="color:#93a1a1;">].</span><span class="pln" style="color:#48484c;">getName</span><span class="pun" style="color:#93a1a1;">());</span></code></div><div class="L9" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">}</span><span class="com" style="color:#93a1a1;">//for</span></code></div><div class="L0" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span><span class="typ" style="color:teal;">System</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">out</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">println</span><span class="pun" style="color:#93a1a1;">(</span><span class="str" style="color:#dd1144;">")"</span><span class="pun" style="color:#93a1a1;">);</span></code></div><div class="L1" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">}</span><span class="com" style="color:#93a1a1;">//for</span></code></div><div class="L2" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">}</span></code></div></div>运行结果:
boolean startsWith(java.lang.String) boolean startsWith(java.lang.String,int) java.lang.CharSequence subSequence(int,int) java.lang.String substring(int,int) java.lang.String substring(int) [C toCharArray() java.lang.String toLowerCase(java.util.Locale) java.lang.String toLowerCase() java.lang.String toUpperCase() java.lang.String valueOf([C) java.lang.Class getClass() void notify() void notifyAll() void wait(long) void wait(long,int) void wait() .... |
3.2 获取成员变量信息
<div class="linenums" style="margin:0px; padding-left:0px; color:rgb(30,52,123)"><div class="L0" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span><span class="com" style="color:#93a1a1;">/**</span></code></div><div class="L1" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="com" style="color:#93a1a1;"> * 打印类成员变量信息</span></code></div><div class="L2" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="com" style="color:#93a1a1;"> * @param object</span></code></div><div class="L3" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="com" style="color:#93a1a1;"> */</span></code></div><div class="L4" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span><span class="kwd" style="color:#1e347b;">public</span><span class="pln" style="color:#48484c;"> </span><span class="kwd" style="color:#1e347b;">static</span><span class="pln" style="color:#48484c;"> </span><span class="kwd" style="color:#1e347b;">void</span><span class="pln" style="color:#48484c;"> </span><span class="typ" style="color:teal;">PrintClassFiled</span><span class="pun" style="color:#93a1a1;">(</span><span class="typ" style="color:teal;">Object</span><span class="pln" style="color:#48484c;"> object</span><span class="pun" style="color:#93a1a1;">){</span></code></div><div class="L5" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span><span class="com" style="color:#93a1a1;">// 获取类的信息,首先获取类的类类型</span></code></div><div class="L6" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span><span class="com" style="color:#93a1a1;">// 传递的是哪个子类的对象 c 就是该子类的类类型</span></code></div><div class="L7" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span><span class="typ" style="color:teal;">Class</span><span class="pln" style="color:#48484c;"> c </span><span class="pun" style="color:#93a1a1;">=</span><span class="pln" style="color:#48484c;"> object</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">getClass</span><span class="pun" style="color:#93a1a1;">();</span></code></div><div class="L8" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span></code></div><div class="L9" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span><span class="com" style="color:#93a1a1;">/* 成员变量也是对象,java.lang.reflect.Field 类封装了关于成员变量的操作</span></code></div><div class="L0" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="com" style="color:#93a1a1;"> * getFields()方法获取的是所有的public的成员变量的信息</span></code></div><div class="L1" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="com" style="color:#93a1a1;"> * getDeclaredFields()获取的是该类自己声明的成员变量的信息</span></code></div><div class="L2" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="com" style="color:#93a1a1;"> */</span></code></div><div class="L3" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span><span class="typ" style="color:teal;">Field</span><span class="pun" style="color:#93a1a1;">[]</span><span class="pln" style="color:#48484c;"> fields </span><span class="pun" style="color:#93a1a1;">=</span><span class="pln" style="color:#48484c;"> c</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">getDeclaredFields</span><span class="pun" style="color:#93a1a1;">();</span></code></div><div class="L4" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span><span class="kwd" style="color:#1e347b;">for</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">(</span><span class="typ" style="color:teal;">Field</span><span class="pln" style="color:#48484c;"> field </span><span class="pun" style="color:#93a1a1;">:</span><span class="pln" style="color:#48484c;"> fields</span><span class="pun" style="color:#93a1a1;">)</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">{</span></code></div><div class="L5" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span><span class="com" style="color:#93a1a1;">// 得到成员变量的类型的类类型</span></code></div><div class="L6" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span><span class="typ" style="color:teal;">Class</span><span class="pln" style="color:#48484c;"> fieldType </span><span class="pun" style="color:#93a1a1;">=</span><span class="pln" style="color:#48484c;"> field</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">getType</span><span class="pun" style="color:#93a1a1;">();</span></code></div><div class="L7" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span><span class="com" style="color:#93a1a1;">// 得到成员变量的类型</span></code></div><div class="L8" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span><span class="typ" style="color:teal;">System</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">out</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">print</span><span class="pun" style="color:#93a1a1;">(</span><span class="pln" style="color:#48484c;">fieldType</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">getName</span><span class="pun" style="color:#93a1a1;">()</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">+</span><span class="pln" style="color:#48484c;"> </span><span class="str" style="color:#dd1144;">" "</span><span class="pun" style="color:#93a1a1;">);</span></code></div><div class="L9" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span><span class="com" style="color:#93a1a1;">// 得到成员变量的名称</span></code></div><div class="L0" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span><span class="typ" style="color:teal;">System</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">out</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">println</span><span class="pun" style="color:#93a1a1;">(</span><span class="pln" style="color:#48484c;">field</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">getName</span><span class="pun" style="color:#93a1a1;">());</span></code></div><div class="L1" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">}</span><span class="com" style="color:#93a1a1;">//for</span></code></div><div class="L2" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">}</span></code></div></div>运行结果:
int MIN_VALUE int MAX_VALUE java.lang.Class TYPE [C digits [C DigitTens [C DigitOnes [I sizeTable int value int SIZE long serialVersionUID boolean $assertionsDisabled |
3.3 获取构造函数信息
<div class="linenums" style="margin:0px; padding-left:0px; color:rgb(30,52,123)"><div class="L0" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span><span class="com" style="color:#93a1a1;">/**</span></code></div><div class="L1" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="com" style="color:#93a1a1;"> * 打印类构造函数信息</span></code></div><div class="L2" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="com" style="color:#93a1a1;"> * @param object</span></code></div><div class="L3" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="com" style="color:#93a1a1;"> */</span></code></div><div class="L4" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span><span class="kwd" style="color:#1e347b;">public</span><span class="pln" style="color:#48484c;"> </span><span class="kwd" style="color:#1e347b;">static</span><span class="pln" style="color:#48484c;"> </span><span class="kwd" style="color:#1e347b;">void</span><span class="pln" style="color:#48484c;"> </span><span class="typ" style="color:teal;">PrintClassConstructor</span><span class="pun" style="color:#93a1a1;">(</span><span class="typ" style="color:teal;">Object</span><span class="pln" style="color:#48484c;"> object</span><span class="pun" style="color:#93a1a1;">){</span></code></div><div class="L5" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span><span class="com" style="color:#93a1a1;">// 获取类的信息,首先获取类的类类型</span></code></div><div class="L6" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span><span class="com" style="color:#93a1a1;">// 传递的是哪个子类的对象 c 就是该子类的类类型</span></code></div><div class="L7" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span><span class="typ" style="color:teal;">Class</span><span class="pln" style="color:#48484c;"> c </span><span class="pun" style="color:#93a1a1;">=</span><span class="pln" style="color:#48484c;"> object</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">getClass</span><span class="pun" style="color:#93a1a1;">();</span></code></div><div class="L8" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span></code></div><div class="L9" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span><span class="com" style="color:#93a1a1;">/* 构造函数也是对象,java.lang.reflect.Constructor 类封装了关于构造函数的操作</span></code></div><div class="L0" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="com" style="color:#93a1a1;"> * getConstructors()方法获取的是所有的public的构造函数的信息</span></code></div><div class="L1" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="com" style="color:#93a1a1;"> * getDeclaredConstructors()获取的是该类自己声明的构造函数的信息</span></code></div><div class="L2" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="com" style="color:#93a1a1;"> */</span></code></div><div class="L3" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span><span class="typ" style="color:teal;">Constructor</span><span class="pun" style="color:#93a1a1;">[]</span><span class="pln" style="color:#48484c;"> constructors </span><span class="pun" style="color:#93a1a1;">=</span><span class="pln" style="color:#48484c;"> c</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">getConstructors</span><span class="pun" style="color:#93a1a1;">();</span></code></div><div class="L4" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span><span class="kwd" style="color:#1e347b;">for</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">(</span><span class="typ" style="color:teal;">Constructor</span><span class="pln" style="color:#48484c;"> constructor </span><span class="pun" style="color:#93a1a1;">:</span><span class="pln" style="color:#48484c;"> constructors</span><span class="pun" style="color:#93a1a1;">)</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">{</span></code></div><div class="L5" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span><span class="com" style="color:#93a1a1;">// 构造函数的名称</span></code></div><div class="L6" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span><span class="typ" style="color:teal;">System</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">out</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">print</span><span class="pun" style="color:#93a1a1;">(</span><span class="pln" style="color:#48484c;">constructor</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">getName</span><span class="pun" style="color:#93a1a1;">()</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">+</span><span class="pln" style="color:#48484c;"> </span><span class="str" style="color:#dd1144;">"("</span><span class="pun" style="color:#93a1a1;">);</span></code></div><div class="L7" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span><span class="com" style="color:#93a1a1;">// 获取构造函数的参数列表,得到的是参数列表的类类型</span></code></div><div class="L8" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span><span class="typ" style="color:teal;">Class</span><span class="pun" style="color:#93a1a1;">[]</span><span class="pln" style="color:#48484c;"> paramTypes </span><span class="pun" style="color:#93a1a1;">=</span><span class="pln" style="color:#48484c;"> constructor</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">getParameterTypes</span><span class="pun" style="color:#93a1a1;">();</span></code></div><div class="L9" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span><span class="kwd" style="color:#1e347b;">int</span><span class="pln" style="color:#48484c;"> size </span><span class="pun" style="color:#93a1a1;">=</span><span class="pln" style="color:#48484c;"> paramTypes</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">length</span><span class="pun" style="color:#93a1a1;">;</span></code></div><div class="L0" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span><span class="kwd" style="color:#1e347b;">for</span><span class="pun" style="color:#93a1a1;">(</span><span class="kwd" style="color:#1e347b;">int</span><span class="pln" style="color:#48484c;"> i </span><span class="pun" style="color:#93a1a1;">=</span><span class="pln" style="color:#48484c;"> </span><span class="lit" style="color:#195f91;">0</span><span class="pun" style="color:#93a1a1;">;</span><span class="pln" style="color:#48484c;">i </span><span class="pun" style="color:#93a1a1;"><</span><span class="pln" style="color:#48484c;"> size</span><span class="pun" style="color:#93a1a1;">;++</span><span class="pln" style="color:#48484c;">i</span><span class="pun" style="color:#93a1a1;">){</span></code></div><div class="L1" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span><span class="kwd" style="color:#1e347b;">if</span><span class="pun" style="color:#93a1a1;">(</span><span class="pln" style="color:#48484c;">i </span><span class="pun" style="color:#93a1a1;">!=</span><span class="pln" style="color:#48484c;"> </span><span class="lit" style="color:#195f91;">0</span><span class="pun" style="color:#93a1a1;">){</span></code></div><div class="L2" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span><span class="typ" style="color:teal;">System</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">out</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">print</span><span class="pun" style="color:#93a1a1;">(</span><span class="str" style="color:#dd1144;">","</span><span class="pun" style="color:#93a1a1;">);</span></code></div><div class="L3" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">}</span><span class="com" style="color:#93a1a1;">//if</span></code></div><div class="L4" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span><span class="com" style="color:#93a1a1;">// 得到参数名称</span></code></div><div class="L5" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span><span class="typ" style="color:teal;">System</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">out</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">print</span><span class="pun" style="color:#93a1a1;">(</span><span class="pln" style="color:#48484c;">paramTypes</span><span class="pun" style="color:#93a1a1;">[</span><span class="pln" style="color:#48484c;">i</span><span class="pun" style="color:#93a1a1;">].</span><span class="pln" style="color:#48484c;">getName</span><span class="pun" style="color:#93a1a1;">());</span></code></div><div class="L6" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">}</span><span class="com" style="color:#93a1a1;">//for</span></code></div><div class="L7" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span><span class="typ" style="color:teal;">System</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">out</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">println</span><span class="pun" style="color:#93a1a1;">(</span><span class="str" style="color:#dd1144;">")"</span><span class="pun" style="color:#93a1a1;">);</span></code></div><div class="L8" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">}</span><span class="com" style="color:#93a1a1;">//for</span></code></div><div class="L9" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">}</span></code></div></div>运行结果:
java.lang.String([B) java.lang.String([B,int,int) java.lang.String([B,java.nio.charset.Charset) java.lang.String([B,java.lang.String) java.lang.String([B,int,int,java.nio.charset.Charset) java.lang.String(java.lang.StringBuilder) java.lang.String(java.lang.StringBuffer) java.lang.String([I,int,int) java.lang.String([C,int,int) java.lang.String([C) java.lang.String(java.lang.String) java.lang.String() java.lang.String([B,int,int,java.lang.String) java.lang.String([B,int) java.lang.String([B,int,int,int) |
3.4 方法的反射
如何获取某个方法?方法的名称和方法的参数列表才能唯一决定某个方法。 如何进行操作?通过method.invoke(对象,参数列表)
<div class="linenums" style="margin:0px; padding-left:0px; color:rgb(30,52,123)"><div class="L0" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="kwd" style="color:#1e347b;">package</span><span class="pln" style="color:#48484c;"> com</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">qunar</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">reflect</span><span class="pun" style="color:#93a1a1;">;</span></code></div><div class="L1" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"> </code></div><div class="L2" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="kwd" style="color:#1e347b;">import</span><span class="pln" style="color:#48484c;"> java</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">lang</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">reflect</span><span class="pun" style="color:#93a1a1;">.</span><span class="typ" style="color:teal;">InvocationTargetException</span><span class="pun" style="color:#93a1a1;">;</span></code></div><div class="L3" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="kwd" style="color:#1e347b;">import</span><span class="pln" style="color:#48484c;"> java</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">lang</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">reflect</span><span class="pun" style="color:#93a1a1;">.</span><span class="typ" style="color:teal;">Method</span><span class="pun" style="color:#93a1a1;">;</span></code></div><div class="L4" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"> </code></div><div class="L5" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="kwd" style="color:#1e347b;">import</span><span class="pln" style="color:#48484c;"> com</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">qunar</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">bean</span><span class="pun" style="color:#93a1a1;">.</span><span class="typ" style="color:teal;">Calculates</span><span class="pun" style="color:#93a1a1;">;</span></code></div><div class="L6" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"> </code></div><div class="L7" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"> </code></div><div class="L8" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="kwd" style="color:#1e347b;">public</span><span class="pln" style="color:#48484c;"> </span><span class="kwd" style="color:#1e347b;">class</span><span class="pln" style="color:#48484c;"> </span><span class="typ" style="color:teal;">ReflectDemo</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">{</span></code></div><div class="L9" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"> </code></div><div class="L0" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span><span class="kwd" style="color:#1e347b;">public</span><span class="pln" style="color:#48484c;"> </span><span class="kwd" style="color:#1e347b;">static</span><span class="pln" style="color:#48484c;"> </span><span class="kwd" style="color:#1e347b;">void</span><span class="pln" style="color:#48484c;"> main</span><span class="pun" style="color:#93a1a1;">(</span><span class="typ" style="color:teal;">String</span><span class="pun" style="color:#93a1a1;">[]</span><span class="pln" style="color:#48484c;"> args</span><span class="pun" style="color:#93a1a1;">)</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">{</span></code></div><div class="L1" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span><span class="com" style="color:#93a1a1;">// 获取类的信息,首先获取类的类类型</span></code></div><div class="L2" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span><span class="typ" style="color:teal;">Calculates</span><span class="pln" style="color:#48484c;"> calculates </span><span class="pun" style="color:#93a1a1;">=</span><span class="pln" style="color:#48484c;"> </span><span class="kwd" style="color:#1e347b;">new</span><span class="pln" style="color:#48484c;"> </span><span class="typ" style="color:teal;">Calculates</span><span class="pun" style="color:#93a1a1;">();</span></code></div><div class="L3" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> calculates</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">setNum1</span><span class="pun" style="color:#93a1a1;">(</span><span class="lit" style="color:#195f91;">20</span><span class="pun" style="color:#93a1a1;">);</span></code></div><div class="L4" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> calculates</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">setNum2</span><span class="pun" style="color:#93a1a1;">(</span><span class="lit" style="color:#195f91;">40</span><span class="pun" style="color:#93a1a1;">);</span></code></div><div class="L5" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span></code></div><div class="L6" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span><span class="typ" style="color:teal;">Class</span><span class="pln" style="color:#48484c;"> c </span><span class="pun" style="color:#93a1a1;">=</span><span class="pln" style="color:#48484c;"> calculates</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">getClass</span><span class="pun" style="color:#93a1a1;">();</span></code></div><div class="L7" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span></code></div><div class="L8" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span><span class="com" style="color:#93a1a1;">/* getMethod()方法获取的是public的方法信息</span></code></div><div class="L9" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="com" style="color:#93a1a1;"> * getDeclaredMethod()获取的是该类自己声明的方法的信息</span></code></div><div class="L0" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="com" style="color:#93a1a1;"> */</span></code></div><div class="L1" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span><span class="kwd" style="color:#1e347b;">try</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">{</span></code></div><div class="L2" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span><span class="com" style="color:#93a1a1;">// 获取方法 名称和参数列表共同决定</span></code></div><div class="L3" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span><span class="com" style="color:#93a1a1;">// Method method = c.getDeclaredMethod("add", new Class[]{int.class,int.class});</span></code></div><div class="L4" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span><span class="typ" style="color:teal;">Method</span><span class="pln" style="color:#48484c;"> method </span><span class="pun" style="color:#93a1a1;">=</span><span class="pln" style="color:#48484c;"> c</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">getDeclaredMethod</span><span class="pun" style="color:#93a1a1;">(</span><span class="str" style="color:#dd1144;">"add"</span><span class="pun" style="color:#93a1a1;">,</span><span class="pln" style="color:#48484c;"> </span><span class="kwd" style="color:#1e347b;">int</span><span class="pun" style="color:#93a1a1;">.</span><span class="kwd" style="color:#1e347b;">class</span><span class="pun" style="color:#93a1a1;">,</span><span class="kwd" style="color:#1e347b;">int</span><span class="pun" style="color:#93a1a1;">.</span><span class="kwd" style="color:#1e347b;">class</span><span class="pun" style="color:#93a1a1;">);</span></code></div><div class="L5" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span><span class="com" style="color:#93a1a1;">// 方法的反射 </span></code></div><div class="L6" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span><span class="com" style="color:#93a1a1;">// 对于calculates.add(10,40)来说,方法的反射操作是用method方法调用 和 calculates.add(10,40)的效果一样</span></code></div><div class="L7" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span><span class="com" style="color:#93a1a1;">// int result = (int)method.invoke(calculates, new Object[]{10,40});</span></code></div><div class="L8" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span><span class="kwd" style="color:#1e347b;">int</span><span class="pln" style="color:#48484c;"> result </span><span class="pun" style="color:#93a1a1;">=</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">(</span><span class="kwd" style="color:#1e347b;">int</span><span class="pun" style="color:#93a1a1;">)</span><span class="pln" style="color:#48484c;">method</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">invoke</span><span class="pun" style="color:#93a1a1;">(</span><span class="pln" style="color:#48484c;">calculates</span><span class="pun" style="color:#93a1a1;">,</span><span class="pln" style="color:#48484c;"> </span><span class="lit" style="color:#195f91;">10</span><span class="pun" style="color:#93a1a1;">,</span><span class="lit" style="color:#195f91;">40</span><span class="pun" style="color:#93a1a1;">);</span></code></div><div class="L9" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span><span class="typ" style="color:teal;">System</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">out</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">println</span><span class="pun" style="color:#93a1a1;">(</span><span class="pln" style="color:#48484c;">result</span><span class="pun" style="color:#93a1a1;">);</span></code></div><div class="L0" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span></code></div><div class="L1" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span><span class="com" style="color:#93a1a1;">// 对于没有参数的方法</span></code></div><div class="L2" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span><span class="typ" style="color:teal;">Method</span><span class="pln" style="color:#48484c;"> method2 </span><span class="pun" style="color:#93a1a1;">=</span><span class="pln" style="color:#48484c;"> c</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">getDeclaredMethod</span><span class="pun" style="color:#93a1a1;">(</span><span class="str" style="color:#dd1144;">"print"</span><span class="pun" style="color:#93a1a1;">);</span></code></div><div class="L3" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> method2</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">invoke</span><span class="pun" style="color:#93a1a1;">(</span><span class="pln" style="color:#48484c;">calculates</span><span class="pun" style="color:#93a1a1;">);</span></code></div><div class="L4" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">}</span><span class="pln" style="color:#48484c;"> </span><span class="kwd" style="color:#1e347b;">catch</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">(</span><span class="typ" style="color:teal;">NoSuchMethodException</span><span class="pln" style="color:#48484c;"> e</span><span class="pun" style="color:#93a1a1;">)</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">{</span></code></div><div class="L5" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> e</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">printStackTrace</span><span class="pun" style="color:#93a1a1;">();</span></code></div><div class="L6" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">}</span><span class="pln" style="color:#48484c;"> </span><span class="kwd" style="color:#1e347b;">catch</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">(</span><span class="typ" style="color:teal;">SecurityException</span><span class="pln" style="color:#48484c;"> e</span><span class="pun" style="color:#93a1a1;">)</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">{</span></code></div><div class="L7" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> e</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">printStackTrace</span><span class="pun" style="color:#93a1a1;">();</span></code></div><div class="L8" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">}</span><span class="pln" style="color:#48484c;"> </span><span class="kwd" style="color:#1e347b;">catch</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">(</span><span class="typ" style="color:teal;">IllegalAccessException</span><span class="pln" style="color:#48484c;"> e</span><span class="pun" style="color:#93a1a1;">)</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">{</span></code></div><div class="L9" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> e</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">printStackTrace</span><span class="pun" style="color:#93a1a1;">();</span></code></div><div class="L0" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">}</span><span class="pln" style="color:#48484c;"> </span><span class="kwd" style="color:#1e347b;">catch</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">(</span><span class="typ" style="color:teal;">IllegalArgumentException</span><span class="pln" style="color:#48484c;"> e</span><span class="pun" style="color:#93a1a1;">)</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">{</span></code></div><div class="L1" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> e</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">printStackTrace</span><span class="pun" style="color:#93a1a1;">();</span></code></div><div class="L2" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">}</span><span class="pln" style="color:#48484c;"> </span><span class="kwd" style="color:#1e347b;">catch</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">(</span><span class="typ" style="color:teal;">InvocationTargetException</span><span class="pln" style="color:#48484c;"> e</span><span class="pun" style="color:#93a1a1;">)</span><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">{</span></code></div><div class="L3" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> e</span><span class="pun" style="color:#93a1a1;">.</span><span class="pln" style="color:#48484c;">printStackTrace</span><span class="pun" style="color:#93a1a1;">();</span></code></div><div class="L4" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">}</span></code></div><div class="L5" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pln" style="color:#48484c;"> </span><span class="pun" style="color:#93a1a1;">}</span></code></div><div class="L6" style="margin:0px; color:rgb(190,190,197); line-height:18px; padding-left:0px; list-style-type:none"><code class="language-java" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace; word-wrap:break-word; margin:8px 0px"><span class="pun" style="color:#93a1a1;">}</span></code></div></div>
相关文章
- 暂无相关文章
用户点评