1.Annotation:新版的ejb,Spring,hibernate,struts2有一部分也是基于注解的
2.3个JDK自带的注解:
(1)@SuppressWarnings注解:
public class AnnotationTest {
public static void main(String[] args) {
System.runFinalizersOnExit(true);
}
}
用eclipse会发现中间加了一道线,意思是过时了,
用javac发现:使用或覆盖了已过时的 API这个警告
但是,当我们在main方法前边加上@SuppressWarnings("deprecation")的时候,再编译,就不再输出警告信息了。@SuppressWarnings("deprecation")这就是一个注解,用于告诉javac编译器该怎样。
一个注解就是一个类。
(2)@Deprecated注解:
假设我们的类中有一个类的一个方法:
public static void sayHello(){
System.out.println("itcast");
}
我们现在想让这个类作废,该怎么做呢?
可以加上一个注解:@Deprecated,这就说明这个方法已经作废。那么别人在引用的时候就会提示方法已经过时。
(3)@Override:覆盖父类的方法
假如我们想覆盖类的equals方法:
public boolean equals(Point pt){
}
但是实际上这个方法并不是重写的Object的equals,如何限定我们就是覆盖的Object的equals而不会出错呢?当我们在方法前面加上@Override注解的时候,编译时就会提示我们其实并没有覆盖!
总结一下:注解就是一个标记,加了注解就相当于给程序打了一种标记。
标记可以加载包上,类上,方法上,成员变量,方法的参数,方法的局部变量上面。
3.如何应用注解?
应用注解就相当于调用一个特殊的类,首先得有这么一个注解类。
注解类:
@interface A{
}
应用了“注解类”的类
@A
Class B{
}
对应用了注解类的类进行反射操作的类。
Class C{
B.class.isAnnotationPresent(A.class);
A a=B.class.getAnnotion(A.class);
}
下面我们做一个例子:
public @interface ItCastAnnotation{}
@ItCastAnnotation
public class AnnotationTest {
@SuppressWarnings("deprecation")
public static void main(String[] args) {
if(AnnotationTest.class.isAnnotationPresent(ItCastAnnotation.class)){
ItCastAnnotation annotation=(ItCastAnnotation)
@ItCastAnnotation(color="red",value="abs")
public class AnnotationTest {
@SuppressWarnings("deprecation")
public static void main(String[] args) {
if(AnnotationTest.class.isAnnotationPresent(ItCastAnnotation.class)){
ItCastAnnotation annotation=(ItCastAnnotation)
@ItCastAnnotation("abs")
public class AnnotationTest {
@SuppressWarnings("deprecation")
public static void main(String[] args) {
if(AnnotationTest.class.isAnnotationPresent(ItCastAnnotation.class)){
ItCastAnnotation annotation=(ItCastAnnotation)