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();
        }
        
    }
}

 

posted @ 2016-08-03 15:10  sincoolvip  阅读(379)  评论(0编辑  收藏  举报