百度关键词优化系统,专业做网站优化排名,淘宝建设网站首页,网页制作工具分为文章目录 注解注解的介绍注解的定义以及属性的定义格式注解的使用注解解析的方法----AnnotatedElement接口#xff08;扩展#xff09; 元注解注解之在此注解 注解
注解的介绍
1.jdk1.5版本的新特性 — 一个引用数据类型 和类#xff0c;接口#xff0c;枚举是同一个层次… 文章目录 注解注解的介绍注解的定义以及属性的定义格式注解的使用注解解析的方法----AnnotatedElement接口扩展 元注解注解之在此注解 注解
注解的介绍
1.jdk1.5版本的新特性 — 一个引用数据类型 和类接口枚举是同一个层次 引用数据类型:类 数组 接口 枚举 注解 2.作用 说明对代码进行说明生成doc文档API文档 author version 检查检查代码是否符合条件 Override FunctionalInterface 分析对代码进行分析起到了代替配置文件的作用 3.JDK中的注解 Override — 检测此方法是否为重写方法 jdk1.5版本 支持父类的方法重写 jdk1.6版本支持接口的方法重写 Depercated ----- 方法已经过时不推荐使用 调用方法的时候方法上会有横线但是能用 SuppressWarnings ---- 消除警告 SuppressWarnings(“all”) 配置方法
servletservlet-nameservlet1/servlet-nameservlet-classservlet的全限定名/servlet-class
/servletservlet-mappingservlet-nameservlet1/servlet-nameurl-pattern/abc/url-pattern
/servlet-mapping
注解方法java
WebServlet(/abc)
public class Servlet1{}public class test01 {SuppressWarnings(all)Deprecatedpublic void study(){System.out.println(学习学习);}public static void main(String[] args) {new test01().study();final ArrayList list new ArrayList();list.add(1);list.add(li);list.add(true);}
}注解的定义以及属性的定义格式
1.定义格式 public interface 注解名{ } 2.属性定义—增强注解的作用 数据类型 属性名 — 没有默认值 — 后面要是使用注解必须赋值 数据类型 属性名 () ----- 默认值 ---- 有默认值的 —后面要是使用注解可以不赋值也可以重新赋值 数据类型[] 数组名() 3.注解中能定义什么类型的属性那 a.八种基本类型byte short int long float double char boolean b.String类型 class类型 枚举类型 注解类型 c.以上类型的一维数组
public class test02 {public interface Book{String name();int price();String[] author();int count() default 10;}
}注解的使用
1.使用注解为注解中的属性赋值 2.使用位置 类上 方法上 成员变量上 局部变量上 参数位置 构造上 3.使用 注解名(属性名 属性值属性名 数组值数组名 {元素1元素2}) 注意 在创建注解时虽然写的时interface 但是class类一定要选择annotation
public interface Book {String name();int price();String[] author();int count() default 10;
}使用
public class test02 {Book(name 追风筝的人, price 30, author {阿富汗,胡塞尼})public class BookShelf {}
}注解注意事项 1.空注解可以直接使用 — 空注解就是注解中没有任何属性 2.不同的位置可以使用一样的注解但是同样的位置不能使用一样的注解 3.使用注解时如果此注解中有属性注解中的属性一定要赋值如果有多个属性用逗号隔开如果注解中的属性有数组 使用{} 4.如果注解中的属性值有默认值那么我们不必要写也不用重新赋值反之必须写上 5.如果注解中只有一个属性并且属性名为value那么使用注解的时候属性名不用写直接写值包括单个类型还包括数组
注解解析的方法----AnnotatedElement接口扩展
1.解析注解接口AnnotatedElement 实现类ClassConstructorFieldMethod 2.解析思路 a.获取class对象 b.判断类上或者方法是否有指定的注解 c.如果有指定的注解我们就获取指定的注解 d.获取到了指定的注解我们就可以获取注解中的属性值 3.AnnotatedElement接口中的方法 a.boolean isAnnotatetionPresent(Class extends Annotation annotationClass)----- 判断有没有指定的注解 annotationClass传递的是要获取的注解的class对象 比如BookShelf上有没有Book注解 获取BookShelf的class对象 class class BookShelf.class 判断是否有Book注解class.isAnnotationPresent(Book.class) b.T getAnnotation(Class annotationClass) ---- 获取指定注解 annotationClass传递的是要获取的注解的class对象 比如获取BookShelf的class对象class class BookShelf.class 判断是否有Book注解class.isAnnotationPresent(Book.class) 如果有获取Book注解 Book book class.getAnnotaion(Book.class)
public class test02 {public static void main(String[] args) {//获取BookShelf的class对象final ClassBookshelf bookshelfClass Bookshelf.class;//判断是否有Book注解final boolean annotation;annotation bookshelfClass.isAnnotationPresent(Book.class);System.out.println(annotation);//如果有获取注解、if (annotation){final Book annotation1 bookshelfClass.getAnnotation(Book.class);System.out.println(annotation1.name());System.out.println(annotation1.price());System.out.println(Arrays.toString(annotation1.author()));}}
}以上代码没有解析出来原因是Book注解没有出现在内存中如果Book注解出现在内存中则会注解出来
元注解
1.概述 控制注解的注解 2.作用是控制自定义注解的 3.问题从哪些方面控制那 a.从使用位置方面控制 ---- 控制自定义注解是否能在类上使用还是能在方法上使用还是能在构造上使用 b.从注解的生命周期方面控制 控制自定义注解是否在源文件中出现 控制自定义注解是否能在class文件中出现 控制自定义注解是否能在内存中出现 Target — 控制注解能在什么位置上使用 a.属性ElementType是一个枚举 枚举类中的枚举成员是Static final的我们可以类名直接调用 b.枚举成员 TYPE控制注解只能在类上使用 FLELD: 控制注解只能在成员变量上使用 METHOD: 控制注解只能在方法上使用 PARAMETER控制注解只能在参数上使用 CONSTRUCTOR: 控制注解只能在构造上使用 LOCAL VARIABLE: 控制注解只能在局部变量上使用 Retention — 控制注解的生命周期 a.属性RetentionPolicy — 是一个枚举 枚举类中的枚举成员都是static final的我们可以类名直接调用 b.枚举成员 SOURCE:控制注解能在源文件中出现 CLASS控制注解能在class文件中出现 RUNTIME控制注解能在内存中出现
注解之在此注解
Target(ElementType.TYPE)
Retention(RetentionPolicy.RUNTIME)
public interface Book {String name();int price();String[] author();int count() default 10;
}测试代码
public class test02 {public static void main(String[] args) {//获取BookShelf的class对象final ClassBookshelf bookshelfClass Bookshelf.class;//判断是否有Book注解final boolean annotation;annotation bookshelfClass.isAnnotationPresent(Book.class);System.out.println(annotation);//如果有获取注解、if (annotation){final Book annotation1 bookshelfClass.getAnnotation(Book.class);System.out.println(annotation1.name());System.out.println(annotation1.price());System.out.println(Arrays.toString(annotation1.author()));}}