反射基础学习

news/2024/5/19 2:26:57 标签: 反射, java, class
class="baidu_pl">
class="article_content clearfix">
class="markdown_views prism-atom-one-dark">

class="tags" href="/tags/FanShe.html" title=反射>反射基础学习

class="tags" href="/tags/FanShe.html" title=反射>反射的概念

class="tags" href="/tags/FanShe.html" title=反射>反射是一种机制,利用该机制可以在程序运行过程中对类进行解剖并操作类中的所有成员(成员变量,成员方 法,构造方法)

使用class="tags" href="/tags/FanShe.html" title=反射>反射操作类成员的前提

要获得该类字节码文件对象,就是Class对象

class="tags" href="/tags/FanShe.html" title=反射>反射在实际开发中的应用

开发IDE(集成开发环境),比如IDEA,Eclipse
各种框架的设计和学习 比如Spring,Hibernate,Mybaits…

Class对象的获取方式

三种获取方法

方式1: 通过类名.class获得
方式2:通过对象名.getClass()方法获得
方式3:通过Class类的静态方法获得: static Class forName(“类全名”) * 每一个类的Class对象都只有一个。

class="tags" href="/tags/FanShe.html" title=反射>反射操作构造方法

class="tags" href="/tags/FanShe.html" title=反射>反射之操作构造方法的目的

  • 获得Constructor对象来创建类的对象。 Constructor类概述
  • 类中的每一个构造方法都是一个Constructor类的对象(无参构造,有参构造)

Class类中与Constructor相关的方法

  1. Constructor getConstructor(Class… parameterTypes)
    * 根据参数类型获得对应的Constructor对象。
    * 只能获得public修饰的构造方法
  2. Constructor getDeclaredConstructor(Class… parameterTypes)
    * 根据参数类型获得对应的Constructor对象
    * 可以是public、protected、(默认)、private修饰符的构造方法。
  3. Constructor[] getConstructors()
    * 获得类中的所有构造方法对象,只能获得public的
  4. Constructor[] getDeclaredConstructors()
    * 获得类中的所有构造方法对象 可以是public、protected、(默认)、 private修饰符的构造方法。

Constructor对象常用方法

  1. T newInstance(Object… initargs)"—— 根据指定的参数创建对象
  2. void setAccessible(true) 设置"暴力class="tags" href="/tags/FanShe.html" title=反射>反射"——是否取消权限检查,true取消权限检查,false表示不取消

class="tags" href="/tags/FanShe.html" title=反射>反射之操作成员方法

Method类概述

class="tags" href="/tags/FanShe.html" title=反射>反射之操作成员方法的目的

  • 操作Method对象来调用成员方法

Method类概述

  • 每一个成员方法都是一个Method类的对象

Class类中与Method相关的方法

  • Method getMethod(String name,Class…args);
    • 根据方法名和参数类型获得对应的构造方法对象,只能获得public的
  • Method getDeclaredMethod(String name,Class…args);
    • 根据方法名和参数类型获得对应的构造方法对象,包括public、protected、(默认)、private的
  • Method[] getMethods();
    • 获得类中的所有成员方法对象,返回数组,只能获得public修饰的且包含父类的
  • Method[] getDeclaredMethods();
    • 获得类中的所有成员方法对象,返回数组,只获得本类的,包括public、protected、(默认)、 private的

Method对象常用方法

  • Object invoke(Object obj, Object… args)
    • 调用指定对象obj的该方法
    • args:调用方法时传递的参数
  • void setAccessible(true)
    • 设置"暴力访问"——是否取消权限检查,true取消权限检查,false表示不取消

class="tags" href="/tags/FanShe.html" title=反射>反射之操作成员变量

Field类概述

class="tags" href="/tags/FanShe.html" title=反射>反射之操作成员变量的目的

  • 通过Field对象给对应的成员变量赋值和取值

Field类概述

  • 每一个成员变量都是一个Field类的对象。

Class类中与Field相关的方法

  • Field getField(String name);
    • 根据成员变量名获得对应Field对象,只能获得public修饰
  • Field getDeclaredField(String name);
    • 根据成员变量名获得对应Field对象,包括public、protected、(默认)、private的
  • Field[] getFields();
    • 获得所有的成员变量对应的Field对象,只能获得public的
  • Field[] getDeclaredFields();
    • 获得所有的成员变量对应的Field对象,包括public、protected、(默认)、private的

Field对象常用方法

void set(Object obj, Object value)
void setInt(Object obj, int i)
void setLong(Object obj, long l)
void setBoolean(Object obj, boolean z)
void setDouble(Object obj, double d)
Object get(Object obj)
int getInt(Object obj) long getLong(Object obj) boolean
getBoolean(Object ob) double getDouble(Object obj) void
setAccessible(true);暴力class="tags" href="/tags/FanShe.html" title=反射>反射,设置为可以直接访问私有类型的属性。 Class getType();
获取属性的类型,返回Class对象。

注意:

  • setXxx方法都是给对象obj的属性设置使用,针对不同的类型选取不同的方法。
  • getXxx方法是获取对象obj对应的属性值的,针对不同的类型选取不同的方法。

练习代码如下

创建一个实体类比如Student.class="tags" href="/tags/JAVA.html" title=java>java

class="prism language-class="tags" href="/tags/JAVA.html" title=java>java">
class="token keyword">import class="tags" href="/tags/JAVA.html" title=java>javaclass="token punctuation">.ioclass="token punctuation">.Serializableclass="token punctuation">;

class="token keyword">public class="token keyword">class class="token class-name">Student class="token keyword">implements class="token class-name">Serializable class="token punctuation">{

	class="token comment">/**
	 * 
	 */
	class="token keyword">private class="token keyword">static class="token keyword">final class="token keyword">long serialVersionUID class="token operator">= class="token number">1Lclass="token punctuation">;
	class="token keyword">private String snameclass="token punctuation">;
	class="token keyword">private class="token keyword">int ageclass="token punctuation">;
	class="token keyword">public String addrclass="token punctuation">;
	class="token keyword">public class="token function">Studentclass="token punctuation">(class="token punctuation">) class="token punctuation">{
		
