反射

// 获取字节码文件对象
        Class c = Class.forName("cn.itcast_01.Person");

        // 创建对象
        Constructor con = c.getConstructor();
        Object obj = con.newInstance();

        // 获取方法
        // Method[] methods = c.getMethods(); // 获取本类及其父类的所有公共方法
        // Method[] methods = c.getDeclaredMethods(); // 获取本类的所有方法
        // for (Method m : methods) {
        // System.out.println(m);
        // }

        // 获取单独的方法
        // 无返回值无参数
        Method m = c.getMethod("show");
        // obj.m();
        //public Object invoke(Object obj,Object... args)
        m.invoke(obj);
        System.out.println("---------------------------");
        //带参数无返回值
        Method m2 = c.getMethod("print", String.class);
        m2.invoke(obj,"hello");
        System.out.println("---------------------------");
        //带参数带返回值
        Method m3 = c.getMethod("method", String.class,int.class);
        Object o = m3.invoke(obj, "world",20);
        System.out.println(o);
        System.out.println("---------------------------");
        //私有方法
        Method m4 = c.getDeclaredMethod("function");
        m4.setAccessible(true);
        m4.invoke(obj);
  • 获取当前方法的Method对象

1.获取当前方法的Method对象

  1.得到class对象
     1.类名.class
     2.对象.getClass()
     3.Class.forName(String className);
  2.在Method类中有一个getAnnotation(String methodName...paramClass)

2.在Method类中有一个getAnnotation(Class annotationClass),可以获取一个注解对象

3.通过注解对象来调用其属性.

你可能感兴趣的:(反射)