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(); } } }
如果您认为阅读这篇博客让您有些收获,不妨点击一下右下角的【推荐】
本文版权归作者和博客园共有,欢迎转载