注解

1.系统内置标准注解

1.1 @Override:用于修饰此方法覆盖了父类的方法;

如果子类想覆盖父类的方法,就可以使用这个annotation,这样,如果子类中的函数名拼写错误,和想覆盖的父类不一样,这样就会提示出错误。

1.2 @Deprecated:用于修饰已经过时的方法;

用于声明一个方法过期了,不推荐使用,当有人使用的时候就会出现警告,如果父类中的方法使用了这个annotation,子类中的这个函数即使没有被这个annotation标记,也会被相同的对待,使用的时候也会出现警告。

1.3 @SuppressWarnnings:用于通知java编译器禁止特定的编译警告。

这个annotation是有参数的,参数主要有以下的类型:
 1.deprecation:使用了不赞成使用的类或方法时的警告;
 2.unchecked:执行了未检查的转换时的警告,例如当使用集合时没有用泛型 (Generics) 来指定集合保存的类型; 
 3.fallthrough:当 Switch 程序块直接通往下一种情况而没有 Break 时的警告;
 4.path:在类路径、源文件路径等中有不存在的路径时的警告; 
 5.serial:当在可序列化的类上缺少 serialVersionUID 定义时的警告; 
 6.finally:任何 finally 子句不能正常完成时的警告; 
 7.all:关于以上所有情况的警告。

这些注解不用特意记忆,写代码写多了,后二种编译器会让你加上什么的,第一种不是强制的,加上最好,有自信不加也可以,后二种出现的时候,要检查自己的代码,是不是需要加这种注解,还是改改代码,让他不出现警告。

2.元注解

元注解是负责注解的注解 

2.1 @Target

作用:用于描述注解的使用范围(即:被描述的注解可以用在什么地方)
取值(ElementType)有:
1.CONSTRUCTOR:用于描述构造器
2.FIELD:用于描述域
3.LOCAL_VARIABLE:用于描述局部变量
4.METHOD:用于描述方法
5.PACKAGE:用于描述包
6.PARAMETER:用于描述参数
7.TYPE:用于描述类、接口(包括注解类型) 或enum声明

代码如下:

			@Target(ElementType.CONSTRUCTOR)
public @interface Test {

}
		
			@Test//The annotation @Test is disallowed for this location
public class MyClass {//类

	@Test
	private int i;//域
	
	@Test
	MyClass(){//构造器
		
	}
	@Test
	public void print(){//方法
		@Test
		String str = "string";//局部变量
		System.out.println("print()");
	}
	
	public void print(@Test String param/*参数*/){
		System.out.println(param);
	}
}
		

关于包注解我觉得挺少见的:

			@Test//Package annotations must be in file package-info.java
package cn.com.codog.annotation;//包
		

自从java8之后,又出现了几个新的注解:

					for(ElementType type : ElementType.values()){
			System.out.println(type);
		}
		
输出如下:

			TYPE
FIELD
METHOD
PARAMETER
CONSTRUCTOR
LOCAL_VARIABLE
ANNOTATION_TYPE
PACKAGE
TYPE_PARAMETER
TYPE_USE
		
也就是ANNOTATION_TYPE,TYPE_USE,TYPE_PARAMETER

这个经过我的测试,ANNOTATION_TYPE代表只可以修饰注解类型,TYPE_PARAMETER这个我还没弄明白,希望有知道的小伙伴可以教我一下,TYPE_USE范围很广,除了包和普通函数,其他的都能修饰

2.2 @Retention

作用:表示需要在什么级别保存该注释信息,用于描述注解的生命周期(即:被描述的注解在什么范围内有效)
     取值(RetentionPoicy)有:
1.SOURCE:在源文件中有效(即源文件保留)
2.CLASS:在class文件中有效(即class保留)
3.RUNTIME:在运行时有效(即运行时保留)

               这个一般自己编写的都是RUNTIME的

2.3 @Documented

将注解添加到javadoc中

2.4 @Inherited

子类继承父类的注解

3.注解处理器

注解



相关内容:
前言
对象和类型
操作符和引用
流程控制语句
初始化和清理
访问控制
组合和继承
接口和多态
接口与抽象类
容器
异常
类型信息
泛型
数组
IO系统
枚举类型
注解
多线程
总结