java反射常用方法

public class ClazzUtils {
    // 通过反射获取父类
    public static Class getSupperCls(String clsRef){
        Class<?> c=null;
        try {
            c=Class.forName(clsRef);
            System.out.println(c.getName());
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        Class<?> s=c.getSuperclass();
        System.out.println(s);
        return  s;
    }
    // 通过反射获取构造方法
    public static Constructor<?>[] getConstructors(String clsRef){
        Class<?> cls = null;
        try {
            cls = Class.forName(clsRef);
            System.out.println(cls.getName());
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        Constructor<?>[] cons = cls.getConstructors();
        return  cons;
    }

    // 通过反射所有获取方法
    public static Method[] getMethods(String clsRef){
        Class<?> cls = null;
        try {
            cls = Class.forName(clsRef);
            System.out.println(cls.getName());
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        Method mds[]=cls.getMethods();
        return mds;
    }

    
//    通过反射获取属性名
    public static Field[] getDeclaredFields(String clsRef){
        Class<?> cls = null;
        try {
            cls = Class.forName(clsRef);
            System.out.println(cls.getName());
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        Field fs[]=cls.getDeclaredFields();
        for(Field f:fs){
            System.out.println(f);
        }
        return fs;
    }

    //通过反射调用方法,主要通过invoke方法
    public static void invokeMethod(){
        Class<?> c=null;
        try {
            c=Class.forName("com.demo.Student");
            System.out.println(c.getName());
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        try {
            Object obj=c.newInstance();
            Method m2=obj.getClass().getMethod("setName", String.class);
            m2.invoke(obj, "王五");
            Method m=obj.getClass().getMethod("getName");
            String name=(String) m.invoke(obj);
            System.out.println("name="+name);
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }


    //通过反射操作属性,java里反射可以操作私有属性,只需要设置下
    public  static void text(){
        Class<?> c=null;
        try {
            c=Class.forName("com.demo.Student");
            System.out.println(c.getName());
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        try {
            Object obj=c.newInstance();
            Field nameField=c.getDeclaredField("name");
            nameField.setAccessible(true);
            nameField.set(obj, "张三");
            System.out.println("name="+nameField.get(obj));
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容