Java 中的注解-元注释及示例_第1页
Java 中的注解-元注释及示例_第2页
Java 中的注解-元注释及示例_第3页
Java 中的注解-元注释及示例_第4页
Java 中的注解-元注释及示例_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Java中的注释是应用程序源代码中的一种注释(或文档),用于指示Java编译器执行某些操作。当Java编译器在特定源代码中看到注释时,它知道需要对后面的代码执行一些特殊操作。我们可以注释Java包、类、接口、构造函数、方法、字段、局部变量和参数。例如,我们可以注释一个要重写的方法,以告诉Java编译器验证我们是否确实重写了该方法,而不是重载它。Java注释有助于提供一种系统方法,以Java编译器和JVM可以理解、测试和验证的功能方式为特定代码添加额外信息。注解是一项极其强大的新功能,首次添加到Java5中。Java提供了一些预定义的注释,但我们也可以轻松创建自定义(用户定义)注释,这些注释可以与我们的应用程序代码一起使用以提供一些特殊功能。在本教程中,我们将重点介绍Java语言提供的预定义注释,在下一个教程中,我们将学习用户定义的注释。Java注解语法注释的作用类似于标签,用于为java源代码提供元数据。元数据是提供有关其他数据的信息的数据。Java中的注释始终以@符号开头,并且必须直接放置在被注释的代码之前。声明注解的一般语法如下:@AnnotationType或者,@AnnotationType(elementValuePairs)第一种语法用于声明标记注释类型。例如,@Deprecated是一种标记注释类型。第二种语法用于声明单值或多值类型。例如:@Person(名字="伊万",姓="萨加尔")@阶段(值=1)@阶段1)Java中的标准内置注释(预定义注释)Java5包含三个通用的通用标准内置注释,定义在java.lang.annotation包中,用于向Java编译器发出指令。它们如下:@已弃用@覆盖@SuppressWarnings后来,Java7和Java8在java.lang.annotation包中添加了SafeVarargs和FunctionalInterface注释。让我们通过例子来一一理解。已弃用的注释@Deprecated注释是一种标记注释,可用于将类、方法、字段或其他编程功能标记为已弃用,这意味着它不应再使用。如果您的源代码在程序中使用了不推荐使用的类、方法或字段,Java编译器将在编译时为您生成一条警告消息。此消息通知程序员它在JDK的早期版本中可用,但在未来版本或当前版本中将不再可用。因此,它今天可能有效,但不能保证它会永远有效。

当这种情况发生时,我们需要更新他们的代码并停止使用特定的类、方法、字段或其他编程功能。让我们看一个简单的示例程序,我们将在其中将方法标记为已弃用。程序代码:公共类DeprecatedTest{公共无效x(){System.out.println("你好x"); }@已弃用 公共无效y(){System.out.println("你好,y"); }公共静态无效主(字符串[]args){DeprecatedTestobj=newDeprecatedTest();obj.x();obj.y();}}输出:你好x你好,你我们可以使用@Deprecated注解在顶部标记一个类或接口。下面是一个被标记为已弃用的类的示例。@已弃用公共类DeprecatedClass{无效x(){}}@Override注解@Override注解是一种标记注解,用在方法上方,向Java编译器指示子类方法正在重写超类方法。如果此注释出现在方法上方,并且该方法签名与超类中的方法签名不匹配,则编译器将产生错误,以便我们知道重写有问题。@Override注释对于重写超类中的方法不是必需的。如果有人更改了超类中被重写方法的名称,或者犯了拼写错误,那么子类方法将不再重写它。在这种情况下,如果没有@Override注解,我们将无法发现。因此,最好使用@Override注解来标记方法,以向程序员保证该方法已被重写。使用@Override注解,Java编译器会告诉你子类方法不会覆盖超类方法。

