java--类反射(二)
来源:互联网 发布:insert into 多条数据 编辑:程序博客网 时间:2024/04/29 21:14
反射最大的好处是解耦
package cn.hncu.reflect.ex;public class person { private String name; private int age; public static int count=0; public person() { } public person(String name) { this.name = name; } public person(String name, int age) { this.name = name; this.age = age; } private person(int age){ this.age = age; } private int sum(int n){ int res=0; for(int i=1;i<=n;i++){ res+=i; } return res; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "name=" + name + ",age=" + age; }}
import java.lang.reflect.Constructor;import java.lang.reflect.Field;import java.lang.reflect.Method;import java.lang.reflect.Modifier;import org.junit.Test;//类的解剖(获取类的定义信息)public class reflectDecompose { //获取类的方法:找出一个类中定义了些什么方法,这是一个非常有价值也非常基础的反射用法。 @Test public void fetchMethod() throws Exception{ Class c=Class.forName("cn.hncu.reflect.ex.person"); //获取当前类及其父类的公开方法(私有方法不能访问)--此权限相当于person对象// Method ms[]=c.getMethods(); //获取当前类所有方法(可以访问私有方法,父类方法不能访问)--此权限相当于暴力访问 Method ms[]=c.getDeclaredMethods(); for(int i=0;i<ms.length;i++){ Method m=ms[i]; System.out.println("方法:"+m.toString());//以文本方式打印出String中定义的方法的原型 System.out.println("DeclaringClass(类名):"+m.getDeclaringClass()); int modif=m.getModifiers(); System.out.println("Modifiers(修饰符):"+Modifier.toString(modif)); System.out.println("ReturnType(返回类型):"+m.getReturnType());//Class ret=m.getReturnType(); System.out.println("Name(方法名):"+m.getName()); Class param[]=m.getParameterTypes(); System.out.print("ParameterTypes(参数类型):"); for(int j=0;j<param.length;j++){ System.out.print(param[j]+" "); } System.out.println(); Class eT[]=m.getExceptionTypes(); System.out.print("ExceptionTypes(异常类型):"); for(int j=0;j<eT.length;j++){ System.out.print(eT[i]+" "); } System.out.println(); System.out.println("--------------"); } } //获取类的构造器:找出一个类中定义的构造方法,构造器没有返回类型。 @Test public void fetchConstruchtor()throws Exception{ Class c=Class.forName("cn.hncu.reflect.ex.person"); //获取当前类公开构造方法(私有构造方法和父类构造方法不能访问)// Constructor cons[]=c.getConstructors(); //获取当前类所有构造方法(可以访问私有构造方法,父类构造方法不能访问) Constructor cons[]=c.getDeclaredConstructors(); for(int i=0;i<cons.length;i++){ Constructor con=cons[i]; System.out.println("构造方法:"+con.toString());//以文本方式打印出String中定义的构造方法的原型 System.out.println("DeclaringClass(类名):"+con.getDeclaringClass()); int modif=con.getModifiers(); System.out.println("Modifiers(修饰符):"+Modifier.toString(modif)); System.out.println("Name(构造方法名):"+con.getName()); Class param[]=con.getParameterTypes(); System.out.print("ParameterTypes(参数类型):"); for(int j=0;j<param.length;j++){ System.out.print(param[j]+" "); } System.out.println(); Class eT[]=con.getExceptionTypes(); System.out.print("ExceptionTypes(异常类型):"); for(int j=0;j<eT.length;j++){ System.out.print(eT[i]+" "); } System.out.println(); System.out.println("--------------"); } } //获取类的属性字段:找出一个类中定义了哪些属性字段。 @Test public void fetchField()throws Exception{ Class c=Class.forName("cn.hncu.reflect.ex.person"); //获取当前类及其父类的公开变量(私有变量不能访问)--此权限相当于person对象 Field flds[]=c.getFields(); //获取当前类所有公开变量(父类变量不能访问)--此权限相当于暴力访问// Field flds[]=c.getDeclaredFields(); for(int i=0;i<flds.length;i++){ Field fld=flds[i]; System.out.println("变量:"+fld.toString());//以文本方式打印出String中定义的变量的原型 System.out.println("DeclaringClass(类名):"+fld.getDeclaringClass()); int modif=fld.getModifiers(); System.out.println("Modifiers(修饰符):"+Modifier.toString(modif)); System.out.println("Type(变量类型):"+fld.getType()); System.out.println("Name(变量名):"+fld.getName()); System.out.println("--------------"); } }}
Method ms[]=c.getMethods();
方法:public java.lang.String cn.hncu.reflect.ex.person.toString()
DeclaringClass(类名):class cn.hncu.reflect.ex.person
Modifiers(修饰符):public
ReturnType(返回类型):class java.lang.String
Name(方法名):toString
ParameterTypes(参数类型):
ExceptionTypes(异常类型):
方法:public java.lang.String cn.hncu.reflect.ex.person.getName()
DeclaringClass(类名):class cn.hncu.reflect.ex.person
Modifiers(修饰符):public
ReturnType(返回类型):class java.lang.String
Name(方法名):getName
ParameterTypes(参数类型):
ExceptionTypes(异常类型):
方法:public void cn.hncu.reflect.ex.person.setName(java.lang.String)
DeclaringClass(类名):class cn.hncu.reflect.ex.person
Modifiers(修饰符):public
ReturnType(返回类型):void
Name(方法名):setName
ParameterTypes(参数类型):class java.lang.String
ExceptionTypes(异常类型):
方法:public int cn.hncu.reflect.ex.person.getAge()
DeclaringClass(类名):class cn.hncu.reflect.ex.person
Modifiers(修饰符):public
ReturnType(返回类型):int
Name(方法名):getAge
ParameterTypes(参数类型):
ExceptionTypes(异常类型):
方法:public void cn.hncu.reflect.ex.person.setAge(int)
DeclaringClass(类名):class cn.hncu.reflect.ex.person
Modifiers(修饰符):public
ReturnType(返回类型):void
Name(方法名):setAge
ParameterTypes(参数类型):int
ExceptionTypes(异常类型):
方法:public final void java.lang.Object.wait(long,int) throws java.lang.InterruptedException
DeclaringClass(类名):class java.lang.Object
Modifiers(修饰符):public final
ReturnType(返回类型):void
Name(方法名):wait
ParameterTypes(参数类型):long int
ExceptionTypes(异常类型):
——————————————————————
Method ms[]=c.getDeclaredMethods();
方法:public java.lang.String cn.hncu.reflect.ex.person.toString()
DeclaringClass(类名):class cn.hncu.reflect.ex.person
Modifiers(修饰符):public
ReturnType(返回类型):class java.lang.String
Name(方法名):toString
ParameterTypes(参数类型):
ExceptionTypes(异常类型):
方法:public java.lang.String cn.hncu.reflect.ex.person.getName()
DeclaringClass(类名):class cn.hncu.reflect.ex.person
Modifiers(修饰符):public
ReturnType(返回类型):class java.lang.String
Name(方法名):getName
ParameterTypes(参数类型):
ExceptionTypes(异常类型):
方法:public void cn.hncu.reflect.ex.person.setName(java.lang.String)
DeclaringClass(类名):class cn.hncu.reflect.ex.person
Modifiers(修饰符):public
ReturnType(返回类型):void
Name(方法名):setName
ParameterTypes(参数类型):class java.lang.String
ExceptionTypes(异常类型):
方法:private int cn.hncu.reflect.ex.person.sum(int)
DeclaringClass(类名):class cn.hncu.reflect.ex.person
Modifiers(修饰符):private
ReturnType(返回类型):int
Name(方法名):sum
ParameterTypes(参数类型):int
ExceptionTypes(异常类型):
方法:public int cn.hncu.reflect.ex.person.getAge()
DeclaringClass(类名):class cn.hncu.reflect.ex.person
Modifiers(修饰符):public
ReturnType(返回类型):int
Name(方法名):getAge
ParameterTypes(参数类型):
ExceptionTypes(异常类型):
方法:public void cn.hncu.reflect.ex.person.setAge(int)
DeclaringClass(类名):class cn.hncu.reflect.ex.person
Modifiers(修饰符):public
ReturnType(返回类型):void
Name(方法名):setAge
ParameterTypes(参数类型):int
ExceptionTypes(异常类型):
——————————————————————
Constructor cons[]=c.getConstructors();
构造方法:public cn.hncu.reflect.ex.person(java.lang.String)
DeclaringClass(类名):class cn.hncu.reflect.ex.person
Modifiers(修饰符):public
Name(构造方法名):cn.hncu.reflect.ex.person
ParameterTypes(参数类型):class java.lang.String
ExceptionTypes(异常类型):
构造方法:public cn.hncu.reflect.ex.person()
DeclaringClass(类名):class cn.hncu.reflect.ex.person
Modifiers(修饰符):public
Name(构造方法名):cn.hncu.reflect.ex.person
ParameterTypes(参数类型):
ExceptionTypes(异常类型):
构造方法:public cn.hncu.reflect.ex.person(java.lang.String,int)
DeclaringClass(类名):class cn.hncu.reflect.ex.person
Modifiers(修饰符):public
Name(构造方法名):cn.hncu.reflect.ex.person
ParameterTypes(参数类型):class java.lang.String int
ExceptionTypes(异常类型):
——————————————————————
Constructor cons[]=c.getDeclaredConstructors();
构造方法:private cn.hncu.reflect.ex.person(int)
DeclaringClass(类名):class cn.hncu.reflect.ex.person
Modifiers(修饰符):private
Name(构造方法名):cn.hncu.reflect.ex.person
ParameterTypes(参数类型):int
ExceptionTypes(异常类型):
构造方法:public cn.hncu.reflect.ex.person(java.lang.String)
DeclaringClass(类名):class cn.hncu.reflect.ex.person
Modifiers(修饰符):public
Name(构造方法名):cn.hncu.reflect.ex.person
ParameterTypes(参数类型):class java.lang.String
ExceptionTypes(异常类型):
构造方法:public cn.hncu.reflect.ex.person()
DeclaringClass(类名):class cn.hncu.reflect.ex.person
Modifiers(修饰符):public
Name(构造方法名):cn.hncu.reflect.ex.person
ParameterTypes(参数类型):
ExceptionTypes(异常类型):
构造方法:public cn.hncu.reflect.ex.person(java.lang.String,int)
DeclaringClass(类名):class cn.hncu.reflect.ex.person
Modifiers(修饰符):public
Name(构造方法名):cn.hncu.reflect.ex.person
ParameterTypes(参数类型):class java.lang.String int
ExceptionTypes(异常类型):
——————————————————————
Field flds[]=c.getFields();
变量:public static int cn.hncu.reflect.ex.person.count
DeclaringClass(类名):class cn.hncu.reflect.ex.person
Modifiers(修饰符):public static
Type(变量类型):int
Name(变量名):count
——————————————————————
Field flds[]=c.getDeclaredFields();
变量:private java.lang.String cn.hncu.reflect.ex.person.name
DeclaringClass(类名):class cn.hncu.reflect.ex.person
Modifiers(修饰符):private
Type(变量类型):class java.lang.String
Name(变量名):name
变量:private int cn.hncu.reflect.ex.person.age
DeclaringClass(类名):class cn.hncu.reflect.ex.person
Modifiers(修饰符):private
Type(变量类型):int
Name(变量名):age
变量:public static int cn.hncu.reflect.ex.person.count
DeclaringClass(类名):class cn.hncu.reflect.ex.person
Modifiers(修饰符):public static
Type(变量类型):int
Name(变量名):count
- java--类反射(二)
- java反射(二)
- Java 反射(二)
- Java反射(二)利用反射分析类的能力
- Java反射(二)----- 动态加载类
- Java反射(二):反射的使用
- Java的反射(二)
- Java反射机制(二)
- Java反射(二)Constructor
- java反射机制(二)
- Java反射机制(二)
- Java反射总结(二)
- JAVA反射机制(二)
- Java--反射(二) Java动态加载类
- 黑马程序员:java中的Class类和反射(二)
- java反射学习(二)--得到类的信息
- Java反射基础(二)— Class类
- 初学Java的类加载与反射机制(二)
- 1918: G
- 数据结构实验之排序三:bucket sort
- 【NOIP提高】Value
- 关于可能需要用到的矩形检测
- Can't create handler inside thread that has not called Looper.prepare()
- java--类反射(二)
- Android开源项目第五篇——优秀个人和团体篇
- 【NOIP2016提高A组模拟8.17】(雅礼联考day1)Matrix
- 【USACO题库】1.3.3 Calf Flac
- 关于Java中static和final关键字的用法总结
- 局部变量与成员变量的区别
- 基于时间的一次密码TOTP
- 按钮控制类 委托
- [背包]poj1157 LITTLE SHOP OF FLOWERS