注解(数据类型)
注解作用
1. 编译检查(@Test的junit单元测试)
2. 配置(框架 / 例如封装数据库的用户名和密码)
3. 生成帮助文档(写好作者、调用的api等)
注解特点
1. 可以在变量、方法、类上加载
1 2 3 4 5 6 7
| @Test(timeout=1000) //方法 public void test03(){}
--------------------------------------
@SuppressWarnings("unused") //变量 int i;
|
2. 可以有属性也可以没有属性
1
| @Override @Test(timeout=1000)
|
3. 注解有范围(源码,编译期间,运行期间)
3.1 源码:
1 2 3 4 5
| String类之上
@Author: 编写代码的作者 @Since :从哪里调用 @See :调用什么api
|
3.2 编译期:
1 2 3
| @Override 声明当前的方法是重写父类的方法 @Deprecated 抑制编译器发生警告信息 @Suppresswarning 抑制编译器发生警告信息(如果有变量未使用,未遵循泛型格式错误不报警告)
|
3.3 运行期:
注解举例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| //以下注解的含义是:声明当前的方法是重写父类的方法 @Override public String toString() { return super.toString(); }
public void test01(){ //以下注解的含义是:抑制编译器发生警告信息 @SuppressWarnings("unused") int i; //以下注解的含义是:抑制编译器发生警告信息(如果有变量未使用,未遵循泛型格式错误不报警告) @SuppressWarnings({ "unused", "rawtypes" }) List a=new ArrayList(); }
//以下注解的含义是:声明以下的方法是过时的方法,不建议大家使用 @Deprecated public void test02(){ }
//以下注解的含义是:如果当前方法的执行时间超过1秒,会报错 @Test(timeout=1000) //单元测试 public void test03(){ try { Thread.sleep(1100); } catch (Exception e) { e.printStackTrace(); } System.out.println("DDDDDDDDDDDDD"); }
|
自定义注解
格式
1 2 3 4
| public @interface 注解名称{ public 属性类型 属性名称1(); public 属性类型 属性名称2() default 默认值; }
|
属性支持的类型
1 2 3 4 5 6
| 1.基本数据类型(4类8种) 2.String 3.Class 4.Annotation(注解类型) 5.枚举类型 6.以上类型的一维数组类型
|
写一个名为MyAnno01的注解
1 2 3 4 5 6 7 8
| public @interface MyAnno01 { //1 不加默认值 public long timeout(); //2 加默认值 public long timeout1() default 1000; }
|