	class="token punctuation">}
	class="token keyword">public class="token function">Studentclass="token punctuation">(String snameclass="token punctuation">, Integer ageclass="token punctuation">, String addrclass="token punctuation">) class="token punctuation">{
		class="token keyword">thisclass="token punctuation">.sname class="token operator">= snameclass="token punctuation">;
		class="token keyword">thisclass="token punctuation">.age class="token operator">= ageclass="token punctuation">;
		class="token keyword">thisclass="token punctuation">.addr class="token operator">= addrclass="token punctuation">;
	class="token punctuation">}
	class="token keyword">private class="token function">Studentclass="token punctuation">(String snameclass="token punctuation">) class="token punctuation">{
		class="token keyword">thisclass="token punctuation">.sname class="token operator">= snameclass="token punctuation">;
	class="token punctuation">}
	class="token keyword">private String class="token function">getSexclass="token punctuation">(class="token punctuation">) class="token punctuation">{
		Systemclass="token punctuation">.outclass="token punctuation">.class="token function">printlnclass="token punctuation">(class="token string">"我是Student类中的私有方法: getSex()"class="token punctuation">)class="token punctuation">;
		class="token keyword">return class="token string">"男"class="token punctuation">;
	class="token punctuation">}
	class="token keyword">public class="token keyword">void class="token function">sayHelloclass="token punctuation">(String msgclass="token punctuation">) class="token punctuation">{
		String _msg class="token operator">= msgclass="token punctuation">;
		class="token keyword">ifclass="token punctuation">(_msg class="token operator">== nullclass="token punctuation">) class="token punctuation">{
			_msg class="token operator">= class="token string">"请多多关照!"class="token punctuation">;
		class="token punctuation">}
		Systemclass="token punctuation">.outclass="token punctuation">.class="token function">printlnclass="token punctuation">(class="token string">"我是Student类中的公有方法: sayHello(String msg)"class="token punctuation">)class="token punctuation">;
		Systemclass="token punctuation">.outclass="token punctuation">.class="token function">printlnclass="token punctuation">(class="token string">"大家好,唔系:" class="token operator">+ class="token keyword">thisclass="token punctuation">.snameclass="token operator">+class="token string">"," class="token operator">+ _msgclass="token punctuation">)class="token punctuation">;
	class="token punctuation">}
	class="token keyword">public String class="token function">getSnameclass="token punctuation">(class="token punctuation">) class="token punctuation">{
		class="token keyword">return snameclass="token punctuation">;
	class="token punctuation">}
	class="token keyword">public class="token keyword">void class="token function">setSnameclass="token punctuation">(String snameclass="token punctuation">) class="token punctuation">{
		class="token keyword">thisclass="token punctuation">.sname class="token operator">= snameclass="token punctuation">;
	class="token punctuation">}
	class="token keyword">public class="token keyword">int class="token function">getAgeclass="token punctuation">(class="token punctuation">) class="token punctuation">{
		class="token keyword">return ageclass="token punctuation">;
	class="token punctuation">}
	class="token keyword">public class="token keyword">void class="token function">setAgeclass="token punctuation">(class="token keyword">int ageclass="token punctuation">) class="token punctuation">{
		class="token keyword">thisclass="token punctuation">.age class="token operator">= ageclass="token punctuation">;
	class="token punctuation">}
	class="token keyword">class class="token class-name">Man class="token punctuation">{
		
	class="token punctuation">}
	class="token keyword">public class="token keyword">class class="token class-name">Women class="token punctuation">{
		
	class="token punctuation">}
	class="token annotation punctuation">@Override
	class="token keyword">public String class="token function">toStringclass="token punctuation">(class="token punctuation">) class="token punctuation">{
		class="token keyword">return class="token string">"Student [sname=" class="token operator">+ sname class="token operator">+ class="token string">", age=" class="token operator">+ age class="token operator">+ class="token string">", addr=" class="token operator">+ addr class="token operator">+ class="token string">"]"class="token punctuation">;
	class="token punctuation">}
class="token punctuation">}

创建一个测试类

class="prism language-class="tags" href="/tags/JAVA.html" title=java>java">class="token keyword">public class="token keyword">class class="token class-name">ReflectTest class="token punctuation">{
	class="token keyword">public class="token keyword">static class="token keyword">void class="token function">mainclass="token punctuation">(Stringclass="token punctuation">[class="token punctuation">] argsclass="token punctuation">) class="token keyword">throws Exception class="token punctuation">{
		class="token comment">// 获得Student类对应的Class对象
		class="token comment">//Class c1 = Student.class;
		class="token comment">//常规方法
		Student stu class="token operator">= class="token keyword">new class="token class-name">Studentclass="token punctuation">(class="token punctuation">)class="token punctuation">;
		class="token comment">// 通过getClass方法
		class="token comment">//Class c2 = stu.getClass();
		class="token comment">// 通过Class类的静态方法获得: static Class forName("类全名")
		class="token comment">//Class c3 = Class.forName("com.lanou3g.Student");
		stuclass="token punctuation">.class="token function">setSnameclass="token punctuation">(class="token string">"xx"class="token punctuation">)class="token punctuation">;
		stuclass="token punctuation">.class="token function">sayHelloclass="token punctuation">(nullclass="token punctuation">)class="token punctuation">;
		class="token comment">// 获取Student类的字节码对象
		Systemclass="token punctuation">.outclass="token punctuation">.class="token function">printlnclass="token punctuation">(Studentclass="token punctuation">.class="token keyword">classclass="token punctuation">)class="token punctuation">;
		class="token comment">//testClassDeepProperty(Student.class);
		class="token function">testCreateObjByReflectclass="token punctuation">(Studentclass="token punctuation">.class="token keyword">classclass="token punctuation">)class="token punctuation">;class="token comment">//加上toString方法看的比较友好
class="token comment">//		testOperateObjMethodByReflect(stu);
class="token comment">//		testOperateObjFieldByReflect(stu);
class="token punctuation">}
	class="token comment">/**
	 * 通过class="tags" href="/tags/FanShe.html" title=反射>反射操作对象 方法
	 */
	class="token keyword">public class="token keyword">static class="token keyword">void class="token function">testOperateObjMethodByReflectclass="token punctuation">(Object objclass="token punctuation">) class="token keyword">throws Exception class="token punctuation">{
		Classclass="token operator"><class="token operator">?class="token operator">> clazz class="token operator">= objclass="token punctuation">.class="token function">getClassclass="token punctuation">(class="token punctuation">)class="token punctuation">;
		class="token comment">// 获取目标方法
		Method sayHelloMethod class="token operator">= ReflectUtilclass="token punctuation">.class="token function">getMethodclass="token punctuation">(clazzclass="token punctuation">, class="token string">"sayHello"class="token punctuation">, Stringclass="token punctuation">.class="token keyword">classclass="token punctuation">)class="token punctuation">;
		String param class="token operator">= class="token string">"初来乍到,请多关照!"class="token punctuation">;
		class="token comment">// 通过class="tags" href="/tags/FanShe.html" title=反射>反射调用该方法
		class="token comment">// 相当于(obj.sayHello(param))
		Object ret class="token operator">= sayHelloMethodclass="token punctuation">.class="token function">invokeclass="token punctuation">(objclass="token punctuation">, paramclass="token punctuation">)class="token punctuation">; class="token comment">//class="tags" href="/tags/FanShe.html" title=反射>反射关注的是:首先是你要调用哪个方法,其次才是在哪个对象上调用该方法
		Systemclass="token punctuation">.outclass="token punctuation">.class="token function">printlnclass="token punctuation">(class="token string">"通过class="tags" href="/tags/FanShe.html" title=反射>反射调用:" class="token operator">+ obj class="token operator">+ class="token string">"对象的公开方法:" class="token operator">+ sayHelloMethod class="token operator">+ class="token string">", 参数:" class="token operator">+ param class="token operator">+ class="token string">", 返回值:" class="token operator">+ retclass="token punctuation">)class="token punctuation">;
		class="token comment">// 获取目标方法(private String getSex())
		Method getSexMethod class="token operator">= ReflectUtilclass="token punctuation">.class="token function">getDeclaredMethodclass="token punctuation">(clazzclass="token punctuation">, class="token string">"getSex"class="token punctuation">, class="token keyword">new class="token class-name">Classclass="token punctuation">[class="token number">0class="token punctuation">]class="token punctuation">)class="token punctuation">;
		class="token comment">// 设置私有方法可访问
		getSexMethodclass="token punctuation">.class="token function">setAccessibleclass="token punctuation">(class="token boolean">trueclass="token punctuation">)class="token punctuation">;
		ret class="token operator">= getSexMethodclass="token punctuation">.class="token function">invokeclass="token punctuation">(objclass="token punctuation">, class="token keyword">new class="token class-name">Objectclass="token punctuation">[class="token number">0class="token punctuation">]class="token punctuation">)class="token punctuation">;
		Systemclass="token punctuation">.outclass="token punctuation">.class="token function">printlnclass="token punctuation">(class="token string">"通过class="tags" href="/tags/FanShe.html" title=反射>反射调用:" class="token operator">+ obj class="token operator">+ class="token string">"对象的私有方法:" class="token operator">+ getSexMethod class="token operator">+ class="token string">", 参数:null, 返回值:" class="token operator">+ retclass="token punctuation">)class="token punctuation">;
	class="token punctuation">}
	class="token comment">/**
	 * 通过class="tags" href="/tags/FanShe.html" title=反射>反射操作对象(修改属性值、调用方法)
	 *  
	 * @throws Exception 
	 */
	class="token keyword">public class="token keyword">static class="token keyword">void class="token function">testOperateObjFieldByReflectclass="token punctuation">(Object objclass="token punctuation">) class="token keyword">throws Exceptionclass="token punctuation">{
		class="token comment">// 成员变量相关操作
		Classclass="token operator"><class="token operator">?class="token operator">> clazz class="token operator">= objclass="token punctuation">.class="token function">getClassclass="token punctuation">(class="token punctuation">)class="token punctuation">;
		Field addrField class="token operator">= ReflectUtilclass="token punctuation">.class="token function">getFieldclass="token punctuation">(clazzclass="token punctuation">, class="token string">"addr"class="token punctuation">)class="token punctuation">;
		class="token comment">// 获取obj对象上addr成员变量的值(相当于obj.addr)
		Object currentVal class="token operator">= addrFieldclass="token punctuation">.class="token function">getclass="token punctuation">(objclass="token punctuation">)class="token punctuation">;
		Systemclass="token punctuation">.outclass="token punctuation">.class="token function">printlnclass="token punctuation">(class="token string">"通过class="tags" href="/tags/FanShe.html" title=反射>反射获取:" class="token operator">+ obj class="token operator">+ class="token string">"对象的" class="token operator">+ addrField class="token operator">+ class="token string">"属性的值: " class="token operator">+ currentValclass="token punctuation">)class="token punctuation">;