我们来看一个基于Java中@Override注解的简单示例程序。程序代码:公共A类{无效m1(){System.out.println("A-m1"); }}公共类B扩展了A{无效m1(inta){System.out.println("B-m1");}公共静态无效主(字符串[]args){Bb=新B();b.m1(20);}}输出:B-m1在此程序中,子类中的m1()方法不会覆盖超类中存在的方法,因为它具有不同的方法签名。使用@Override注解,我们可以避免这种错误。让我们看看下面的代码。程序代码:公共A类{无效m1(){System.out.println("A-m1"); }}公共类B扩展了A{@覆盖 无效m1(inta){System.out.println("B-m1");}公共静态无效主(字符串[]args){Bb=新B();b.m1(20);}}输出:线程“main”java.lang.Error中出现异常:未解决的编译问题: 类型B的方法m1(int)必须重写或实现超类型方法这次,Java编译器将产生编译时错误,您将观察到子类中的m1()方法没有覆盖超类中的方法。因此,很明显,每当您想要重写某个方法时,请使用@Override注解标记该方法。@Suppress警告注释@SuppressWarnings注解用于抑制编译器生成的警告。换句话说,该注释用于关闭不适当的编译器警告。例如,如果方法调用已弃用的方法,或进行不安全的类型转换,编译器可能会生成有关它的警告消息。我们可以通过使用@SuppressWarnings注释来注释包含代码的方法来抑制此警告消息。此@SuppressWarnings注释可以应用于类型、构造函数、方法、字段、参数和局部变量。让我们看一个基于Java@SuppressWarnings注释的简单示例程序。程序代码:导入java.util.ArrayList;公共类SupressWarningsTest{@SuppressWarnings({"未选中","rawtypes"}) 公共静态无效主(字符串[]args){ArrayListarList=newArrayList();arList.add("橙色");arList.add("粉红色");arList.add("红色");arList.add("绿色");arList.add("蓝色");for(对象obj:arList){ System.out.println(obj);}}}输出:橙子粉色的红色的绿色的蓝色的您可以注意到编译时没有警告。如果删除@SuppressWarnings({“unchecked”,“rawtypes”})注释,它将在编译时显示警告,因为我们使用的是非泛型集合。@FunctionalInterface注解java中的函数式接口是一种只能声明一个抽象方法的接口。@FunctionalInterface是一种标记注释类型,用于验证编译器该接口具有唯一的抽象方法。如果一个接口没有用这个注解来注解就不是函数式接口,编译器会产生一个编译时错误。它不能与类、注释类型和枚举一起使用。让我们举一个简单的例子,其中接口Person使用@FunctionalInterface注释。@功能接口公共接口人{无效播放();//只有一个抽象方法。}以下Student接口的声明使用了@FunctionalInterface注释,该注释将生成编译时错误,因为Student接口定义了两个抽象方法,因此它不是函数式接口。@功能接口公共接口学生{无效播放();无效读取();}注意:如果一个接口只有一个抽象方法,那么无论是否使用@FunctionalInterface注解,它始终是一个函数式接口。@SafeVarargs注解当我们将@SafeVarargs注解与方法或构造函数一起使用时,方法或构造函数不会对其varargs参数执行潜在不安全或有害的操作。当此注释与方法或构造函数一起使用时,与可变参数使用相关的未经检查的警告将被抑制。Java中的标准元注释用于注释注解的注解在java中称为元注解。换句话说,应用于其他注释的注释称为元注释。有四种类型的元注释可用于注释注释。它们如下:记录在案遗传保留目标可重复本国的所有这四个元注释都在java.lang.annotation包中声明。让我们集中讨论这四个元注释。@记录注释@Documented是一种标记元注释,用于注释注释类型的声明。如果使用@Documented注释声明注释类型,则Javadoc工具将为注释类型的所有实例生成文档。例如,@Override注解不能与@Documented注解一起注解。如果我们使用Javadoc工具为其方法用@Override注解的类Test生成文档,我们将不会在生成的文档中看到任何@Override标记。让我们举一个简单的例子。在下面的代码中,Test类使用@Override注解来注解toString方法。封装注释程序;公开课测试{@覆盖公共字符串toString(){返回“测试”;}}另一方面,@Deprecated注释类型可以使用@Documented注释进行注释。上述程序源码1中,DeprecatedTest类中的y()方法使用@Deprecated注解。现在,如果我们使用Javadoc工具生成DeprecatedTest类的文档,文档中y()方法的详细信息也会包含@Deprecated,如下所示:y@已弃用公共无效y()@继承注解@Inherited注解是一种元标记注解,用于继承注解类型的实例。例如,如果我们使用Inherited元注释来注释一个类,则该注释将被该注释类的任何子类继承。如果我们尝试注释除类声明之外的任何类成员,它不会产生任何效果。让我们考虑两个注释类型声明:Test1和Test2。此处,Test1未使用Inherited元注释进行注释,而Test3则使用Inherited元注释进行注释。公共@接口测试1{intid();}@遗传公共@接口测试2{intid();}让我们考虑两个类A和B,其中类B继承类A。@测试1(id=100)@Test2(id=200)公共A类{//这里是A类的代码。}//B类继承A类的Test2(id=200)注解。公共类B扩展A{//这里是B类的代码。}在上面的代码片段中,类B继承了类A的@Test2(id=200)注解,因为Test2注解类型是使用Inherited元注解进行注解的。B类不继承@Test1(id=100)注释,因为Test1注释类型未使用Inherited元注释进行注释。@Retation注解@Retation注解是一种元注解类型,用于指定Java应如何保留注解类型的实例。它也称为注释类型的保留策略。在Java中,注释可以保留在以下三个级别:仅源代码仅类文件(默认)类文件和运行时(简称运行时)如果注释类型具有“仅源代码”保留策略,则注释类型的实例在编译为类文件时将被Java编译器丢弃。如果保留策略是“仅类文件”,则注释类型的实例将保留在类文件中,但JVM在运行时无法读取它们。如果保留策略是“类文件和运行时”,则注释的实例将保留在类文件中,并且可以在运行时由JVM读取。例如,SuppressWarnings注释类型的声明由@Retention注释,值为SOURCE。@Retention(值=来源)公共@interfaceSuppressWarnings如果我们不在注释类型上声明保留元注释,则其保留策略默认为仅类文件。这意味着我们将无法在运行时由JVM读取这些注释。@Target注解@Target注解是一种元注解,用于对注解类型进行注解,以指定注解类型可以使用的上下文。它只有一个名为value的元素。Target的值可以是java.lang.annotation.ElementType枚举的成员之一:a)

ANNOTATION_TYPE:该注释可用于注释另一个注释类型声明。b)

CONSTRUCTOR:该注释可用于注释构造函数声明。c)

FIELD:注释可用于注释字段声明和枚举常量。d)

LOCAL_VARIABLE:该注释可用于注释局部变量声明。e)

METHOD:注释可用于注释方法声明。f)

PACKAGE:该注释可用于注释包声明。g)

PARAMETER:可用于注释参数声明。h)

TYPE:注释可用于注释注释类型、类、接口和枚举声明。例如,Override注解类型声明使用@Target注解进行注解,这将使@Override注解仅适用于方法声明。@目标(值=方法)//在Target注释中声明多个值。@Target(值={类型、字段、方法、参数、构造函数、LOCAL_VARIABLE})@Repeatable注解大多数注解只能对类、方法、字段等应用一次。在某些情况下,我们需要多次应用注解。但在Java8之前,不允许重复一个注解超过一次。为了解决这个问题,Java8添加了@Repeatable注解。Java8版本中添加的@Repeatable注解是元注解类型,用于在必须重复使用的情况下对注解类型进行注解。可重复注释只有一个名为value的元素,其类型将是另一种注释类型

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论