Java零基础进阶篇之注解(二)

​​​​​​本篇文章讲解的知识点主要围绕注解,废话不多说,只分享Java相关的干货!

主要掌握内容:

@Override

@Deprecated

@SuppressWarnings

@Target(ElementType.METHOD)

@Retention(RetentionPolicy.RUNTIME)

@Documented

@Inherited

 

Annotation(注解)

Annotation 对于程序运行没有影响,它的目的在于对编译器或分析工具说明程序的某些信息,您可以在包,类,方法,域成员等加上 Annotation.每一个Annotation 对应一个实际的 Annotation 类型.

1.限定重载父类方法@Override

java.lang.Override 是J2SE5.0 中标准的Annotation 类型之一,它对编译器说明某个方法必须是重写父类中的方法.编译器得知这项信息后,在编译程序时如果发现被@Override 标注的方法并非重写父类中的方法,就会报告错误.例,如果在定义新类时想要重写 Object 类的toString()方法,可能会写成这样:

Java零基础进阶篇之注解(二)_第1张图片

 

在编写 toString()方法时,因为输入错误或其他的疏忽,将之写成 ToString()了,编译这个类时并不会出现任何的错误,编译器不会知道您是想重写 toString()方法,只会以为是定义了一个新的 ToString()方法.可以使用 java.lang.Override 这个Annotation 类型,在方法上加一个@Override 的 Annotation 这可以告诉编译器现在定义的这个方法,必须是重写父类中的方法.

Java零基础进阶篇之注解(二)_第2张图片

 

java.lang.Override 是一个 Marker Annotation,简单地说就是用于标示的 Annotation,Annotation 名称本身表示了要给工具程序的信息。Annotation 类型与 Annotation 实际上是有区分的,Annotation 是Annotation 类型的实例,例如@Override是个 Annotation,它是 java.lang.Override 类型的一个实例,一个文件中可以有很多个@Override,但它们都是属于java.lang.Override 类型。

2.标识方法为过时的@Deprecated

java.lang.Deprecated 也是J2SE5.0 中标准的Annotation 类型之一。它对编译器说明某个方法已经不建议使用。如果有开发人员试图使用或重写被@Deprecated 标示的方法,编译器必须提出警告信息。

Java零基础进阶篇之注解(二)_第3张图片

 

如果有人试图在继承这个类后重写 getSomething()方法,或是在程序中调用 getSomething()方法,则编译时会有警告出现。

java.lang.Deprecated 也是一个Marker Annotation 简单地说就是用于标示。

3. 抑制编译器警告 @SuppressWarnings

java.lang.SuppressWarnings 也是J2SE5.0 中标准的Annotation 类型之一,它对编译器说明某个方法中若有警告信息,则加以抑制,不用在编译完成后出现警告。例如:

Java零基础进阶篇之注解(二)_第4张图片

 

这样,编译器将忽略 unchecked 的警告,您也可以指定忽略多个警告:

@SuppressWarnings(value={"unchecked","deprecation"});

@SuppressWarnings 是所谓的Single-Value Annotation,因为这样的Annotation 只有一个成员,称为value 成员,可在使用 Annotation 时作额外的信息指定。

4.自定义 Annotation 类型

可以自定义 Annotation 类型,并使用这些自定义的 Annotation 类型在程序代码中使用 Annotation,这些 Annotation将提供信息给程序代码分析工具。首先来看看如何定义 Marker Annotation,也就是Annotation 名称本身即提供信息。对于程序分析工具来说,主要是检查是否有 Marker Annotation 的出现,并做出对应的动作。要定义一个 Annotation 所需的动作, 就类似于定义一个接口,只不过使用的是@interface。

 

由于是一个 Marker Annotation,所以没有任何成员在 Annotation 定义中。编译完成后,就可以在程序代码中使用这个Annotation。

Java零基础进阶篇之注解(二)_第5张图片

 

稍后可以看到如何在Java 程序中取得 Annotation 信息(因为要使用Java 程序取得信息,所以还要设置 meta-annotation,稍后会谈到),接着来看看如何定义一个 Single-Value Annotation,它只有一个Value 成员。

Java零基础进阶篇之注解(二)_第6张图片

实际上定义了value()方法,编译器在编译时会自动产生一个 value 的域成员,接着在使用UnitTest Annotation 时要指定值。

如:

Java零基础进阶篇之注解(二)_第7张图片

@UnitTest("zhangsan")实际上是@UnitTest(value="zhangsan")的简便写法,value 也可以是数组值。如:

Java零基础进阶篇之注解(二)_第8张图片

在使用时,可 以 写 成 @FunctionTest({"method1","method2"}) 这 样 的 简 便 形 式 。 或 是@FunctionTest(value={"method1","method2"})这样的详细形式.也可以对value 成员设置默认值,使用default关键词即可。

Java零基础进阶篇之注解(二)_第9张图片

 

这样如果使用@UnitTest2 时没有指定value 值,则value 默认就是 NoSuchMethod.也可以为Annotation 定义额外的成员,以提供额外的信息给分析工具,如:

Java零基础进阶篇之注解(二)_第10张图片

Java零基础进阶篇之注解(二)_第11张图片

运用:

Java零基础进阶篇之注解(二)_第12张图片

以上就是注解相关的知识点,持续更新中,配套视频教程,正在学习Java的同学们一定要关注哦~~

Java零基础进阶视频教程

 

 

你可能感兴趣的:(Java学习者入门必备,Java纯干货,Java学习视频教程)