		class="token comment">// 设置obj对象上addr成员变量的值(相当于obj.addr = "xxx")
		addrFieldclass="token punctuation">.class="token function">setclass="token punctuation">(objclass="token punctuation">, class="token string">"新疆石河子"class="token punctuation">)class="token punctuation">;
		Systemclass="token punctuation">.outclass="token punctuation">.class="token function">printlnclass="token punctuation">(class="token string">"通过class="tags" href="/tags/FanShe.html" title=反射>反射设置:" class="token operator">+ obj class="token operator">+ class="token string">"对象的" class="token operator">+ addrField class="token operator">+ class="token string">"属性的值"class="token punctuation">)class="token punctuation">;

		class="token comment">// 获取obj对象上addr成员变量的值(相当于obj.addr)
		currentVal class="token operator">= addrFieldclass="token punctuation">.class="token function">getclass="token punctuation">(objclass="token punctuation">)class="token punctuation">;
		Systemclass="token punctuation">.outclass="token punctuation">.class="token function">printlnclass="token punctuation">(class="token string">"通过class="tags" href="/tags/FanShe.html" title=反射>反射获取:" class="token operator">+ obj class="token operator">+ class="token string">"对象的" class="token operator">+ addrField class="token operator">+ class="token string">"属性的值: " class="token operator">+ currentValclass="token punctuation">)class="token punctuation">;

		class="token comment">// 通过class="tags" href="/tags/FanShe.html" title=反射>反射直接操作私有属性
		Field ageField class="token operator">= ReflectUtilclass="token punctuation">.class="token function">getDeclaredFieldclass="token punctuation">(clazzclass="token punctuation">, class="token string">"age"class="token punctuation">)class="token punctuation">;
		class="token comment">// 设置私有属性可访问(否则会出现:class="tags" href="/tags/JAVA.html" title=java>java.lang.IllegalAccessException异常)
		ageFieldclass="token punctuation">.class="token function">setAccessibleclass="token punctuation">(class="token boolean">trueclass="token punctuation">)class="token punctuation">;
		currentVal class="token operator">= ageFieldclass="token punctuation">.class="token function">getclass="token punctuation">(objclass="token punctuation">)class="token punctuation">;
		Systemclass="token punctuation">.outclass="token punctuation">.class="token function">printlnclass="token punctuation">(class="token string">"通过class="tags" href="/tags/FanShe.html" title=反射>反射获取:" class="token operator">+ obj class="token operator">+ class="token string">"对象的私有属性" class="token operator">+ ageField class="token operator">+ class="token string">"的值: " class="token operator">+ currentValclass="token punctuation">)class="token punctuation">;
		
	class="token punctuation">}
	
	class="token comment">/**
	 * 通过class="tags" href="/tags/FanShe.html" title=反射>反射创建对象
	 */
	class="token keyword">public class="token keyword">static class="token keyword">void class="token function">testCreateObjByReflectclass="token punctuation">(Classclass="token operator"><class="token operator">?class="token operator">> clazzclass="token punctuation">) class="token punctuation">{
		class="token comment">// 调用无参构造器创建对象
		Object obj class="token operator">= ReflectUtilclass="token punctuation">.class="token function">newObjInstanceclass="token punctuation">(clazzclass="token punctuation">)class="token punctuation">;class="token comment">// 相当于Object obj = new Student();
		Systemclass="token punctuation">.outclass="token punctuation">.class="token function">printlnclass="token punctuation">(class="token string">"通过无参构造器创建的对象:" class="token operator">+ objclass="token punctuation">)class="token punctuation">;
		
		class="token comment">// 通过泛型参数,直接返回特定类型的对象
		Women women class="token operator">= ReflectUtilclass="token punctuation">.class="token function">newTypeInstanceclass="token punctuation">(Studentclass="token punctuation">.Womenclass="token punctuation">.class="token keyword">classclass="token punctuation">)class="token punctuation">;
		class="token comment">// 调用有参构造器创建对象
		
		obj class="token operator">= ReflectUtilclass="token punctuation">.class="token function">newInstanceclass="token punctuation">(clazzclass="token punctuation">, class="token string">"张三"class="token punctuation">,class="token number">4class="token punctuation">,class="token string">"河南"class="token punctuation">)class="token punctuation">;
		Systemclass="token punctuation">.outclass="token punctuation">.class="token function">printlnclass="token punctuation">(class="token string">"通过有参构造器创建的对象:" class="token operator">+ objclass="token punctuation">)class="token punctuation">;
	class="token punctuation">}
	
	class="token comment">/**
	 * 通过Class获取类里面的属性、方法、构造方法
	 */

	class="token keyword">public class="token keyword">static class="token keyword">void class="token function">testClassDeepPropertyclass="token punctuation">(Classclass="token operator"><class="token operator">?class="token operator">> clazzclass="token punctuation">) class="token punctuation">{
		
