欢迎光临
我们一直在努力

新Java基础(十八):注解

注解是 Java 中重要的语法特性,它为程序添加机器可识别的辅助信息,区别于给开发者看的注释,注解能被编译器、虚拟机或自定义代码解析,实现编译检查、运行时动态处理等功能。本文从注解的基础概念出发,详解内置注解、元注解的使用,再通过实操教你实现自定义注解并结合反射解析,零基础也能轻松掌握。

一、什么是注解

(1).注解的作用

①:注解一般用于对程序的说明,就像注释一样,但是区别是注释是给人看的,但是注解是给程序看的。

②:让编译器进行编译检查的作用,比如下边这个@Override注解是重写的意思,子类重写了父类的方法,但是改动了方法名,所以报错。

0

(2).注解的格式

注解是以“@注释名”在代码当中存在的,还可以添加一些参数值,例如 @SuppressWarnings(value = "unchecked")

(3).注解在哪里使用

可以附加在package、class、method、field等上面,相当于给他们添加了额外的辅助信息。我们可以通过反射的方式对这些注解进行访问。

二、注解的类型

一般常用的注解分为三类:

(1).内置注解

①:@Override:修辞方法的,表示一个方法重写了父类方法

0

②:@Deprecated:修辞方法、属性、类,表示不鼓励程序员使用这样的元素,通常是因为它很危险或存在更好的选择。通俗来说就是遗弃。

0

③:@SuppressWarnings:用来抑制编译时的警告信息,括号里的的值包括

a.deprecation:使用了过时的类或方法的警告
b.unchecked:执行了未检查时的转换时的警告,集合就是未指定泛型
c.fall through:当在switch语句使用时发生case穿透
d.path:在类路径、源文件路径等中有不存在路径的警告
e.serial:可序列化类上缺少serialVerisonUID定义时的警告
f.finally:任何finally橘子不能完成时的警告
g.all:以上所有情况的警告。
一个 @SuppressWarnings("all"),
多个 @SuppressWarnings(value={"all","path"})

(2).元注解

元注解是用于注解的注解,在JDK 1.5中提供了4个标准的用来对注解类型进行注解的注解类

①:@Target注解(用来描述注解的使用范围,即注解可以使用在什么地方,在定义注解的时候使用这个我们可以更加清晰的知道它的使用范围)

public enum ElementType {

TYPE, //类,接口

FIELD, //成员变量

METHOD, //方法

PARAMETER, //方法参数

CONSTRUCTOR, //构造方法

LOCAL_VARIABLE, //局部变量

ANNOTATION_TYPE, //注解类

PACKAGE, // 包

TYPE_PARAMETER, //类型参数

TYPE_USE //使用类型的任何地方
}

②:@Retention注解(用来描述注解的保留时间,即注解的生命周期)

public enum RetentionPolicy {
SOURCE, // 源文件保留
CLASS, // 编译期保留,默认值
RUNTIME // 运行期保留,可通过反射去获取注解信息,咱们自定义的类一般使用这个
}

案例

③:@Documented 这个注解只是用来标注生成javadoc的时候是否会被记录(了解就好)。

0

④:@Inherited注解的作用是:使被它修饰的注解具有继承性 (学完反射读取注解以后在细说)

(3).自定义注解

①:@interface是用来声明一个注解的,格式public @interface 注解名{定义内容}

②:其中的每一方法实际上是声明了一个配置参数

③:方法的名称就是参数的名称

④:返回值类型就是参数的类型(返回值类型只能是基本数据类型,Class,String,enum)

⑤:可以通过default来声明参数的默认值

⑥:如果只有一个参数成员,一般参数名称为value

⑦:注解参数必须有值,我们自定义注解元素时,经常使用空字符串,0作为默认值

0

0

0

0

三、注解实现

(1).自定义注解实现类

@Retention(RetentionPolicy.RUNTIME) //元注解:定义自定义注解的生命周期 —》在运行期间保留
@Target(value = {ElementType.TYPE}) //元注解:定义自定义注解的作用返回 —》只能作用在类上边
public @interface WebServlet {
String urlMapping() default "";
}

(2).在一个类上使用注解

@WebServlet(urlMapping = "/third")
public class ThridServlet {

}

(3).利用反射获取注解信息

//利用反射获取注信息
public static void getMessage() throws Exception {
Class clazz = Class.forName("com.qcby.MyServletDemo.FirstServlet");
//获取注解信息
WebServlet webServlet = (WebServlet) clazz.getDeclaredAnnotation(WebServlet.class);

System.out.println(webServlet.urlMapping());
}

public static void main(String[] args) throws Exception {
getMessage();
}

赞(0)
未经允许不得转载:171主机测评 » 新Java基础(十八):注解
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址