package com.mg.common.log;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;

public class Test {

    public static void main(String[]args) throws ClassNotFoundException{
        Class<?> clazz = Class.forName("com.mg.common.log.JDBCAppender");
        System.out.println(clazz.getName());
        //所在包
        System.out.println("package "+clazz.getPackage().getName());
        //导入的包
        
        //方法
        Method [] method =  clazz.getDeclaredMethods();
        int i=0;
        for(Method m:method){
            Class<?>[] clazzs = m.getParameterTypes();
            System.out.print(m.getName()+"(");
            for(Class<?>c:clazzs){
                System.out.print(c.getName()+" param"+i+",");
            }
            System.out.println(")");
            i++;
        }
        
        //构造函数
        Constructor<?>[] constructors = clazz.getDeclaredConstructors();
        i = 0;
        for(Constructor c:constructors){
            Class<?>[] clazzs = c.getParameterTypes();
            System.out.print(c.getName()+"(");
            for(Class<?>con:clazzs){
                System.out.print(con.getName()+" param"+i+",");
            }
            System.out.println(")");
            i++;
        }
        
        //返回字段
        Field [] field = clazz.getDeclaredFields();
        for(Field f:field){
            int mo = f.getModifiers();
            System.out.print(Modifier.toString(mo)+" ");
            System.out.print(f.getType().getName()+" ");
            System.out.println(f.getName());
        }
        
        //调用(实列)方法
        //1,获取类:Class.forName();
        //2,确认方法:class.getMethod('methodName',参数类型1,参数类型2,参数类型n);
        //3,调用方法:method.invoke(class.newInstance(),'参数1','参数2','...');
        
        //调用get,
        //1,获取类:Class.forName();
        //2,实列对象:Object obj = class.newInstance();
        //3,调用:setter(obj,参数1,类型1);
        
        //通过反射操作属性
        //1,obj class.newInstance();
        //2,确认属性:Field field = demo.getDeclaredField("sex");
        //3,设置属性可修改:field.setAccessible(true);
        //4,设置属性值:field.set(obj, "男");
        //5,获取值:field.get();
        
        //通过反射找类包
        //String pr = pname.replace(".", "/");
        //String pp = AuthUtil.class.getClassLoader().getResource(pr).getPath();//物理路径的类包
        //File file = new File(pp);
        //String[] fs = file.list(new FilenameFilter() {//找到匹配的类并返回 FilenameFilter文件过滤器
        //    @Override
        //    public boolean accept(File dir, String name) {
        //        if (name.endsWith(".class")) {
        //            return true;
        //        }
        //        return false;
        //    }
        //});
    }

}

posted on 2015-04-22 16:09  --默许  阅读(86)  评论(0)    收藏  举报