		class="token comment">// 获取公有属性
		Fieldclass="token punctuation">[class="token punctuation">] publicFields class="token operator">= ReflectUtilclass="token punctuation">.class="token function">getPublicFieldsclass="token punctuation">(clazzclass="token punctuation">)class="token punctuation">;
		Systemclass="token punctuation">.outclass="token punctuation">.class="token function">printlnclass="token punctuation">(class="token string">"公开字段:" class="token operator">+ Arraysclass="token punctuation">.class="token function">toStringclass="token punctuation">(publicFieldsclass="token punctuation">)class="token punctuation">)class="token punctuation">;
		
		class="token comment">// 获取所有属性
		Fieldclass="token punctuation">[class="token punctuation">] allFields class="token operator">= ReflectUtilclass="token punctuation">.class="token function">getAllFieldsclass="token punctuation">(clazzclass="token punctuation">)class="token punctuation">;
		Systemclass="token punctuation">.outclass="token punctuation">.class="token function">printlnclass="token punctuation">(class="token string">"所有字段:" class="token operator">+ Arraysclass="token punctuation">.class="token function">toStringclass="token punctuation">(allFieldsclass="token punctuation">)class="token punctuation">)class="token punctuation">;
		
		class="token comment">// 获取公开方法
		Methodclass="token punctuation">[class="token punctuation">] methods class="token operator">= ReflectUtilclass="token punctuation">.class="token function">getPublicMethodclass="token punctuation">(clazzclass="token punctuation">)class="token punctuation">;
		Systemclass="token punctuation">.outclass="token punctuation">.class="token function">printlnclass="token punctuation">(class="token string">"公开方法:" class="token operator">+ Arraysclass="token punctuation">.class="token function">toStringclass="token punctuation">(methodsclass="token punctuation">)class="token punctuation">)class="token punctuation">;
		
		class="token comment">// 获取所有方法
		methods class="token operator">= ReflectUtilclass="token punctuation">.class="token function">getAllMethodclass="token punctuation">(clazzclass="token punctuation">)class="token punctuation">;
		Systemclass="token punctuation">.outclass="token punctuation">.class="token function">printlnclass="token punctuation">(class="token string">"所有方法:" class="token operator">+ Arraysclass="token punctuation">.class="token function">toStringclass="token punctuation">(methodsclass="token punctuation">)class="token punctuation">)class="token punctuation">;
		
		class="token comment">// 获取公开构造方法
		Constructorclass="token operator"><class="token operator">?class="token operator">>class="token punctuation">[class="token punctuation">] constructors class="token operator">= ReflectUtilclass="token punctuation">.class="token function">getPublicConstructorsclass="token punctuation">(clazzclass="token punctuation">)class="token punctuation">;
		Systemclass="token punctuation">.outclass="token punctuation">.class="token function">printlnclass="token punctuation">(class="token string">"公开构造方法:" class="token operator">+ Arraysclass="token punctuation">.class="token function">toStringclass="token punctuation">(constructorsclass="token punctuation">)class="token punctuation">)class="token punctuation">;
		
		class="token comment">// 获取所有构造方法
		constructors class="token operator">= ReflectUtilclass="token punctuation">.class="token function">getAllConstructorsclass="token punctuation">(clazzclass="token punctuation">)class="token punctuation">;
		Systemclass="token punctuation">.outclass="token punctuation">.class="token function">printlnclass="token punctuation">(class="token string">"所有构造方法:" class="token operator">+ Arraysclass="token punctuation">.class="token function">toStringclass="token punctuation">(constructorsclass="token punctuation">)class="token punctuation">)class="token punctuation">;
	class="token punctuation">}
	
	class="token comment">/**
	 * 通过Class获取类本身的基本信息
	 */
	class="token keyword">public class="token keyword">static class="token keyword">void class="token function">testClassBasePropertyclass="token punctuation">(class="token punctuation">) class="token punctuation">{
		Classclass="token operator"><class="token operator">?class="token operator">> clazz class="token operator">= Studentclass="token punctuation">.class="token keyword">classclass="token punctuation">;
		class="token comment">// 获取类的全名
		String name class="token operator">= clazzclass="token punctuation">.class="token function">getNameclass="token punctuation">(class="token punctuation">)class="token punctuation">;
		Systemclass="token punctuation">.outclass="token punctuation">.class="token function">printlnclass="token punctuation">(class="token string">"类的全名:" class="token operator">+ nameclass="token punctuation">)class="token punctuation">;
		class="token comment">// 获取类的简称
		String simpleName class="token operator">= clazzclass="token punctuation">.class="token function">getSimpleNameclass="token punctuation">(class="token punctuation">)class="token punctuation">;
		Systemclass="token punctuation">.outclass="token punctuation">.class="token function">printlnclass="token punctuation">(class="token string">"类的简称:" class="token operator">+ nameclass="token punctuation">)class="token punctuation">;
		class="token comment">// 获取Student类的类加载器
		ClassLoader loader class="token operator">= clazzclass="token punctuation">.class="token function">getClassLoaderclass="token punctuation">(class="token punctuation">)class="token punctuation">;
		Systemclass="token punctuation">.outclass="token punctuation">.class="token function">printlnclass="token punctuation">(class="token string">"类的加载器:" class="token operator">+ loaderclass="token punctuation">)class="token punctuation">;
		class="token comment">// 获取类中定义的公有内部类
		Classclass="token operator"><class="token operator">?class="token operator">>class="token punctuation">[class="token punctuation">] classes class="token operator">= clazzclass="token punctuation">.class="token function">getClassesclass="token punctuation">(class="token punctuation">)class="token punctuation">;
		Systemclass="token punctuation">.outclass="token punctuation">.class="token function">printlnclass="token punctuation">(class="token string">"类里面的classes:" class="token operator">+ Arraysclass="token punctuation">.class="token function">toStringclass="token punctuation">(classesclass="token punctuation">)class="token punctuation">)class="token punctuation">;
		class="token comment">// 获取类中定义的所有内部类(包括私有、受保护的、默认的内部类)
		Classclass="token operator"><class="token operator">?class="token operator">>class="token punctuation">[class="token punctuation">] declaredClasses class="token operator">= clazzclass="token punctuation">.class="token function">getDeclaredClassesclass="token punctuation">(class="token punctuation">)class="token punctuation">;
		Systemclass="token punctuation">.outclass="token punctuation">.class="token function">printlnclass="token punctuation">(class="token string">"类里面的declaredClasses:" class="token operator">+ Arraysclass="token punctuation">.class="token function">toStringclass="token punctuation">(declaredClassesclass="token punctuation">)class="token punctuation">)class="token punctuation">;
		class="token comment">// 获取类所属的包
		Package _package class="token operator">= clazzclass="token punctuation">.class="token function">getPackageclass="token punctuation">(class="token punctuation">)class="token punctuation">;
		Systemclass="token punctuation">.outclass="token punctuation">.class="token function">printlnclass="token punctuation">(class="token string">"类所属的包:" class="token operator">+ _packageclass="token punctuation">.class="token function">getNameclass="token punctuation">(class="token punctuation">)class="token punctuation">)class="token punctuation">;
		class="token comment">// 获取继承的父类
		Classclass="token operator"><class="token operator">?class="token operator">> superClasses class="token operator">= clazzclass="token punctuation">.class="token function">getSuperclassclass="token punctuation">(class="token punctuation">)class="token punctuation">;
		Systemclass="token punctuation">.outclass="token punctuation">.class="token function">printlnclass="token punctuation">(class="token string">"类继承的父类:" class="token operator">+ superClassesclass="token punctuation">)class="token punctuation">;
		class="token comment">// 获取实现的所有接口
		Classclass="token operator"><class="token operator">?class="token operator">>class="token punctuation">[class="token punctuation">] interfaces class="token operator">= clazzclass="token punctuation">.class="token function">getInterfacesclass="token punctuation">(class="token punctuation">)class="token punctuation">;
		Systemclass="token punctuation">.outclass="token punctuation">.class="token function">printlnclass="token punctuation">(class="token string">"实现的接口:" class="token operator">+ Arraysclass="token punctuation">.class="token function">toStringclass="token punctuation">(interfacesclass="token punctuation">)class="token punctuation">)class="token punctuation">;
	class="token punctuation">}
	
	
	class="token comment">/**
	 * 对比通过import导入类和通过class="tags" href="/tags/FanShe.html" title=反射>反射动态导入类的区别
	 */
	class="token keyword">public class="token keyword">static class="token keyword">void class="token function">compareLoadClassByNormalAndReflectclass="token punctuation">(class="token punctuation">) class="token punctuation">{
		class="token keyword">try class="token punctuation">{
		class="token comment">// 常规方式操作类必须先将该类的Class文件通过import语句导入进来,才能用(在写代码时,该类就必须存在)
		class="token comment">// List<String> list = new ArrayList<String>();
class="token comment">//		Driver obj = new Driver();
		class="token comment">// 下面这行代码就是通过class="tags" href="/tags/FanShe.html" title=反射>反射动态导包(它允许开发者在写代码时,该类并不存在,只要运行期间存在就可以)
		
