android基础之java-jvm注解基础

                                                java注解的基础认识


java注解的分类:

@Target:用于目标元素的注解,@Target(ElementType.TYPE)其中ElementType枚举有:1.TYPE(主要作用于类与接口);

2.FIELD(属性与枚举常量);

3.METHOD(方法);

4.PARAMETER(方法中的参数);

5.CONSTRUCTOR(构造方法);

6.LOCAL_VARIABLE(本地变量);

7.ANNOTATION_TYPE(注解类型);

8.PACKAGE(包);

9.TYPE_PARAMETER();

10.TYPE_USE()。

@Retention:用于保留注解,@Rentention(RetentionPolicy.RUNTIME)其中RetentionPolicy枚举中有:

        1.SOURCE(不被编译器保留);

        2.CLASS(被编译器保留成class文件,不被VM保留,默认的方式);

        3.RUNTIME(被编译器保留,也被VM保留,通过反射读取)。

@interface:用于定义注解:@interface 定义格式:

public @interface Print {

 String author() default "";//默认不允许为null,可定义基本数据类型、引用数据类型、类、注解

 String date() default "";

}

完整的常用注解定义形式:

@Target({ElementType.FIELD, ElementType.METHOD, ElementType.TYPE})

@Retention(RetentionPolicy.CLASS)

public @interface Print {

String author()default "";

    String date()default "";

}

@Inherited:指示自动继承注解类型,父类添加@Inherited注解,子类可以获取父类注解。

@Documented:用于注释的一种注解,可以使用javadoc -d javac -d编译生成注解文档。


android中常见的三种注解

1.@Override:方法重写的一种注解;

2.@SuppressWarnings: 在编译前忽略警告,无需编译时警告;

3.@Deprecated: 使用了废弃、过时的api一种注解。

这三种注解都是保留在SOURCE中,在开发程序时经常使用到,无需到编译时。



运行时、编译时处理(APT

运行时处理:通常结合反射来处理,通过反射拿到的属性、方法、类都支持getAnnotation来获取注解,从而实现运行时修改其源码的效果。缺点:由于反射运行时保存文件和读取文件,所以造成性能效率有点低。

简单的一个ButterKnife的实现:

编译时处理:主要使用APT(Annotation Process Tool)通过扫描解析注解信息,最终通过process方法中输出java类。PS:使用Squre公司的javaPoet来辅助输出java类。          https://github.com/square/javapoet


你可能感兴趣的:(android基础之java-jvm注解基础)