注解是JDK1.5的新特性。它是一种标记,在程序中加了注解就相当于为程序加了某种标记。加标记后javac编译器或者开发工具和其他程序通过反射机制来了解你编写的类有没有什么标记,该类中如果有某种标记,那么就会做与其对应的事情。标记可以加在包,类,字段,方法,方法的参数以及局部变量上。
在java.lang中提供了三种的注解:
@SuppressWarnings(“deprecation”):表示压制警告,在程序中调用了已经不使用了的方法的时候可以使用这个来告诉编译器,不要发出警告。把警告压制
@Deprected:表示这个已经废弃了。主要是告诉在你使用的时候,不建议你使用这个,可能有更好的方法供你使用。
@Override:表示重写,在代码中你要重写某个方法的时候,加上这个标记,可以防止错误。比如在复写equals(Object obj)的时候,你把Object这个写成别的类了,那么就会出错的。
注解的使用在后续的学习中,如几种框架中应用很广泛,因此这几种注解显然不够。在这里老师讲了自己定义的注解,注解在定义的时候其实和接口比较类似:@interface注解名称这个注解定义后,在别的类中使用的时候,就相当于给这个注解声明了一个实例。然后再另外的一个类中通过反射来检测这个拥有注解类的类是否拥有注解,这是实际开发时候的工作步骤。
在自定义注解定义完后,通过一个测试类的main方法来测试这个注解该类的注解是不是存在,并且打印该注解的时候,发现什么都没有打印出来,视频中老师又引出了一个注解的注解,是用来说明这个自己定义注解的生命阶段:
RetentionPolicy.SOURCE---------java源文件;
RetentionPolicy.CLASS---------class文件(默认值就是该阶段);
RetentionPolicy.Runtime-------内存中的字节码;
上面说的这三种生命周期标志要通过元注解来使用,第一种表示这个注解只是在java源文件中出现的,javac编译的时候会把这种类型的注解剔除掉的。而第二种注解是在class文件中存在的,到内存中就不在存在了。至于最后一种是一直到运行时都存在的注解。
当把这注解的注解(就是元注解)加上:
import java.lang.annotation.*;
@Retention(RetentionPolicy.RUNTIME)
public @interface ItcastAnnotation {}
在在检测类中进行检测的时候通过反射就会打印出这个注解的名称。(因为要使用字节码,但是它在内存中才会生成的);@Deprected----是RetentionPolicy.Runtime,因为在调用某个类的方法的时候是把该类字节码调出来后才知道,所以必须到运行期才行的。
还可以在注解上加一些属性,这些属性都是通过抽象方法的形式来定义的:如
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD,ElementType.TYPE})
public @interface ItcastAnnotation {
String color()default "blue";
String value();
}在这个注解里有两个属性,那么在类上进行注解的时候应该赋予初值才行。
@ ItcastAnnotation(color=”red”,value=”xyz”)然后再检测类中通过反射得到该类的字节码后就可以得到这个注解的属性值了。
数组类型的属性:在上面代码中加入int[] arrayAttr();这个属性,在类中使用的时候如果该数组只有一个元素那么就可以不用写中括号了,直接是arrayAttr=某个值;就OK了。同时属性可以是枚举类型的还有注解类型的。这些都可充当注解的属性。
Java--------注解
最新推荐文章于 2024-08-14 11:20:14 发布