			Classclass="token operator"><class="token operator">?class="token operator">> clazz class="token operator">= Classclass="token punctuation">.class="token function">forNameclass="token punctuation">(class="token string">"com.mysql.jdbc.Driver"class="token punctuation">)class="token punctuation">;
		class="token punctuation">} class="token keyword">catch class="token punctuation">(class="token class-name">ClassNotFoundException eclass="token punctuation">) class="token punctuation">{
			eclass="token punctuation">.class="token function">printStackTraceclass="token punctuation">(class="token punctuation">)class="token punctuation">;
		class="token punctuation">}
	class="token punctuation">}

class="token punctuation">}

ReflectUtil类

class="prism language-class="tags" href="/tags/JAVA.html" title=java>java">
class="token keyword">import class="tags" href="/tags/JAVA.html" title=java>javaclass="token punctuation">.langclass="token punctuation">.reflectclass="token punctuation">.Constructorclass="token punctuation">;
class="token keyword">import class="tags" href="/tags/JAVA.html" title=java>javaclass="token punctuation">.langclass="token punctuation">.reflectclass="token punctuation">.Fieldclass="token punctuation">;
class="token keyword">import class="tags" href="/tags/JAVA.html" title=java>javaclass="token punctuation">.langclass="token punctuation">.reflectclass="token punctuation">.InvocationTargetExceptionclass="token punctuation">;
class="token keyword">import class="tags" href="/tags/JAVA.html" title=java>javaclass="token punctuation">.langclass="token punctuation">.reflectclass="token punctuation">.Methodclass="token punctuation">;

class="token keyword">public class="token keyword">class class="token class-name">ReflectUtil class="token punctuation">{
	
	class="token annotation punctuation">@SuppressWarningsclass="token punctuation">(class="token string">"unchecked"class="token punctuation">)
	class="token keyword">public class="token keyword">static class="token generics function">class="token punctuation"><Tclass="token punctuation">> T class="token function">newTypeInstanceclass="token punctuation">(Classclass="token generics function">class="token punctuation"><Tclass="token punctuation">> clazzclass="token punctuation">) class="token punctuation">{
		class="token keyword">return class="token punctuation">(Tclass="token punctuation">)class="token function">newInstanceclass="token punctuation">(clazzclass="token punctuation">)class="token punctuation">;
	class="token punctuation">}
	
	class="token comment">/**
	 * 调用默认的无参构造器创建对象
	 * @param clazz
	 * @return
	 */
	class="token keyword">public class="token keyword">static Object class="token function">newObjInstanceclass="token punctuation">(Classclass="token operator"><class="token operator">?class="token operator">> clazzclass="token punctuation">) class="token punctuation">{
		class="token keyword">try class="token punctuation">{
			class="token keyword">return clazzclass="token punctuation">.class="token function">newInstanceclass="token punctuation">(class="token punctuation">)class="token punctuation">;
			class="token comment">// 相当于
			class="token comment">//Constructor<?> constructor = getConstructor(clazz, new Class[0]);
			class="token comment">//return constructor.newInstance(new Object[0]);
		class="token punctuation">} class="token keyword">catch class="token punctuation">(class="token class-name">InstantiationException eclass="token punctuation">) class="token punctuation">{
			eclass="token punctuation">.class="token function">printStackTraceclass="token punctuation">(class="token punctuation">)class="token punctuation">;
		class="token punctuation">} class="token keyword">catch class="token punctuation">(class="token class-name">IllegalAccessException eclass="token punctuation">) class="token punctuation">{
			eclass="token punctuation">.class="token function">printStackTraceclass="token punctuation">(class="token punctuation">)class="token punctuation">;
		class="token punctuation">} 
		class="token keyword">return nullclass="token punctuation">;
	class="token punctuation">}
	
	class="token comment">/**
	 * 调用有参数构造器创建对象
	 * @param clazz
	 * @param params
	 * @return
	 */
	class="token keyword">public class="token keyword">static Object class="token function">newInstanceclass="token punctuation">(Classclass="token operator"><class="token operator">?class="token operator">> clazzclass="token punctuation">, Objectclass="token punctuation">.class="token punctuation">.class="token punctuation">. paramsclass="token punctuation">) class="token punctuation">{
		
