一、什么是注解?
1、概念:
就是在方法前面声明一下自己的方法是怎么规定的。
2、比方:
比方说自己写的一个方法已经过时了,但是又不能直接剔除,因为老用户可能还用,所以,可以在方法前面加上@Deprecated(已过时)这个关键字,然后在eclipse中就会有一个横线划到单词的上面,提示已经过时。
3、sun公司一共提供了多少个注解?
三个,都在java.lang包下面。分别是:Deprecated(过时)、Override(重载)、SuppressWarnings(去除警告)
二、注解类
“注解类”就是一个特殊的“类”,是将一个类定义成了“注解”,就是一个注解类。
三、元注解
在“注解类”前面又定义一个注解,就是“元注解”,简单说就是“注解的注解”就是“元注解”,另外还有“元数据”、“元信息”。
四、代码演示:
1、ItcastAnnotion.java
package Annotation;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
//retention是“保留”的意思,是一个“元注解”,这是一个“枚举类”,有三个取值,分别是:RUNTIME、CLASS、SOURCE
@Retention(RetentionPolicy.RUNTIME)
public @interface ItcastAnnotion {
}
2、AnnotationTest.java
package Annotation;
@ItcastAnnotion
public class AnnotationTest {
@Deprecated
@SuppressWarnings(value = { "" })
public static void main(String[] args) {
// TODO Auto-generated method stub
if(AnnotationTest.class.isAnnotationPresent(ItcastAnnotion.class)){
ItcastAnnotion annotation=AnnotationTest.class.getAnnotation(ItcastAnnotion.class);
System.out.println(annotation);
}
}
}
五、“注解类”创建工作流程
1、定义注解类-->2、一个简单类在类名的上面使用“注解类”-->3、第三个类使用第二个类。
六、“注解”中value是“关键词”
如果注解中只有一个属性value,那么在引用这个注解的时候可以省略前面的“value=”,直接将属性写进去就可以。
示例如下:
1、ItcastAnnotion.java文件:
package Annotation;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
//retention是“保留”的意思,是一个“元注解”,这是一个“枚举类”,有三个取值,分别是:RUNTIME、CLASS、SOURCE
@Retention(RetentionPolicy.RUNTIME)
public @interface ItcastAnnotion {
String value();//这是一个特殊的名称“value”
}
2、AnnotationTest.java
package Annotation;
@ItcastAnnotion("123")//普及一个知识点,如果前提是:属性只有value的话,没有color之类的其它属性,那么“value=”可以省略
public class AnnotationTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
if(AnnotationTest.class.isAnnotationPresent(ItcastAnnotion.class)){
ItcastAnnotion annotation=AnnotationTest.class.getAnnotation(ItcastAnnotion.class);
System.out.println(annotation.value());//这两个其实一样的,都是String类型
}
}
}
七、为“注解”增加多种属性
1、注意:
可以增加一般的属性,甚至可以在注解中添加注解。
2、示例代码:
(1)、一个注解小程序MetaAnnotation里面包含一个属性value。
package Annotation;
public @interface MetaAnnotation {
String value();
}
(2)、引用“注解”的“注解”,还包括别的属性ItcastAnnotion.java
package Annotation;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
//retention是“保留”的意思,是一个“元注解”,这是一个“枚举类”,有三个取值,分别是:RUNTIME、CLASS、SOURCE
@Retention(RetentionPolicy.RUNTIME)
public @interface ItcastAnnotion {
String color() default "blue";//color属性的默认值是blue,就是说在没有指定color属性值的时候,值是blue,这个名字也叫做“缺省值”
String value();//这是一个特殊的名称“value”
int[] arr() default {2,2,2,2};
MetaAnnotation annotation() default @MetaAnnotation("lhm");//注解中引用注解
}
(3)、一般类AnnotationTest.java
package Annotation;
@ItcastAnnotion(annotation=@MetaAnnotation("flx"),color="red",value="123",arr={1,2,3,4})//普及一个知识点,如果前提是:属性只有value的话,没有color之类的其它属性,那么“value=”可以省略
public class AnnotationTest {
public static void main(String[] args) {
if(AnnotationTest.class.isAnnotationPresent(ItcastAnnotion.class)){
ItcastAnnotion annotation=AnnotationTest.class.getAnnotation(ItcastAnnotion.class);
System.out.println(annotation.color());
System.out.println(annotation.value());//这两个其实一样的,都是String类型
System.out.println(annotation.arr().length);//用数组的形式来
System.out.println(annotation.annotation().value());//调用注解中引用的注解
}
}
}