• 反射


    package reflenction;
    
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.junit.runners.BlockJUnit4ClassRunner;
    
    import java.lang.annotation.Annotation;
    import java.lang.reflect.*;
    import java.util.Arrays;
    
    public class Test1 {
    
        public static void main(String[] args) {
            Class cls = ReflenctionExample.class;
            // 返回类全名
            System.out.println(cls.getName());
            // 返回类名
            System.out.println(cls.getSimpleName());
            // 获取类的修饰符,返回int
            System.out.println(cls.getModifiers());
            System.out.println(Modifier.isPublic(cls.getModifiers()));
    
            // 获取包信息
            Package pa = cls.getPackage();
            System.out.println(pa.getName());
    
            // 返回父类
            Class superclass = cls.getSuperclass();
            System.out.println(superclass.getSimpleName());
    
            // 返回实现的接口,只会返回当前类的接口,而不会返回父类实现的接口
            Class[] interfaces = cls.getInterfaces();
            System.out.println(interfaces[0].getName());
    
            // 返回构造方法,不会返回默认的构造方法,即此类没有显示的定义构造方法将返回为空
            Constructor[] constructors = cls.getConstructors();
            System.out.println("构造方法名:" + constructors[0].getName());
            try {
                Constructor constructor = cls.getConstructor(new Class[]{int.class});
                // 利用Constructor对象实例化一个类
                ReflenctionExample example = (ReflenctionExample)constructor.newInstance(1);
                System.out.println("example.field3:" + example.field3);
            } catch (NoSuchMethodException e) {
                e.printStackTrace();
            } catch (InstantiationException e) {
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            } catch (InvocationTargetException e) {
    
            }
    
    
            // 返回所有公共方法
            Method[] methods = cls.getMethods();
            System.out.print("公共方法名:");
            for (Method m : methods) {
                System.out.print(m.getName() + ",");
            }
            System.out.println();
            // 返回所有所有方法
            Method[] method2 = cls.getDeclaredMethods();
            System.out.printf("所有方法名:");
            for (Method m : method2) {
                System.out.print(m.getName() + ",");
            }
            System.out.println();
    
            // 返回所有公共属性
            Field[] fields = cls.getFields();
            System.out.print("公共属性名:");
            for (Field field : fields) {
                System.out.print(field.getName() + ",");
            }
            System.out.println();
    
    
            // 返回所有属性
            Field[] fields2 = cls.getDeclaredFields();
            System.out.print("所有属性名:");
            for (Field field : fields2) {
                System.out.print(field.getName() + ",");
            }
            System.out.println();
    
            // 返回所有注解
            Annotation[] annotations = cls.getAnnotations();
            System.out.print("所有注解名:");
            for (Annotation annotation : annotations) {
                System.out.println(annotation.annotationType().getName() + ",");
            }
            System.out.println();
    
    
    
        }
    }
    
    @RunWith(value = BlockJUnit4ClassRunner.class)
    class ReflenctionExample implements InterfaceExample {
        private int field1;
        protected int field2;
        public int field3;
    
        public ReflenctionExample(int flag) {
            this.field3 = flag;
        }
    
        public void test1() {
        }
    
        protected void test2() {
        }
    
        private void test3() {
        }
    
    }
    
    interface InterfaceExample {
    
    }
  • 相关阅读:
    Docker容器管理神器
    查看MySQL连接状态
    使用 Docker 镜像安装 Radicale3
    Java文档注释的使用
    Hibernate依赖问题
    WPF HelixToolkit 3D
    二分法
    比较 React vue, 单向绑定 双向绑定 优缺点
    7 个杀手级的 JS 一行代码
    js中??和?.的意思
  • 原文地址:https://www.cnblogs.com/dayaodao/p/8707600.html
Copyright © 2020-2023  润新知