		class="token comment">// 通过参数列表,获取参数对应的类型数组
		Classclass="token operator"><class="token operator">?class="token operator">>class="token punctuation">[class="token punctuation">] paramTypes class="token operator">= class="token keyword">new class="token class-name">Classclass="token operator"><class="token operator">?class="token operator">>class="token punctuation">[paramsclass="token punctuation">.lengthclass="token punctuation">]class="token punctuation">;
		class="token keyword">forclass="token punctuation">(class="token keyword">int i class="token operator">= class="token number">0class="token punctuation">; i class="token operator">< paramsclass="token punctuation">.lengthclass="token punctuation">; iclass="token operator">++class="token punctuation">) class="token punctuation">{
			paramTypesclass="token punctuation">[iclass="token punctuation">] class="token operator">= paramsclass="token punctuation">[iclass="token punctuation">]class="token punctuation">.class="token function">getClassclass="token punctuation">(class="token punctuation">)class="token punctuation">;
		class="token punctuation">}
		class="token keyword">try class="token punctuation">{
			Constructorclass="token operator"><class="token operator">?class="token operator">> constructor class="token operator">= class="token function">getConstructorclass="token punctuation">(clazzclass="token punctuation">, paramTypesclass="token punctuation">)class="token punctuation">;
			class="token keyword">return constructorclass="token punctuation">.class="token function">newInstanceclass="token punctuation">(paramsclass="token punctuation">)class="token punctuation">;
		class="token punctuation">} class="token keyword">catch class="token punctuation">(class="token class-name">IllegalArgumentException eclass="token punctuation">) class="token punctuation">{
			eclass="token punctuation">.class="token function">printStackTraceclass="token punctuation">(class="token punctuation">)class="token punctuation">;
		class="token punctuation">} class="token keyword">catch class="token punctuation">(class="token class-name">InvocationTargetException eclass="token punctuation">) class="token punctuation">{
			eclass="token punctuation">.class="token function">printStackTraceclass="token punctuation">(class="token punctuation">)class="token punctuation">;
		class="token punctuation">} class="token keyword">catch class="token punctuation">(class="token class-name">InstantiationException eclass="token punctuation">) class="token punctuation">{
			eclass="token punctuation">.class="token function">printStackTraceclass="token punctuation">(class="token punctuation">)class="token punctuation">;
		class="token punctuation">} class="token keyword">catch class="token punctuation">(class="token class-name">IllegalAccessException eclass="token punctuation">) class="token punctuation">{
			eclass="token punctuation">.class="token function">printStackTraceclass="token punctuation">(class="token punctuation">)class="token punctuation">;
		class="token punctuation">} 
		class="token keyword">return nullclass="token punctuation">;
	class="token punctuation">}
	
	
	
	
	
	
	class="token comment">/**
	 * 获取类公开的所有构造方法
	 * @param clazz
	 * @return
	 */
	class="token keyword">public class="token keyword">static Constructorclass="token operator"><class="token operator">?class="token operator">>class="token punctuation">[class="token punctuation">] class="token function">getPublicConstructorsclass="token punctuation">(Classclass="token operator"><class="token operator">?class="token operator">> clazzclass="token punctuation">) class="token punctuation">{
		class="token keyword">return clazzclass="token punctuation">.class="token function">getConstructorsclass="token punctuation">(class="token punctuation">)class="token punctuation">;
	class="token punctuation">}
	class="token comment">/**
	 * 获取类所有的构造方法
	 * @param clazz
	 * @return
	 */
	class="token keyword">public class="token keyword">static Constructorclass="token operator"><class="token operator">?class="token operator">>class="token punctuation">[class="token punctuation">] class="token function">getAllConstructorsclass="token punctuation">(Classclass="token operator"><class="token operator">?class="token operator">> clazzclass="token punctuation">) class="token punctuation">{
		class="token keyword">return clazzclass="token punctuation">.class="token function">getDeclaredConstructorsclass="token punctuation">(class="token punctuation">)class="token punctuation">;
	class="token punctuation">}
	class="token comment">/**
	 * 根据构造方法参数列表通过class="tags" href="/tags/FanShe.html" title=反射>反射获取类中对应构造方法对象(只包含本类中定义的构造方法,包括私有的,但是不包含父类继承过来的构造方法)
	 * @param clazz
	 * @param methodName
	 * @param paramTypes
	 * @return
	 */
	class="token keyword">public class="token keyword">static Constructorclass="token operator"><class="token operator">?class="token operator">> class="token function">getDeclaredConstructorclass="token punctuation">(Classclass="token operator"><class="token operator">?class="token operator">> clazzclass="token punctuation">, Classclass="token operator"><class="token operator">?class="token operator">>class="token punctuation">.class="token punctuation">.class="token punctuation">. paramTypesclass="token punctuation">) class="token punctuation">{
		class="token keyword">try class="token punctuation">{
			class="token keyword">return clazzclass="token punctuation">.class="token function">getDeclaredConstructorclass="token punctuation">(paramTypesclass="token punctuation">)class="token punctuation">;
		class="token punctuation">} class="token keyword">catch class="token punctuation">(class="token class-name">NoSuchMethodException eclass="token punctuation">) class="token punctuation">{
			eclass="token punctuation">.class="token function">printStackTraceclass="token punctuation">(class="token punctuation">)class="token punctuation">;
		class="token punctuation">} class="token keyword">catch class="token punctuation">(class="token class-name">SecurityException eclass="token punctuation">) class="token punctuation">{
			eclass="token punctuation">.class="token function">printStackTraceclass="token punctuation">(class="token punctuation">)class="token punctuation">;
		class="token punctuation">}
		class="token keyword">return nullclass="token punctuation">;
	class="token punctuation">}
	
	class="token comment">/**
	 * 根据构造方法参数列表通过class="tags" href="/tags/FanShe.html" title=反射>反射获取类中对应构造方法对象(只包含可公开访问的方法,和从父类继承过来的构造方法)
	 * @param clazz
	 * @param methodName
	 * @param paramTypes
	 * @return
	 */
	class="token keyword">public class="token keyword">static Constructorclass="token operator"><class="token operator">?class="token operator">> class="token function">getConstructorclass="token punctuation">(Classclass="token operator"><class="token operator">?class="token operator">> clazzclass="token punctuation">, Classclass="token operator"><class="token operator">?class="token operator">>class="token punctuation">.class="token punctuation">.class="token punctuation">. paramTypesclass="token punctuation">) class="token punctuation">{
		class="token keyword">try class="token punctuation">{
			class="token keyword">return clazzclass="token punctuation">.class="token function">getConstructorclass="token punctuation">(paramTypesclass="token punctuation">)class="token punctuation">;
		class="token punctuation">} class="token keyword">catch class="token punctuation">(class="token class-name">NoSuchMethodException eclass="token punctuation">) class="token punctuation">{
			eclass="token punctuation">.class="token function">printStackTraceclass="token punctuation">(class="token punctuation">)class="token punctuation">;
		class="token punctuation">} class="token keyword">catch class="token punctuation">(class="token class-name">SecurityException eclass="token punctuation">) class="token punctuation">{
			eclass="token punctuation">.class="token function">printStackTraceclass="token punctuation">(class="token punctuation">)class="token punctuation">;
		class="token punctuation">}
		class="token keyword">return nullclass="token punctuation">;
	class="token punctuation">}
	class="token comment">/**
	 * 获取类里面所有公开的方法
	 * @param clazz
	 * @return
	 */
	class="token keyword">public class="token keyword">static Methodclass="token punctuation">[class="token punctuation">] class="token function">getPublicMethodclass="token punctuation">(Classclass="token operator"><class="token operator">?class="token operator">> clazzclass="token punctuation">) class="token punctuation">{
		class="token keyword">return clazzclass="token punctuation">.class="token function">getMethodsclass="token punctuation">(class="token punctuation">)class="token punctuation">;
	class="token punctuation">}
	class="token comment">/**
	 * 获取类里面所有的方法
	 * @param clazz
	 * @return
	 */
	class="token keyword">public class="token keyword">static Methodclass="token punctuation">[class="token punctuation">] class="token function">getAllMethodclass="token punctuation">(Classclass="token operator"><class="token operator">?class="token operator">> clazzclass="token punctuation">) class="token punctuation">{
		class="token keyword">return clazzclass="token punctuation">.class="token function">getDeclaredMethodsclass="token punctuation">(class="token punctuation">)class="token punctuation">;
	class="token punctuation">}
	class="token comment">/**
	 * 根据方法签名(方法名称、方法参数列表)通过class="tags" href="/tags/FanShe.html" title=反射>反射获取类中对应方法对象(只包含可公开访问的方法,和从父类继承过来的方法)
	 * @param clazz
	 * @param methodName
	 * @param paramTypes
	 * @return
	 */
	class="token keyword">public class="token keyword">static Method class="token function">getMethodclass="token punctuation">(Classclass="token operator"><class="token operator">?class="token operator">> clazzclass="token punctuation">, String methodNameclass="token punctuation">, Classclass="token operator"><class="token operator">?class="token operator">>class="token punctuation">.class="token punctuation">.class="token punctuation">. paramTypesclass="token punctuation">) class="token punctuation">{
		class="token keyword">try class="token punctuation">{
			class="token keyword">return clazzclass="token punctuation">.class="token function">getMethodclass="token punctuation">(methodNameclass="token punctuation">, paramTypesclass="token punctuation">)class="token punctuation">;
		class="token punctuation">} class="token keyword">catch class="token punctuation">(class="token class-name">NoSuchMethodException eclass="token punctuation">) class="token punctuation">{
			eclass="token punctuation">.class="token function">printStackTraceclass="token punctuation">(class="token punctuation">)class="token punctuation">;
		class="token punctuation">} class="token keyword">catch class="token punctuation">(class="token class-name">SecurityException eclass="token punctuation">) class="token punctuation">{
			eclass="token punctuation">.class="token function">printStackTraceclass="token punctuation">(class="token punctuation">)class="token punctuation">;
		class="token punctuation">}
		class="token keyword">return nullclass="token punctuation">;
	class="token punctuation">}
	
