注解
1.什么是注解?
Annotation注解,是一种代码级别的说明
2.注解有什么作用?
1.编译检查@Override @SuppressWarnings
2.代码分析
3.编写文档,生成帮助文档
/**
* @author zwy
* @version 1.0
*/
3.JDK提供的注解有哪些?
@Deprecated 表示被修饰的方法已经过时。过时的方法不建议使用,但仍可以使用。
一般被标记位过时的方法都存在不同的缺陷:1安全问题;2新的API取代
@Override JDK5.0表示复写父类的方法;jdk6.0 还可以表示实现接口的方法
@SuppressWarnings 表示抑制警告,被修饰的类或方法如果存在编译警告,将被编译器忽略
deprecation ,忽略过时
rawtypes ,忽略类型安全
unused ,忽略不使用
unchecked ,忽略安全检查
null,忽略空指针
serial, 忽略序列号
all,忽略所有
*自定义注解格式,必须有元注解才能被JDK管理
//定义注解 @Documented @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) public @interface MyAnno { //定义属性 public abstract String name() default "zwy"; //修饰符:默认值 public abstract ,且只能是public abstract //返回值类型:基本类型、字符串String、Class、注解、枚举,以及以上类型的一维数组 int age() default 18; String[] habbits(); }
*自定义注解使用
@MyAnno(name = "lisi", age = 20, habbits = {"run", "eat"})
注解使用的注意事项:
注解可以没有属性,如果有属性需要使用小括号括住。例如:@MyAnno或@MyAnno()
属性格式:属性名=属性值,多个属性使用逗号分隔。例如:@MyAnno(user="zhangsan")
如果属性名为value,且当前只有一个属性,value可以省略。
如果使用多个属性时,k的名称为value不能省略
如果属性类型为数组,设置内容格式为:{ 1,2,3 }
如果属性类型为数组,值只有一个{} 可以省略的
*一个对象上,注解只能使用一次,不能重复使用。
*如何获取注解对象,并使用该对象
public static void main(String[] args) throws NoSuchMethodException { //app类是否用MyAnno注解 boolean isAnno = App.class.isAnnotationPresent(MyAnno.class); System.out.println(isAnno); Method method = App.class.getMethod("test"); boolean hasAnno = method.isAnnotationPresent(MyAnno.class); if(hasAnno){ //获取注解对象 MyAnno anno = method.getAnnotation(MyAnno.class); //获取注解的属性值 String name = anno.name(); int age = anno.age(); String[] habbits = anno.habbits(); } } @MyAnno(name = "lisi", age = 20, habbits = {"run", "eat"}) public static void test(){}
boolean isAnnotationPresent(Class annotationClass) 当前对象是否有注解
T getAnnotation(Class<T> annotationClass) 获得当前对象上指定的注解
Annotation[] getAnnotations() 获得当前对象及其从父类上继承的,所有的注解(注解是可以继承)
Annotation[] getDeclaredAnnotations() 获得当前对象上所有的注解

浙公网安备 33010602011771号