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

0 0
原创粉丝点击