	class="token comment">/**
	 * 根据方法签名(方法名称、方法参数列表)通过class="tags" href="/tags/FanShe.html" title=反射>反射获取类中对应方法对象(包含私有方法,不包含从父类继承过来的方法)
	 * @param clazz
	 * @param methodName
	 * @param paramTypes
	 * @return
	 */
	class="token keyword">public class="token keyword">static Method class="token function">getDeclaredMethodclass="token punctuation">(Classclass="token operator"><class="token operator">?class="token operator">> clazzclass="token punctuation">, String methodNameclass="token punctuation">, Classclass="token operator"><class="token operator">?class="token operator">>class="token punctuation">.class="token punctuation">.class="token punctuation">. paramTypesclass="token punctuation">) class="token punctuation">{
		class="token keyword">try class="token punctuation">{
			class="token keyword">return clazzclass="token punctuation">.class="token function">getDeclaredMethodclass="token punctuation">(methodNameclass="token punctuation">, paramTypesclass="token punctuation">)class="token punctuation">;
		class="token punctuation">} class="token keyword">catch class="token punctuation">(class="token class-name">NoSuchMethodException eclass="token punctuation">) class="token punctuation">{
			eclass="token punctuation">.class="token function">printStackTraceclass="token punctuation">(class="token punctuation">)class="token punctuation">;
		class="token punctuation">} class="token keyword">catch class="token punctuation">(class="token class-name">SecurityException eclass="token punctuation">) class="token punctuation">{
			eclass="token punctuation">.class="token function">printStackTraceclass="token punctuation">(class="token punctuation">)class="token punctuation">;
		class="token punctuation">}
		class="token keyword">return nullclass="token punctuation">;
	class="token punctuation">}
	class="token comment">/**
	 * 获取类里面所有的公有字段
	 * @param clazz
	 * @return
	 */
	class="token keyword">public class="token keyword">static Fieldclass="token punctuation">[class="token punctuation">] class="token function">getPublicFieldsclass="token punctuation">(Classclass="token operator"><class="token operator">?class="token operator">> clazzclass="token punctuation">) class="token punctuation">{
		class="token keyword">return clazzclass="token punctuation">.class="token function">getFieldsclass="token punctuation">(class="token punctuation">)class="token punctuation">;
	class="token punctuation">}
	class="token comment">/**
	 * 获取类里面所有的字段(包含非公开字段)
	 * @param clazz
	 * @return
	 */
	class="token keyword">public class="token keyword">static Fieldclass="token punctuation">[class="token punctuation">] class="token function">getAllFieldsclass="token punctuation">(Classclass="token operator"><class="token operator">?class="token operator">> clazzclass="token punctuation">) class="token punctuation">{
		class="token keyword">return clazzclass="token punctuation">.class="token function">getDeclaredFieldsclass="token punctuation">(class="token punctuation">)class="token punctuation">;
	class="token punctuation">}
	class="token comment">/**
	 * 根据字段名获取本类中定义的所有字段(包含私有字段)
	 * @param clazz
	 * @param fieldName
	 * @return
	 */
	class="token keyword">public class="token keyword">static Field class="token function">getFieldclass="token punctuation">(Classclass="token operator"><class="token operator">?class="token operator">> clazzclass="token punctuation">, String fieldNameclass="token punctuation">) class="token punctuation">{
		class="token keyword">try class="token punctuation">{
			class="token keyword">return clazzclass="token punctuation">.class="token function">getFieldclass="token punctuation">(fieldNameclass="token punctuation">)class="token punctuation">;
		class="token punctuation">} class="token keyword">catch class="token punctuation">(class="token class-name">NoSuchFieldException class="token operator">| SecurityException eclass="token punctuation">) class="token punctuation">{
			eclass="token punctuation">.class="token function">printStackTraceclass="token punctuation">(class="token punctuation">)class="token punctuation">;
		class="token punctuation">}
		class="token keyword">return nullclass="token punctuation">;
	class="token punctuation">}
	class="token comment">/**
	 * 根据字段名获取所有本类对象可以访问的字段(包含公开字段和从父类继承过来的字段)
	 * @param clazz
	 * @param fieldName
	 * @return
	 */
	class="token keyword">public class="token keyword">static Field class="token function">getDeclaredFieldclass="token punctuation">(Classclass="token operator"><class="token operator">?class="token operator">> clazzclass="token punctuation">, String fieldNameclass="token punctuation">) class="token punctuation">{
		class="token keyword">try class="token punctuation">{
			class="token keyword">return clazzclass="token punctuation">.class="token function">getDeclaredFieldclass="token punctuation">(fieldNameclass="token punctuation">)class="token punctuation">;
		class="token punctuation">} class="token keyword">catch class="token punctuation">(class="token class-name">NoSuchFieldException eclass="token punctuation">) class="token punctuation">{
			eclass="token punctuation">.class="token function">printStackTraceclass="token punctuation">(class="token punctuation">)class="token punctuation">;
		class="token punctuation">} class="token keyword">catch class="token punctuation">(class="token class-name">SecurityException eclass="token punctuation">) class="token punctuation">{
			eclass="token punctuation">.class="token function">printStackTraceclass="token punctuation">(class="token punctuation">)class="token punctuation">;
		class="token punctuation">}
		class="token keyword">return nullclass="token punctuation">;
	class="token punctuation">}
	
