一、注解:
1.什么是注解?
注解一般用于对程序的说明,就像注释一样,但区别是注解是给人看的,注解是给程序看的,让编译器进行编译检查的作用,比如@Override修饰方法,表示重写父类方法,如果改动了方法的名称就会编译报错
2.注解的格式
注解是以@注释名 在代码当中存在的,还可以添加一些参数值,例如@SuooerssWarnings(value="unchecked")
3.注解可以在哪里使用
可以附加在package,class,method,field等上面,相当于给他们添加了额外的辅助信息,以后可以通过反射来获取其注解信息,一般自定义注解都是用这个值
二、注解的类型
一般常用注解分为三类
1.内置注解
- @Override修饰方法,表示重写父类方法
- @Deprecated:修饰方法属性类 表示不鼓励程序员使用这些元素,通常是因为他很危险,或者存在更好的方法,通俗的说这个方法是遗弃的
- @SuooerssWarnings用来抑制编译时的警告信息,其参数如下含义:
deprecation:使用了过时的类或方法的警告
unchecked:执行了未检查时的转换时的警告
path:在类路径,源文件路径等中有不存在的路径的警告
all:以上所有情况警告
@SuooerssWarnings的使用方式:
一个参数@SuooerssWarnings(value="unchecked")
多个参数@SuooerssWarnings(value={"unchecked",“unchexk”})
2.元注解
元注是用来给注解使用的,Java中的提供了4个元注解
1.@Target
@Target(用来描述注解的使用范围)
其参数值:TYPE(类、接口)、METHORD(方法)、PACKAGE(包)、PARAMETER(方法参数)等
2.@Retention
@Retention注解(用来描述注解什么时候有效,用来描述注解的生存周期)其参数值:
SOURCE(源文件保留)
CLASS(编译期间保留,默认值)
RUNTIME(运行期保留,可以通过反射)
3.@Documented注解
(用来标注生成javadoc的时候是否被记录,了解就好)
4.@Inherited注解
(使被它修饰的注解具有继承性)
3.自定义注解
①@interface是用来声明一个注解的,格式 public @interface注解名0
②注解其中的每一个方法实际上是声明了一个配置参数
③方法名称就是参数的名称
④返回值类型就是参数的类型
⑤可以通过default来声明参数的默认值
⑥如果只有一个方法,也就是只有一个参数时,一般参数名称建议使用value,因为value在使用注解时参数名可以省略
⑦注解参数如果没有设置默值,必须要使用该参数并且赋值
三、注解实现
1.自定义注解
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME)
@Target(value=ElementType.TYPE)
public @interface WebServlet {
String url() default "";
}
2.在一个类上使用注解
@WebServlet(url="/firstServlet")
public class FirstServlet {
}
3.通过反射获取注解信息
public class ReflectDemo {
public static void getMessage() throws ClassNotFoundException {
Class clz = Class.forName("text23.FirstServlet");
//获取注解信息
WebServlet webServlet = (WebServlet) clz.getDeclaredAnnotation(WebServlet.class);
System.out.println(webServlet.url());
}
public static void main(String[] args) throws ClassNotFoundException {
getMessage();
}
}