本篇文章主要介绍了"Java Android Annotation深入理解",主要涉及到Exception,Annotation方面的内容,对于Android开发感兴趣的同学可以参考一下:
一、概念 Annontation是Java5开始引入的新特征。中文名称一般叫注解。它提供了一种安全的类注释的机制,用来将任何的信息或元数据(met...
一、概念
Annontation是Java5开始引入的新特征。中文名称一般叫注解。它提供了一种安全的类似注释的机制,用来将任何的信息或元数据(metadata)与程序元素(类、方法、成员变量等)进行关联。
更通俗的意思是为程序的元素(类、方法、成员变量)加上更直观更明了的说明,这些说明信息是与程序的业务逻辑无关,并且是供指定的工具或框架使用的。
Annontation像一种修饰符一样,应用于包、类型、构造方法、方法、成员变量、参数及本地变量的声明语句中。我们经常在程序中看到的@Override、@param、@return、@SuppressWarnings等都是
Annotation 官网的解释是:能够添加到 Java 源代码的语法元数据。类、方法、变量、参数、包都可以被注解,可用来将信息元数据与程序元素进行关联。
Annotation 中文常译为“注解”
二、原理
Annotation其实是一种接口。通过Java的反射机制相关的API来访问
Annotation信息。相关类(框架或工具中的类)根据这些信息来决定如何使用该程序元素或改变它们的行为。利用反射处理注解的方式是运行时注解,还有一类是编译时注解。
Annotation是不会影响程序代码的执行,无论
Annotation怎么变化,代码都始终如一地执行。
Java语言解释器在工作时会忽略这些
Annotation,因此在JVM 中这些
Annotation是“不起作用”的,只能通过配套的工具才能对这些annontaion类型的信息进行访问和处理。
Annotation与interface的异同:
1)、
Annotation类型使用关键字@interface而不是interface。
这个关键字声明隐含了一个信息:它是继承了java.lang.
Annotation.
Annotation接口,并非声明了一个interface
2)、
Annotation类型、方法定义是独特的、受限制的。
Annotation 类型的方法必须声明为无参数、无异常抛出的。这些方法定义了
Annotation的成员:方法名成为了成员名,而方法返回值成为了成员的类型。而方法返回值类型必须为primitive类型、Class类型、枚举类型、
Annotation类型或者由前面类型之一作为元素的一维数组。方法的后面可以使用 default和一个默认数值来声明成员的默认值,null不能作为成员默认值,这与我们在非
Annotation类型中定义方法有很大不同。
Annotation类型和它的方法不能使用
Annotation类型的参数、成员不能是generic。只有返回值类型是Class的方法可以在
Annotation类型中使用generic,因为此方法能够用类转换将各种类型转换为Class。
3)、
Annotation类型又与接口有着近似之处。
它们可以定义常量、静态成员类型(比如枚举类型定义)。Annotation类型也可以如接口一般被实现或者继承
三、作用
a. 标记,用于告诉编译器一些信息,例如@SuppressWarnings、@Override
b. 编译时动态处理,如动态生成代码,例如ButterKnife,一般这类注解会在编译的时候,根据注解标识,动态生成一些类或者生成一些xml都可以,在运行时期,这类注解是没有的~~会依靠动态生成的类做一些操作,因为没有反射,效率和直接调用方法没什么区别。
c. 运行时动态处理,如得到注解信息,例如xutils , afinal
四、元注解