	class="token comment">/**
	 * 获取类的全名
	 * @param clazz
	 * @return
	 */
	class="token keyword">public class="token keyword">static String class="token function">getNameclass="token punctuation">(Classclass="token operator"><class="token operator">?class="token operator">> clazzclass="token punctuation">) class="token punctuation">{
		class="token keyword">return clazzclass="token punctuation">.class="token function">getNameclass="token punctuation">(class="token punctuation">)class="token punctuation">;
	class="token punctuation">}
	class="token comment">/**
	 * 获取类名(非全名)
	 * @param clazz
	 * @return
	 */
	class="token keyword">public class="token keyword">static String class="token function">getSimpleNameclass="token punctuation">(Classclass="token operator"><class="token operator">?class="token operator">> clazzclass="token punctuation">) class="token punctuation">{
		class="token keyword">return clazzclass="token punctuation">.class="token function">getSimpleNameclass="token punctuation">(class="token punctuation">)class="token punctuation">;
	class="token punctuation">}
	class="token comment">/**
	 * 获取包名
	 * @param clazz
	 * @return
	 */
	class="token keyword">public class="token keyword">static String class="token function">getPackageNameclass="token punctuation">(Classclass="token operator"><class="token operator">?class="token operator">> clazzclass="token punctuation">) class="token punctuation">{
		class="token keyword">return clazzclass="token punctuation">.class="token function">getPackageclass="token punctuation">(class="token punctuation">)class="token punctuation">.class="token function">getNameclass="token punctuation">(class="token punctuation">)class="token punctuation">;
	class="token punctuation">}
	class="token comment">/**
	 * 获取类加载器
	 * @param clazz
	 * @return
	 */
	class="token keyword">public class="token keyword">static ClassLoader class="token function">getClassLoaderclass="token punctuation">(Classclass="token operator"><class="token operator">?class="token operator">> clazzclass="token punctuation">) class="token punctuation">{
		class="token keyword">return clazzclass="token punctuation">.class="token function">getClassLoaderclass="token punctuation">(class="token punctuation">)class="token punctuation">;
	class="token punctuation">}
	
	class="token comment">/**
	 * 获取继承的父类
	 * @param clazz
	 * @return
	 */
	class="token keyword">public class="token keyword">static Classclass="token operator"><class="token operator">?class="token operator">> class="token function">getSuperClassclass="token punctuation">(Classclass="token operator"><class="token operator">?class="token operator">> clazzclass="token punctuation">) class="token punctuation">{
		class="token keyword">return clazzclass="token punctuation">.class="token function">getSuperclassclass="token punctuation">(class="token punctuation">)class="token punctuation">;
	class="token punctuation">}
	
	class="token comment">/**
	 * 获取实现的接口列表
	 * @param clazz
	 * @return
	 */
	class="token keyword">public class="token keyword">static Classclass="token operator"><class="token operator">?class="token operator">>class="token punctuation">[class="token punctuation">] class="token function">getInterfacesclass="token punctuation">(Classclass="token operator"><class="token operator">?class="token operator">> clazzclass="token punctuation">) class="token punctuation">{
		class="token keyword">return clazzclass="token punctuation">.class="token function">getInterfacesclass="token punctuation">(class="token punctuation">)class="token punctuation">;
	class="token punctuation">}
	
	class="token comment">/**
	 * 获取内部定义的公有类
	 * @param clazz
	 * @return
	 */
	class="token keyword">public class="token keyword">static Classclass="token operator"><class="token operator">?class="token operator">>class="token punctuation">[class="token punctuation">] class="token function">getPublicInnerClassesclass="token punctuation">(Classclass="token operator"><class="token operator">?class="token operator">> clazzclass="token punctuation">) class="token punctuation">{
		class="token keyword">return clazzclass="token punctuation">.class="token function">getClassesclass="token punctuation">(class="token punctuation">)class="token punctuation">;
	class="token punctuation">}
	
	class="token comment">/**
	 * 获取内部定义的所有类(包括私有、受保护的、默认的内部类)
	 * @param clazz
	 * @return
	 */
	class="token keyword">public class="token keyword">static Classclass="token operator"><class="token operator">?class="token operator">>class="token punctuation">[class="token punctuation">] class="token function">getAllInnerClassesclass="token punctuation">(Classclass="token operator"><class="token operator">?class="token operator">> clazzclass="token punctuation">) class="token punctuation">{
		class="token keyword">return clazzclass="token punctuation">.class="token function">getDeclaredClassesclass="token punctuation">(class="token punctuation">)class="token punctuation">;
	class="token punctuation">}
	
class="token punctuation">}


http://www.niftyadmin.cn/n/899428.html

相关文章

处理文件、摄像头和图形用户界面

处理文件、摄像头和图形用户界面 1、图像的读取和图片格式的改写 import cv2img cv2.imread("./pic.jpg",cv2.IMREAD_GRAYSCALE) cv.imwrite("./pic.pgm,img) 图片文件的改写&#xff1a;只需要制定要保存的文件格式就可以&#xff0c;&#xff08;.pgm .p…

mybatis框架基础入门

mybatis框架入门 三层架构 软件开发常用的架构是三层架构&#xff0c;之所以流行是因为有着清晰的任务划分。一般包括以下三层&#xff1a; 持久层&#xff1a;主要完成与数据库相关的操作&#xff0c;即对数据库的增删改查。 因为数据库访问的对象一般称为Data Access Object…

色彩空间

色彩空间 opencv中有三种常用的色彩空间&#xff1a;灰度&#xff0c;BGR以及HSV&#xff08;hue&#xff0c;saturation&#xff0c;value&#xff09; 灰度色彩空间是通过去除彩色信息来将其转换成灰阶&#xff0c;灰度色彩空间对中间处理特别有效&#xff0c;比如人脸检测…

mybatis框架基础进阶学习

mybatis框架学习 核心xml配置属性 核心xml配置就是指mybatis-config.xml中的一些属性的配置 configuration&#xff08;配置&#xff09;properties&#xff08;属性&#xff09;settings&#xff08;设置&#xff09;typeAliases&#xff08;类型别名&#xff09;typeHandl…

傅里叶变换、滤波器、边缘检测

傅里叶变换和滤波器 1、图像的幅度谱 图像的幅度谱是另一种图像&#xff0c;幅度谱图像呈现了原始图像在变化方面的一中表示&#xff1a;把图像中最明亮的像素放到图像中央&#xff0c;然后逐渐变暗&#xff0c;在边缘上的像素最暗&#xff0c;这样可以发现图像中有多少量的像…

mybatis基础学习综合

mybatis学习之省市联动练习 步骤一&#xff1a;创建项目 步骤二&#xff1a;导包 commons-dbcp-1.4.jar commons-io-1.4.jar commons-logging-1.2.jar commons-pool-1.5.4.jar hamcrest-2.2.jar hamcrest-core-2.1.jar junit-4.12.jar log4j-1.2.17.jar mybatis-3.4.6.jar m…

轮廓检测

轮廓检测 1、轮廓检测 findContours&#xff08;&#xff09;函数 输入参数&#xff1a; 要处理的图像。这个函数会修改原来的图像&#xff0c;建议copy一下&#xff0c;img.copy()层次类型。cv2.RETR_TREE会得到图像中轮廓的整体层次结构&#xff0c;cv2.RETR_EXTERNAL只得…

Hough-直线和圆的检测

Hough-直线和圆的检测 1、直线检测 HoughLines&#xff1a;使用标准的Hough变换HoughLinesP&#xff1a;使用概率Hough变换&#xff0c;之所以称之为概率版本的Hough变换是因为他只通过分析点的子集并估计这些点都属于一条直线的概率该函数的计算代价会少一些&#xff0c;执行…