一、注解
1. 注解的定义
注解代码中对代码解释和说明,区别于注释(注释不参与运行完全是给开发者看的),注解除了解释和说明,更为重要的是可以携带数据,可以在程序运行时提取。注解的核心使命,1.用于标识一个事物(属性 方法 类型)有特殊含义。 2.用于消灭配置文件。
注解本身不是程序,但可以对程序做出解释,注解不同于注释,主角可以被编译器读取,但是注释是不会被编译的。比如@override这个注解,表示这个方法是被重新的,是继承自父类或者实现了某个接口而重写的方法。
2.注解的格式及常见注解
注解的格式以@符号开头,然后紧跟注解名,注解名后面可有参数,如:@override,@SuppressWarnings("参数 ")。
3.注解的位置
注解附加在package(包) class(类) metheod(方法) fisled(属性)上,相当于对程序增加了额外的信息。一般与反射机制一起实现,访问元数据。
二、JDK内置注解(JDK1.5后引入的新技术)
1 @Override 注解
指明被注解的方法需要覆写超类中的方法,如果某个方法使用了该注解,却没有覆写超类中的方法(如大小写写错了,或者参数错了,或者是子类自己定义的方法),编译器就会生成一个错误。在子类中重写父类或接口的方法,@Overide并不是必须的。但是还是建议使用这个注解,在某些情况下,假设你修改了父类的方法的名字,那么之前重写的子类方法将不再属于重写,如果没有@Overide,你将不会察觉到这个子类的方法。有了这个注解修饰,编译器则会提示你这些信息。
2 @Deprecated 注解
可以修饰类、方法、变量,在java源码中被@Deprecated修饰的类、方法、变量等表示不建议使用的,可能会出现错误的,可能以后会被删除的类、方法等,如果现在使用,则在以后使用了这些类、方法的程序在更新新的JDK、jar包等就会出错,不再提供支持。个人程序中的类、方法、变量用@Deprecated修饰同样是不希望自己和别人在以后的时间再次使用此类、方法。当编译器编译时遇到了使用@Deprecated修饰的类、方法、变量时会提示相应的警告信息。
3 @Suppresswarnings 注解
@SuppressWarnings用来抑制编译器生成警告信息,可以修饰的元素为类,方法,方法参数,属性,局部变量。它可以达到抑制编译器编译时产生警告的目的,使用@SuppressWarnings注解,采用就近原则,比如一个方法出现警告,尽量使用@SuppressWarnings注解这个方法,而不是注解方法所在的类。所属范围越小越好,因为范围大了,不利于发现该类下其他方法的警告信息。但是很不建议使用@SuppressWarnings注解,使用此注解,开发人员看不到编译时编译器提示的相应的警告,不能选择更好、更新的类、方法或者不能编写更规范的编码。同时后期更新JDK、jar包等源码时,使用@SuppressWarnings注解的代码可能受新的JDK、jar包代码的支持,出现错误,仍然需要修改。@SuppressWarnings("all")表示镇压全部警告,@SuppressWarnings("unchekedl")表示镇压未检查警告,还可以传递多个参数@SuppressWarnings("unchecked","deprecation")。
内置注解大多在java.lang包中
三、元注解
含义
元注解可以用于定义其他注解,元注解作用是负责注解其他注解,他们被用来为其他注解类型做声明,可以在这种类型他们所支持的类型在java,lang.annotation被找到
1 @Target
用于描述注解使用的范围(被描述的注解可以用在什么地方),,包括:
- ElemenetType.CONSTRUCTOR构造器声明
- ElemenetType.FIELD 域声明
- ElemenetType.LOCAL_VARIABLE局部变量声明
- ElemenetType.METHOD方法声明
- ElemenetType.PACKAGE包声明
- ElemenetType.PARAMETER 参数声明
- ElemenetType.TYPE类、接口、enum
2 @Retention
用于描述注解的生命周期,表示在什么级别保存该注解信息。可选的参数值在枚举类型 RetentionPolicy 中,包括:
- RetentionPolicy.SOURCE注解将被编译器丢弃
- RetentionPolicy.CLASS 注解在class文件中可用,但会被VM丢弃
- RetentionPolicy.RUNTIME VM将在运行期也保留注释,因此可以通过反射机制读
3 @Document
将此注解包含在 javadoc 中 ,它代表着此注解会被javadoc工具提取成文档。在doc文档中的内容会因为此注解的信息内容不同而不同。相当与@see,@param 等。
4 @Inhertied
允许子类继承父类中的注解。