java反射常用操作

来源:互联网 发布:银行卡复印件制作软件 编辑:程序博客网 时间:2024/05/22 01:33
1.//获取成员变量信息
public static void getFieldsInfo(Field[] fields){

for(Field f:fields){
//打印修饰符
 int mo = f.getModifiers();
         System.out.print(Modifier.toString(mo));
         //打印方法类型
         System.out.print(" "+f.getType());
         //打印变量名称
         System.out.println(" "+f.getName());
}

}


2.//获取构造函数信息
    public static void getConstructInfo(
            @SuppressWarnings("rawtypes") Constructor[] cons) {
        System.out.println("构造函数");
        for (Constructor<?> con : cons) {
            // 打印修饰符
            int mo = con.getModifiers();
            System.out.print(Modifier.toString(mo));
            // 打印构造函数名
            System.out.print(" " + con.getName());
            // 获取参数;
            getParmsInfo(con.getParameterTypes());
            System.out.println();
        }
    }

3.//获取方法信息
    public static void getMethodsInfo(Method[] method) {
 
        for (Method mt : method) {
            int m = mt.getModifiers();
            // 修饰符
            System.out.print(Modifier.toString(m) + " ");
            // 获取返回类型
            System.out.print(mt.getReturnType());
            System.out.print(" " + mt.getName());
            getParmsInfo(mt.getParameterTypes());
        }
    }


4.//获取方法参数信息
    public static void getParmsInfo(@SuppressWarnings("rawtypes") Class[] parm) {
        System.out.print(" (");
        for (Class<?> c : parm) {
            System.out.print(c.getName() + " ");
        }
        System.out.print(")");
        System.out.println();
    }


5.//获取内部类信息
    public static void getInerclassInfo(
            @SuppressWarnings("rawtypes") Class[] innerClass) {
        System.out.println("内部类");
        for (@SuppressWarnings("rawtypes")
        Class c : innerClass) {
            System.out.println(c.getName() + "{");
            getMethodsInfo(c.getDeclaredMethods());
            System.out.println("}");
        }
    }


******测试*******

public class Apple{

public int eat(int i,int j){

System.out.println("总共"+total+"个苹果,吃了"+i+"个苹果");

}

public static void main(String[] args) {


Apple apple = null;
try {
 //只有当类存在默认的构造方法时才能用newInstance()获得对象
apple = (Apple) Class.forName("com.cn.hkl.reflect.Apple")
.newInstance();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}


getMethodsInfo(apple.getClass().getMethods());
getConstructInfo(apple.getClass().getConstructors());
getFieldsInfo(apple.getClass().getFields());

//动态调用方法

try {
Method c =apple.getClass().getMethod("eat",int.class,int.class);
c.invoke(apple,5,2);
} catch (NoSuchMethodException | SecurityException e) {
e.printStackTrace();
} catch (IllegalAccessException e) { 
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}

}




}






0 0