Java代码的三个阶段

注解与反射

注解

@Target({ElementType.TYPE,ElementType.METHOD})//表示注解的作用域
@Retention(RetentionPolicy.RUNTIME)//什么时候生效
@Documented//表示方法已经过时,但是还能用
@Inherited//表示子类可以继承
public @interface MyAnnotation {
String value() default “”;
}

反射

一个类只有一个class对象

类被加载后,类的整个结构都被封装在class对象中

获取反射对象

  1. 通过路径

    Class<?> c1 = Class.forName("com.smu.User");
  2. 通过对象获取    
    Class<? extends User> aClass = user.getClass();
  3. 通过类名获取
    Class<User> userClass = User.class;
  4. 基本内置对象的封装类都有的TYPE属性
    Class<Integer> type = Integer.TYPE;

通过反射获取类的信息

获取类名  

  • String name = c1.getName();
  • String simpleName = c1.getSimpleName();

获取字段(带有Declared的是获取包括private的字段)

  • Field[] fields = c1.getFields();
  • Field username = c1.getField(“username”);
  • Field[] declaredFields = c1.getDeclaredFields();
  • Field username1 = c1.getDeclaredField(“username”);

获取方法(不带Declared是获取本类以及父类的public方法,带有Declared的是获得本类的所有包括private的方法)

  • Method[] methods = c1.getMethods();
  • Method getAge = c1.getMethod(“getAge”);
  • Method[] declaredMethods = c1.getDeclaredMethods();
  • Method setPassword = c1.getDeclaredMethod(“setPassword”, String.class);

获取构造器

  • Constructor<?>[] constructors = c1.getConstructors();
  • Constructor<?>[] declaredConstructors = c1.getDeclaredConstructors();
  • Constructor<?> declaredConstructor1 = c1.getDeclaredConstructor(String.class, String.class, Integer.class);

获取对象

通过class对象获取(需要有无参构造器,需要是public修饰的),通过构造器获取,如果是private修饰的需要setAccessible(true);

  • User o = (User) c1.newInstance();
  • o.setAge(12);
  • System.out.println(“class对象获取”+o);
  • Constructor<?> declaredConstructor = c1.getDeclaredConstructor(String.class, String.class, Integer.class);
  • declaredConstructor.setAccessible(true);
  • User happy = (User) declaredConstructor.newInstance(“happy”, “889886”, 21);
  • System.out.println(“通过构造器获取”+happy);

 执行方法

可以通过类对象调用私有方法,也可以直接通过class对象获取方法

  • Constructor<?> declaredConstructor = c1.getDeclaredConstructor(String.class, String.class, Integer.class);
  • declaredConstructor.setAccessible(true);
  • Object happy1 = declaredConstructor.newInstance(“happy”, “889886”, 15);
  • Method setUsername = c1.getDeclaredMethod(“setUsername”, String.class);
  • setUsername.invoke(happy1, “sjjshj”);

原文地址:http://www.cnblogs.com/happy12123/p/16816265.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性