• Java反射API使用实例


    /**
         * 访问Class对应的类所包含的注释:getAnnotation();getDelaredAnnotation();
         * 访问Class对应的类所包含的内部类:getDeclaredClasses()
         * 访问Class对应的类所包含的外部类getDeclaringClass()
         * 访问Class对应的类所继承的父类和实现的接口等:
         * getModifiers()返回此类或接口的所有修饰符
         * Class[] getInterfaces() 返回该Class对象对应类所实现的全部接口
         * getPackage();获取此类的包
         * getName();以字符串形式返回此Class对象所表示的类的名称
         * getSimpleName()以字符串形式返回此Class对象所表示类的简称
         * getSuperclass()返回该Class所表示的类的超类对应的Class对象
         */

    ReflectDemo.java

    package com.pb.reflect.classinfo;
    /**
     * 
     * @author Administrator
     * 1、包
     * 2、注解
     * 3、构造方法
     * 4、方法
     * 5、内部类
     *
     */
    @SuppressWarnings(value="unchecked")
    @Deprecated 
    public class ReflectDemo {
        //私有构造方法
        private ReflectDemo(){
            
        }
        //公有的带name参数的构造方法
        public ReflectDemo(String name){
            
        }
        public void info(){
            
        }
        public void info(String str){
            
        }
        class inner{
            
        }
    }

    TestReflectDemo.java

    package com.pb.reflect.classinfo;
    
    import java.lang.annotation.Annotation;
    import java.lang.reflect.Constructor;
    import java.lang.reflect.Method;
    
    public class TestReflectDemo {
        public static void main(String[] args) {
            //下面的代码可以获取ReflectDemo的Class对象
            Class<ReflectDemo> class1 = ReflectDemo.class;
            //获取ReflectDemo中全部的构造方法
            Constructor[] constructor = class1.getDeclaredConstructors();
            System.out.println("########ReflectDemo全部的构造方法########");
            for (Constructor constructor2 : constructor) {
                System.out.println(constructor2.toString());
            }
            //获取ReflectDemo的public构造方法
            System.out.println("########ReflectDemo公共的构造方法########");
            Constructor[] constructor1=class1.getConstructors();
            for (Constructor constructor2 : constructor1) {
                System.out.println(constructor2.toString());
            }
            //获取ReflectDemo的public 的方法
            System.out.println("########ReflectDemo公共的方法########");
            Method[] methods=class1.getDeclaredMethods();
            for (Method method : methods) {
                System.out.println(method.toString());
            }
            //获取对应类的指定方法,方法名、方法参数的类型,找到info方法,info带的参数类型是String
            try {
                System.out.println("########ReflectDemo带有String类型参数的info方法########");
                Method method=class1.getMethod("info", String.class);
                System.out.println(method.toString());
            } catch (SecurityException e) {
                e.printStackTrace();
            } catch (NoSuchMethodException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            
    //        获取ReflectDemo的全部注释
            Annotation[] annotation=class1.getAnnotations();
            System.out.println("########ReflectDemo所有的注释 信息#####");
            for (Annotation annotation2 : annotation) {
                System.out.println(annotation.toString());
            }
            //获取ReflectDemo的包信息
            Package  package1 = class1.getPackage();
            System.out.println(package1.toString());
            
    //        获取ReflectDemo的内部类
            Class[] inners = class1.getDeclaredClasses();
            System.out.println("########ReflectDemo所有的内部类#####");
            for (Class class2 : inners) {
                System.out.println(class2.toString());
            }
            
            try {
                Class inclass = Class.forName("com.pb.reflect.classinfo.ReflectDemo$inner");
    //            输出内部类的信息
                System.out.println("########ReflectDemo所有的内部类的信息");
                System.out.println("inclass对应类的外部类为:"+inclass.getDeclaringClass());
                System.out.println("inclass对应类的包为:"+inclass.getPackage());
                System.out.println("inclass对应类的父类为:"+inclass.getSuperclass());
                System.out.println("inclass对应类的名称为:"+inclass.getName());
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
            
        }
    }
  • 相关阅读:
    【AtCoder】AtCoder Grand Contest 014 解题报告
    【CF603E】Pastoral Oddities(CDQ分治)
    【洛谷4654】[CEOI2017] Mousetrap(DP+二分)
    【洛谷4800】[CEOI2015 Day2] 核能国度(差分细节题)
    【CF626G】Raffles(贪心)
    【CF578E】Walking!(贪心)
    【AtCoder】AtCoder Grand Contest 015 解题报告
    【CF582E】Boolean Function(动态规划+FWT)
    【CF576E】Painting Edges(线段树分治+并查集)
    【CF576D】Flights for Regular Customers(矩乘套路题)
  • 原文地址:https://www.cnblogs.com/sincoolvip/p/5733002.html
Copyright © 2020-2023  润新知