注解的理解
1.注解Annotation
也称为元数据Metadata
,用于修饰解释 包,类,方法,属性,构造器,局部变量等数据信息
2.和注释一样,注解不影响程序的逻辑,但注解可以被编译或运行,相当马天宇的在代码中补充信息
3.在JavaSE
中,注解的使用目的比较简单,例如标记过时功能,忽略警告等,在JavaEE
中注解占据了更加重要的角色,例如用来配置应用程序的任何切面,代替JavaEE
旧版中所遗留的繁冗代码和XML
配置等
基本的Annotation
介绍
使用Annotation
时要在前面增加@
符号,并把该Annotation当成一个修饰符使用,用于修饰它支持的程序元素
三个基本的Annotation:
1.@Override
:限定某个方法,是重写父类的方法,该注解只能用于方法
2.@Deprecated
:用于表示某个程序元素【类,方法等】已过时
3.@SuppressWarnings
:抑制编译器警告
补充说明:@interface的说明
@interface说明是注解类,不是interface接口,注解类是JDK1.5加入的
@Override
注解
Override
限定某个方法,是重写父类的方法,该注解只能用于方法上
使用细节说明:
1.@Override
表示指定重写父类的方法【从编译层面验证】,如果父类没有该方法,则会报错
2.如果不写@Override
注解,而父类仍该方法,仍然构成重写
3.如果不写@Override
只能修饰方法,不能修饰其它类,包,属性等【意思是只能作用在方法上】
4.查看@Override
注解源码为@Target(ElementType.METHOD)
,说明只能修饰方法
5.@Target
是修饰注解的注解,称为元注解
package JAVA面向对象高级部分.annotation;
/**
* @author: 海康
* @version: 1.0
*/
public class Override01 {
public static void main(String[] args) {
}
}
//父类
class Father {
public void show(){}
}
//子类
class Son extends Father{
@Override
public void show(){
System.out.println("son");
}
}
@Deprecated
的说明
1.用于表示某个程序元素【类,方法等】已经过时
2.可以修饰方法,类,字段,包,参数等
3.@target(value={CONSTRUCTOR,FIELD,LOCAL_VARIABLE,METHOD,RACKAGE,PARAMETER,TYPE})
@Deprecated
的作用可以做到新旧版本的兼容和过渡
**@SuppressWarnings
**注解
@Suppresswarnings
:抑制编译警告
元注解
3.4:元注解:用于描述注解的注解
元注解的种类
Retention
:指定注解的作用范围,三种SOURCE, CLASS, RUNTIME
Target
:指定注解可以在哪些地方使用Documented
:指定该注解是否会javadoc
体现Inherited
:子类会继承父类的注解
@Retention
注解
说明:只能用于修饰一个Annotation
定义,用于指定同·Annotation
可以保留多长时间, @Rentention
包含一个@RententionPolicy
类型的成员变量,使用@Rentention
时必须为该value
成员变量指定值:
@Retention
的三种值
@RetentionPolicy.SOURCE
:编译器使用后,直接丢弃这种策略的注释@RetentionPolicy.CLASS
:编译器把注解记录在class文件中,当运行JAVA
程序时,JVM
不会保留注解,这个是默认值@RetentionPolicy.RUNTIME
:编译器将把注解记录在class文件中,当运行Java程序时,jvm会保留注解,程序可以通过反射获取该注解
@Target
注解
基本说明:用于修饰Annotation定义,用于指定被修饰Annotation能用于修饰哪些程序元素,@Target
也包含一个名为value的成员变量
-
@Target
:用于描述注解能够作用的位置ElementType
的取值:TYPE
:可以作用于类上METHOD
:可以作用于方法上FIELD
:可以作用于成员变量上
-
@Retention
:用于描述注解被保留的阶段-
@Retention(RetentionPolicy.RUNTIME)//在自定义注解一般定义是RUNTIME的值 //当前被描述的注解,会保留到CLASS字节码文件中,并被JVM读取到
-
-
@Documented
:描述注解是否被抽取到API
文档中 -
@Inherited
:描述注解是否被子类继承