商丘家具网站建设,北京网校,seo 技术优化,深圳住房和建设局网站网上预约目录 一、注解是什么#xff1f;
二、注解的作用#xff1f;
三、Java中的内置注解有哪些#xff1f;
四、如何自定义一个注解#xff1f;
五、JDK8中的新特性 一、注解是什么#xff1f;
注解就是一种可以标注在类、属性、方法、方法参数等结构上面的一种特殊“注释…目录 一、注解是什么
二、注解的作用
三、Java中的内置注解有哪些
四、如何自定义一个注解
五、JDK8中的新特性 一、注解是什么
注解就是一种可以标注在类、属性、方法、方法参数等结构上面的一种特殊“注释”其实就可以看作是一种注释这些注释信息可以生成文档、可以进行编译检查、可以在运行时获取到注释信息
二、注解的作用
1. 生成文档 类上面的作者、时间、简要信息等信息 方法上面的对方法进行上面 对方法参数、返回值进行说明
2. 编译检查例如Overide 可以检查方法是否是重写的方法
Deprecated是标识方法已过时 SuppressWarnings标明要忽略的警告 在编译是能够进行检查
3. 编译时动态处理可以在编译时对代码的元数据信息进行动态处理比如动态生成代码
4. 运行时动态处理可以在运行时对代码的元数据信息进行动态处理比如利用反射创建实例
一般需要结合反射使用才能发挥作用
三、Java中的内置注解有哪些
1. Java自带的标准注解
Overide、Deprecated是标识方法已过时、SuppressWarnings标明要忽略的警告 编译的时候会对其进行检查
2. 元注解
Target标明注解能放置到那些位置上
Target({ElementType.TYPE,ElementType.FIELD}) 可以声明的类型
TYPE(类型指的是类、接口、枚举)、FIELD(属性)、METHOD(方法)、PAR AMETER(参数)、CONSTRUCTOR(构造器)、LOCAL_VARIABLE(局部变量)、ANNOTATION_TYPE注解类型、PACKAGE(包)、TYPE_PARAMETER(类型 参数)、TYPE_USE(类型参数更加广泛)
Retention标明注解的生命域
属性值是RententionPolicy类型的枚举值SOURCE(表示只存在于源文件中编译后的字节码中不存 在并且不能通过反射获取到)、CLASS(表示在字节码中也存在了但还是不能通过反射获取到)RUNTIME(表示可以通过反射获取到)
Retention(RetentionPolicy.RUNTIME)
Inherited元注解加上其注解表示其被修饰的注解可以被子类所继承
Document元注解表示在生成的文档中能包含注解信息
四、如何自定义一个注解
1. 使用Interface创建注解
2. 写好注解的元注解
3. 写好注解里面的属性
注意如果只是一个value可以忽略如果有多个参数的情况下只有其他参数都有默认值的情况下value才能进行忽略
类型也不是任意的类型都行的类型只能时 八种基本数据类型及其对应的包装类型、String、Class、Enum 、注解类型及这些类型对应的数组类型
五、JDK8中的新特性
1. 可重复注解
就是可以在结构上面重复的写一个相同的注解在jdk8之前需要使用注解数组的方式
1. 定义你要重复的那个注解
Target({ElementType.TYPE,ElementType.FIELD})
Retention(RetentionPolicy.RUNTIME)
public interface MyAnnotation {String value();Status status() default Status.OK;
}
2. 构造一个注解表明你要重复 属性类型就是注解数组
Target({ElementType.TYPE,ElementType.FIELD})
Retention(RetentionPolicy.RUNTIME)
//因需要重复的注解而构造的s注解属性值必须是value
public interface MyAnnotations {MyAnnotation [] value();
}3. 在之前你要重复的那个注解上面加上Repeatable(value MyAnnotations.class)元注解
Target({ElementType.TYPE,ElementType.FIELD})
Retention(RetentionPolicy.RUNTIME)
Repeatable(value MyAnnotations.class)
public interface MyAnnotation {String value();Status status() default Status.OK;
}
使用
MyAnnotation(abc)
MyAnnotation(def)
public class MidStudent extends Student{
}
2. 类型注解
顾名思义就是在类型前面加上注解用来 解释 类型
像这样
public class School MyAnnotation1(value fa) T {public void dosome(T t){//这种类型注解如果能使用得在注解的Target元注解加上ElementType.TYPE_USEMyAnnotation1(da) String name ;}
}
使用的条件是在Target注解中写好ElementType.TYPE_USE类型
Retention(RetentionPolicy.RUNTIME)
Target({ElementType.TYPE_USE})
Inherited
Documented
public interface MyAnnotation1 {String value();
}