首页 > 代码库 > java反射

java反射

//之前懒得打字,今天稍微啰嗦点。说说什么是java反射,这个打个比喻,反射就像是一面镜子,通过它我们可以反观自己。反射其实就是用于描述java类的一个机制,通过它,可以了解类的属性和方法,在java的代理中就用到了反射。下面是我学习过程中的一些代码。

    public static void main(String[] args) {
        try {
            Class<?> cl1=Class.forName("com.java.reflect.Person");
            //获取class中的所有方法,除私有方法之外
            Method[] methods=cl1.getMethods();
            for(Method method:methods){
                System.out.println(method.getName());
            }
            System.out.println("^^^^^^^^^^^");
            //只获取当前类的所有方法,包括私有方法。
            Method[]methods2=cl1.getDeclaredMethods();
            for(Method method:methods2){
                System.out.println(method.getName());
            }
            //获取指定的方法
            System.out.println("^^^^^^^^^^^");
            try {
                Method method3=cl1.getMethod("setName", String.class,int.class);
                
                Object obj=null;
                try {
                    obj=Class.forName("com.java.reflect.Person").newInstance();
                    Object[]agrs={"hello",1};
                    //执行obj类相应的方法,特别的是在方法是通过方法名和参数的列表来实现的
                    method3.invoke(obj, agrs);
                    System.out.println(obj.toString());
                } catch (Exception e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            } catch (NoSuchMethodException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (SecurityException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    
    
}