反射
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 { }