JAVA Reflect

简述

java.lang.reflect 包中有三个类Field、Method、Constructor描述类的域、方法和构造器。

1.都有getName()方法,返回项目名称。
2.都有getModifiers()方法,返回整型数值,用不同的位开关描述public、static修饰符状况使用Modifier类的静态方法分析该数值。例如:isPublic,isPrivate,isFinal是否为public,private,final。Modifier,toString方法答应修饰符。

Modifier.toString(*.getModifiers());

3.Class类中的getFields、getMethods和getConstructors方法将分别返回类提供的public域、方法和构造数组,包括超类的公有成员。
Class类的getDeclareFields、getDeclareMethods和getDeclaredConstructors方法将分别返回全部域、方法、和构造器,包括私有和受保护成员,不包括超类成员。

实例

public class reflect {

    public static void main(String[] args) {
        try{
            String s = "java.util.Date";
            Class c = Class.forName(s);//通过forName方法返回该类名的Class
            String modifiers = Modifier.toString(c.getModifiers());//返回类修饰符使用状况,public,static。。
            System.out.print(modifiers+" "+"class"+" "+s);
            Class c1 = c.getSuperclass();//获取超类的Class
            if(c1!=null&&c1!=Object.class){
                System.out.print(" extends"+" "+c1.getName());//通过getName返回类名
            }
            
            System.out.print(" {"+"\n");
            Constructor[] constructors = c.getConstructors();  //获取该类下的所有构造器
            for(Constructor constructor:constructors){
                System.out.print("  ");
                modifiers = Modifier.toString(constructor.getModifiers());//获取构造器的修饰符状况
                if(modifiers.length()>0)
                    System.out.print(modifiers+" "+constructor.getName()+"(");//获取构造器名称
                
                Class[] paramTypes = constructor.getParameterTypes();//获取构造器所有参数的类
                for(int i=0;i0) System.out.print(",");
                    System.out.print(paramTypes[i].getName());
                }
                System.out.print(");\n");
            }

            System.out.print("\n\n");
            Method[] methods = c.getDeclaredMethods();//获取类中声明的所有方法
            for(Method method:methods){
                modifiers = Modifier.toString(method.getModifiers());
                Class retype=method.getReturnType();
                System.out.print("  "+modifiers+" "+retype.getName()+" "+method.getName()+"(");
                Class[] paramTypes= method.getParameterTypes();
                for(int i=0;i0) System.out.print(",");
                    System.out.print(paramTypes[i].getName());
                }
                System.out.print(");\n");
            }

            System.out.print("\n\n");
            
            Field[] fields = c.getDeclaredFields();
            for(Field field:fields){
                modifiers = Modifier.toString(field.getModifiers());
                Class f1 = field.getType();
                System.out.print("  "+modifiers+" "+f1.getName()+" "+field.getName()+";"+"\n");
            }

            System.out.print("}");
        }catch(Exception exception){

            exception.printStackTrace();
        }
    }

} 

你可能感兴趣的:(JAVA Reflect)