获取类对象
// 获取类对象Class<?> clzz1 = ReflectTestEntity.class;System.out.println(clzz1.hashCode());Class<?> clzz2 = new ReflectTestEntity().getClass();System.out.println(clzz2.hashCode());Class<?> clzz3 = Class.forName("com.jyusun.origin.study.basic.反射.ReflectTestEntity");System.out.println(clzz3.hashCode());
获取实例的几种方式
// 获取类对象Class<ReflectTestEntity> clazz = ReflectTestEntity.class;// 获取实例ReflectTestEntity entity1 = clazz.newInstance();System.out.println(entity1.toString());// 获取无参构造函数Constructor<ReflectTestEntity> constructor1 = clazz.getConstructor();ReflectTestEntity entity2 = constructor1.newInstance();System.out.println(entity2.toString());// 带参构造函数Constructor<ReflectTestEntity> constructor2 = clazz.getConstructor(String.class, int.class);ReflectTestEntity entity3 = constructor2.newInstance("小花", 18);System.out.println(entity3.toString());// 获取所有的构造函数Constructor<?>[] constructors = clazz.getConstructors();for (Constructor<?> constructor3 : constructors) {System.out.println("构造函数:" + constructor3.toString());}
ReflectTestEntity{name=’null’, age=’0’} ReflectTestEntity{name=’null’, age=’0’} ReflectTestEntity{name=’小花’, age=’18’}
构造函数:public com.jyusun.origin.study.basic.反射.ReflectTestEntity(java.lang.String,int)
构造函数:public com.jyusun.origin.study.basic.反射.ReflectTestEntity()
获取方法
// 获取实例Class<?> clazz = ReflectTestEntity.class;// 获取对象Object entity = clazz.newInstance();// 获取类中所有公开方法 包含继承的方法Method[] methods = clazz.getMethods();// 获取本类中所有方法 不包含继承的方法Method[] declaredMethods = clazz.getDeclaredMethods();// 获取无参方法Method method = clazz.getMethod("test");method.invoke(entity);// 获取有方法Method method1 = clazz.getMethod("test",String.class);method1.invoke(entity,"测试有参");// 获取无参方法Method privateMethod3 = clazz.getDeclaredMethod("testPrivate",String.class);// 设置访问权限无效privateMethod3.setAccessible(true);privateMethod3.invoke(entity,"私有方法需要设置访问权限无效");// 获取静态方法Method staticMethod4 = clazz.getMethod("testStatic", String.class);staticMethod4.invoke(null,"静态方法Class.Method");
无参方法 有参方法:测试有参
私有 有参方法:私有方法需要设置访问权限无效
静态 有参方法:静态方法Class.Method
获取字段
// 获取类对象Class<?> clazz = ReflectTestEntity.class;// 获取对象Object obj = clazz.newInstance();// 获取公开 和 父类继承的字段Field[] fields1 = clazz.getFields();// 获取本类 所有的字段(包含私有)Field[] fields2 = clazz.getDeclaredFields();// 获取单个属性操作Field nameField = clazz.getDeclaredField("name");// 设置私有化字段访问权限nameField.setAccessible(true);// Set 参数值nameField.set(obj, "测试字段反射");System.out.println(obj.toString());// Get 参数值Object nameProperty = nameField.get(obj);System.out.println(nameProperty);
ReflectTestEntity{name=’测试字段反射’, age=’0’}
测试字段反射
获取注解
// 获取实例Class<?> clazz = ReflectTestEntity.class;Field field = clazz.getDeclaredField("name");TestAnnotation annotation = field.getAnnotation(TestAnnotation.class);System.out.println(annotation.value());
胖虎
