反射

来源:互联网 发布:搜狗输入法centos版 编辑:程序博客网 时间:2024/06/10 01:26

能够分析类能力的程序称为反射。主要应用于JavaBeans中。
(1)反射机制可以用来:
1、运行中分析类的能力。
2、运行中查看对象。
3、实现通用的数组操作代码。
4、利用Method对象。
(2)获得Class的对象
1、运用Object类的getClass()可以返回一个类的实例。
Class c1 = e.getClass();
2、调用静态方法forName获得类的Class对象
String className = “java.util.Date”;
Class cl2 = Class.forName(className);
3、如果T是任意的java类型,T.calss将代表匹配的类对象
Class cl3 = Date.class;
(3)利用Class的newInstance()可以快速的创建一个类的实例。
Employee s = emp.getClass().newInstance();
(4)检查类的结构
java.lang.reflect的包中有三个类Field、Method、Constructor分别用于描述域、方法、构造器。

打印Double类package test;import java.lang.reflect.Constructor;import java.lang.reflect.Field;import java.lang.reflect.Method;import java.lang.reflect.Modifier;public class Test {    @SuppressWarnings("rawtypes")    public static void main(String[] args) {        String name = "java.lang.Double";        try {            Class cl = Class.forName(name);            Class superCl = cl.getSuperclass();     //获得父类            String modifiers = Modifier.toString(cl.getModifiers()); //获得类的修饰            if(modifiers.length() > 0) {                System.out.print(modifiers + " ");  //结果public final             }            System.out.print("class " + cl.getSimpleName());    //结果 class Double            if(superCl != null && superCl != Object.class) {    //获得父类                System.out.println(" extends " + superCl.getSimpleName()+" {");            }            printFieds(cl);            printConstructor(cl);            printMothed(cl);            System.out.println("}");        } catch (Exception e) {            e.printStackTrace();        }    }    //打印域    @SuppressWarnings("rawtypes")    public static void printFieds(Class cl) {        Field fieldes[] = cl.getFields();        for(Field f : fieldes) {            String modifiers = Modifier.toString(f.getModifiers()); //获得类的修饰            if(modifiers.length() > 0) {                System.out.println(modifiers + " " + f.getName());  //结果public final             }        }    }    //打印构造器    @SuppressWarnings("rawtypes")    public static void printConstructor(Class cl) {        Constructor onstructors[] =  cl.getDeclaredConstructors();  //获得构筑器        for(Constructor c : onstructors) {            String modifiers = Modifier.toString(c.getModifiers()); //获得方法的修饰            if(modifiers.length() > 0) {                System.out.print(modifiers + " " + c.getName());    //结果             }            System.out.print(" (");         //获得参数            Class classs[] = c.getParameterTypes();            for(Class cla : classs) {                System.out.println(cla.getName()+")");            }        }    }    //打印方法    @SuppressWarnings("rawtypes")    public static void printMothed(Class cl) {        Method methods[] =  cl.getDeclaredMethods();    //获得构筑器        for(Method m : methods) {            Class returnType = m.getReturnType();       //获得返回值类型            String modifiers = Modifier.toString(m.getModifiers()); //获得方法的修饰            if(modifiers.length() > 0) {                System.out.print(modifiers + " " +returnType.getSimpleName()+" "+ m.getName()); //结果             }            System.out.print(" (");         //获得参数            Class classs[] = m.getParameterTypes();            for(int i = 0; i < classs.length; i++) {                if(i > 0) {                    System.out.print(", ");                }                System.out.print(classs[0].getName());            }            System.out.println(")");        }    }}
0 0
原创粉丝点击