class="markdown_views prism-atom-one-dark">
class ="tags" href="/tags/FanShe.html" title=反射>反射(英语:reflection)是指计算机程序在运行时(runtime)可以访问、检测和修改它本身状态或行为的一种能力。用比喻来说,class ="tags" href="/tags/FanShe.html" title=反射>反射就是程序在运行的时候能够“观察”并且修改自己的行为。 1.class ="tags" href="/tags/FanShe.html" title=反射>反射类 举个例子:
class="prism language-class ="tags" href="/tags/JAVA.html" title=java>javascript">class="token keyword">public class="token keyword">class class="token class -name">Foo class="token punctuation">{
class="token keyword">public class="token keyword">void class="token function">hello class="token punctuation">( class="token punctuation">) class="token punctuation">{
Systemclass="token punctuation">. outclass="token punctuation">. class="token function">println class="token punctuation">( class="token string">"hello" class="token punctuation">) class="token punctuation">;
class="token punctuation">}
class="token keyword">public class="token keyword">static class="token keyword">void class="token function">main class="token punctuation">( Stringclass="token punctuation">[ class="token punctuation">] argsclass="token punctuation">) class="token punctuation">{
class="token keyword">try class="token punctuation">{
Object foo class="token operator">= Classclass="token punctuation">. class="token function">forName class="token punctuation">( class="token string">"complete.class path.and.Foo" class="token punctuation">) class="token punctuation">. class="token function">newInstance class="token punctuation">( class="token punctuation">) class="token punctuation">;
Method m class="token operator">= fooclass="token punctuation">. class="token function">getClass class="token punctuation">( class="token punctuation">) class="token punctuation">. class="token function">getDeclaredMethod class="token punctuation">( class="token string">"hello" class="token punctuation">, class="token keyword">new class="token class -name">Class class="token operator">< class="token operator">? class="token operator">> class="token punctuation">[ class="token number">0 class="token punctuation">] class="token punctuation">) class="token punctuation">;
mclass="token punctuation">. class="token function">invoke class="token punctuation">( fooclass="token punctuation">) class="token punctuation">;
class="token punctuation">} class="token keyword">catch class="token punctuation">( class="token class -name">Exception eclass="token punctuation">) class="token punctuation">{
class="token comment">// Catching ClassNotFoundException, NoSuchMethodException
class="token comment">// InstantiationException, IllegalAccessException
class="token punctuation">}
class="token punctuation">}
class="token punctuation">}
2.class ="tags" href="/tags/FanShe.html" title=反射>反射构造函数 举个例子:
class="prism language-class ="tags" href="/tags/JAVA.html" title=java>javascript">class="token keyword">public class="token keyword">class class="token class -name">Foo class="token punctuation">{
class="token keyword">public class="token function">Foo class="token punctuation">( String sclass="token punctuation">, String aclass="token punctuation">) class="token punctuation">{
class="token punctuation">}
class="token keyword">public class="token keyword">void class="token function">hello class="token punctuation">( class="token punctuation">) class="token punctuation">{
Systemclass="token punctuation">. outclass="token punctuation">. class="token function">println class="token punctuation">( class="token string">"hello" class="token punctuation">) class="token punctuation">;
class="token punctuation">}
class="token keyword">public class="token keyword">static class="token keyword">void class="token function">main class="token punctuation">( Stringclass="token punctuation">[ class="token punctuation">] argsclass="token punctuation">) class="token punctuation">{
class="token keyword">try class="token punctuation">{
Classclass="token operator">< class="token operator">? class="token operator">> class Foo class="token operator">= Classclass="token punctuation">. class="token function">forName class="token punctuation">( class="token string">"complete.class path.and.Foo" class="token punctuation">) class="token punctuation">;
Constructorclass="token operator">< class="token operator">? class="token operator">> declaredConstructorFoo class="token operator">= class Fooclass="token punctuation">. class="token function">getDeclaredConstructor class="token punctuation">( Stringclass="token punctuation">. class="token keyword">class class="token punctuation">, Stringclass="token punctuation">. class="token keyword">class class="token punctuation">) class="token punctuation">;
declaredConstructorFooclass="token punctuation">. class="token function">setAccessible class="token punctuation">( class="token boolean">true class="token punctuation">) class="token punctuation">;
Object foo class="token operator">= declaredConstructorFooclass="token punctuation">. class="token function">newInstance class="token punctuation">( class="token string">"a" class="token punctuation">, class="token string">"b" class="token punctuation">) class="token punctuation">;
Method m class="token operator">= fooclass="token punctuation">. class="token function">getClass class="token punctuation">( class="token punctuation">) class="token punctuation">. class="token function">getDeclaredMethod class="token punctuation">( class="token string">"hello" class="token punctuation">, class="token keyword">new class="token class -name">Class class="token operator">< class="token operator">? class="token operator">> class="token punctuation">[ class="token number">0 class="token punctuation">] class="token punctuation">) class="token punctuation">;
mclass="token punctuation">. class="token function">invoke class="token punctuation">( fooclass="token punctuation">) class="token punctuation">;
class="token punctuation">} class="token keyword">catch class="token punctuation">( class="token class -name">Exception eclass="token punctuation">) class="token punctuation">{
class="token comment">// Catching ClassNotFoundException, NoSuchMethodException
class="token comment">// InstantiationException, IllegalAccessException
class="token punctuation">}
class="token punctuation">}
class="token punctuation">}
3.class ="tags" href="/tags/FanShe.html" title=反射>反射成员变量 举个例子:
class="prism language-class ="tags" href="/tags/JAVA.html" title=java>javascript">class="token keyword">public class="token keyword">class class="token class -name">Foo class="token punctuation">{
class="token keyword">public String ttt class="token operator">= class="token string">"aaaaaa" class="token punctuation">;
class="token keyword">public class="token function">Foo class="token punctuation">( String sclass="token punctuation">, String aclass="token punctuation">) class="token punctuation">{
class="token punctuation">}
class="token keyword">public class="token keyword">void class="token function">hello class="token punctuation">( class="token punctuation">) class="token punctuation">{
Systemclass="token punctuation">. outclass="token punctuation">. class="token function">println class="token punctuation">( class="token string">"hello" class="token punctuation">) class="token punctuation">;
class="token punctuation">}
class="token keyword">public class="token keyword">static class="token keyword">void class="token function">main class="token punctuation">( Stringclass="token punctuation">[ class="token punctuation">] argsclass="token punctuation">) class="token punctuation">{
class="token keyword">try class="token punctuation">{
Classclass="token operator">< class="token operator">? class="token operator">> class Foo class="token operator">= Classclass="token punctuation">. class="token function">forName class="token punctuation">( class="token string">"complete.class path.and.Foo" class="token punctuation">) class="token punctuation">;
Object foo class="token operator">= class Fooclass="token punctuation">. class="token function">newInstance class="token punctuation">( class="token punctuation">) class="token punctuation">;
Field fieldttt class="token operator">= class Fooclass="token punctuation">. class="token function">getDeclaredField class="token punctuation">( class="token string">"ttt" class="token punctuation">) class="token punctuation">;
fieldtttclass="token punctuation">. class="token function">setAccessible class="token punctuation">( class="token boolean">true class="token punctuation">) class="token punctuation">;
String ttt class="token operator">= class="token punctuation">( Stringclass="token punctuation">) fieldtttclass="token punctuation">. class="token keyword">get class="token punctuation">( class Fooclass="token punctuation">) class="token punctuation">;
Systemclass="token punctuation">. outclass="token punctuation">. class="token function">println class="token punctuation">( class="token string">"reflectPrivateField tag = " class="token operator">+ tttclass="token punctuation">) class="token punctuation">; class="token punctuation">} class="token keyword">catch class="token punctuation">( class="token class -name">Exception eclass="token punctuation">) class="token punctuation">{
class="token comment">// Catching ClassNotFoundException, NoSuchMethodException
class="token comment">// InstantiationException, IllegalAccessException
class="token punctuation">}
class="token punctuation">}
class="token punctuation">}
4.class ="tags" href="/tags/FanShe.html" title=反射>反射私有方法 举个例子:
class="prism language-class ="tags" href="/tags/JAVA.html" title=java>javascript">class="token keyword">public class="token keyword">class class="token class -name">Foo class="token punctuation">{
class="token keyword">public class="token function">Foo class="token punctuation">( String sclass="token punctuation">, String aclass="token punctuation">) class="token punctuation">{
class="token punctuation">}
class="token keyword">public class="token keyword">void class="token function">hello class="token punctuation">( class="token punctuation">) class="token punctuation">{
Systemclass="token punctuation">. outclass="token punctuation">. class="token function">println class="token punctuation">( class="token string">"hello" class="token punctuation">) class="token punctuation">;
class="token punctuation">}
class="token keyword">private class="token keyword">void class="token function">sss class="token punctuation">( class="token punctuation">) class="token punctuation">{
Systemclass="token punctuation">. outclass="token punctuation">. class="token function">println class="token punctuation">( class="token string">"sss" class="token punctuation">) class="token punctuation">;
class="token punctuation">}
class="token keyword">public class="token keyword">static class="token keyword">void class="token function">main class="token punctuation">( Stringclass="token punctuation">[ class="token punctuation">] argsclass="token punctuation">) class="token punctuation">{
class="token keyword">try class="token punctuation">{
Object foo class="token operator">= Classclass="token punctuation">. class="token function">forName class="token punctuation">( class="token string">"complete.class path.and.Foo" class="token punctuation">) class="token punctuation">. class="token function">newInstance class="token punctuation">( class="token punctuation">) class="token punctuation">;
Method m class="token operator">= fooclass="token punctuation">. class="token function">getClass class="token punctuation">( class="token punctuation">) class="token punctuation">. class="token function">getDeclaredMethod class="token punctuation">( class="token string">"sss" class="token punctuation">, class="token keyword">new class="token class -name">Class class="token operator">< class="token operator">? class="token operator">> class="token punctuation">[ class="token number">0 class="token punctuation">] class="token punctuation">) class="token punctuation">;
mclass="token punctuation">. class="token function">setAccessible class="token punctuation">( class="token boolean">true class="token punctuation">) class="token punctuation">;
mclass="token punctuation">. class="token function">invoke class="token punctuation">( fooclass="token punctuation">) class="token punctuation">; class="token punctuation">} class="token keyword">catch class="token punctuation">( class="token class -name">Exception eclass="token punctuation">) class="token punctuation">{
class="token comment">// Catching ClassNotFoundException, NoSuchMethodException
class="token comment">// InstantiationException, IllegalAccessException
class="token punctuation">}
class="token punctuation">}
class="token punctuation">}
以上就是class ="tags" href="/tags/JAVA.html" title=java>java中class ="tags" href="/tags/FanShe.html" title=反射>反射的一些用法。