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()和get Constructors()等很便利的方法,以返回表示字段,方法以及构造器的对象的数组。这样,匿名对象的类信息就能在运行时被完全确定下来,而在编译时不需要知道任何事情。

其实,反射机制并没有什么神奇之处。当通过反射与一个未知类型的对象打交道时,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>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值