Java注释的完整介绍
Java中的注释是一种特殊的Java构造,用作装饰性语法元数据,用于源代码中使用的类元素,以在代码转换期间提供特殊信息以指导java解释器。
Java中的注释是什么?
注释用于表示与源代码中使用的类,接口,方法或者字段相关的语法元数据,以及Java解释器和JVM使用的一些添加信息。
在本文中,我们将讨论以下概念。
为什么我们需要注释?
编译指令
内置注释(例如@ Override,@ Deprecated和@SuppressWarnings)为解释器提供了有关代码执行的信息。
例如,@ Override用于指示解释器注释的方法已被覆盖。
建立时间指示
批注向解释器提供构建时/编译时指令,软件构建工具使用这些指令来生成代码,Pom.XML文件等。
运行时说明
可以在运行时定义注释,以便可以在运行时访问它们并向程序提供指令。
现在,让我们讨论它们的类型。
注释类型
注释通常分为以下三种类型:
标记注释
声明标记注释是为了标记的目的,该标记描述了标记的存在。
它们中不包含任何成员,这使它们保持为空。
@Override是标记注释的示例。
package Types; @interface MarkerTypeAnnotation{}
单个注释
该名称本身指定"单个注释"旨在其中包含单个成员。
速记方法用于将值指定为在"单个注释"中声明的成员。
package Types; @interface SingleTypeAnnotation{ int member() default 0; }
完整注释
完整或者多个注释与单个注释相似,但是它们可以包含多个成员/名称,值,对。
package Types; @interface FullAnnotationType{ int member1() default 1; String member2() default ""; String member3() default "abc"; }
Java还提供了一些内置注释。
Java内置注释
保留注释
保留注释旨在指示带有注释类型的特定注释要保留多长时间。
以下是保留注释的示例
package Retention; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; @Retention(RetentionPolicy.RUNTIME) public @interface theitroadAnnotation { String MethodName(); String Description(); } class RetentnionTest{ @theitroadAnnotation(MethodName = "Retention Annotation test", Description = "testing annotations") public void TestMethod(){ } }
弃用的注释
不建议使用的批注用于通知编译器特定的方法,类或者字段不重要,并且它指示声明已过时。
package Deprecated; public class Deprecated { @Deprecated public void Display() { System.out.println("Deprecated Annotation test Method()"); } public static void main(String args[]) { Deprecated Dep = new Deprecated(); Dep.Display(); } }
替代注释
它是标记类型的注释。
重写注释旨在确保超类方法被重写,并且不被重载。
用@Override注释的方法应该覆盖超类中的方法,否则将引发编译时错误。
package Override; class Parent { public void Display() { System.out.println("Parent Class Method exrecuting()"); } public static void main(String args[]) { Parent P1 = new Child(); P1.Display(); } } class Child extends Parent { @Override public void Display() { System.out.println("Child Class Method exrecuting()"); } }
禁止警告注释
抑制警告注释用于在程序执行期间消除/抑制解释器警告。
禁止警告注释可以应用于任何类型的声明。
以下是此类注释的示例。
package SuppressWarning; class DeprecatedTest { @Deprecated public void Display() { System.out.println("Deprecated test display()"); } } public class SuppressWarning{ @SuppressWarnings({"checked", "deprecation"}) public static void main(String args[]) { DeprecatedTest d1 = new DeprecatedTest(); d1.Display(); } }
继承的注释
默认情况下,Java中的注释不会继承到子类。
因此,"继承的注释"标记了要继承给子类的注释。
以下是继承注释的示例
package Inherited; public @interface MyAnnotation { }
package Inherited; public @interface MyInheritedAnnotation { }
package Inherited; @MyAnnotation @MyInheritedAnnotation public class BaseClass { }
package Inherited; public class SubClass extends BaseClass { }
package Inherited; public class ExampleMain { public static void main(String[] args) { MyAnnotation myannotation = SubClass.class.getAnnotation(MyAnnotation.class); System.out.println(myannotation); MyInheritedAnnotation myannotation2 = SubClass.class.getAnnotation(MyInheritedAnnotation.class); System.out.println(myannotation2); } }
目标注释
目标标签用于指定使用的注释类型。
注释库声明了许多常量来指定需要应用注释的元素的类型,例如TYPE,METHOD,FIELD等。
我们可以从java.lang.annotation访问Target标记。
元素类型
|||
| --- - | --- |
|元素类型|要应用的注释的位置|
|型号类,界面或者枚举|
|领域|领域|
|方法|方法|
|构造函数|构造函数|
| local_variable |局部变量|
| annotation_type |注释类型|
|参数|参数|
package Target; public @interface CustomAnnotation { } import java.lang.annotation.ElementType; import java.lang.annotation.Target; @Target({ElementType.METHOD}) public @interface MyCustomAnnotation { } public class target { @CustomAnnotation public void myMethod(){ System.out.println("Hello World"); } }
记录的注释
它是标记类型的注释,用于与记录注释的工具进行通信。
默认情况下,Javadoc注释不包含注释。
在代码中使用Documented注释使Javadoc可以处理注释类型的信息并将其包括在结果文档中。
package Documented; import java.lang.annotation.Documented; @Documented public @interface DocumentAnnotation { class AddNumbers{ public static void main(String args[]){ int x=10,y=20,z; z = x + y; System.out.println("Sum of the integers = " + z); } } }
Java中的自定义注释
Java自定义批注是易于创建和使用的用户定义批注。
@Interface元素用于声明注释。
自定义注释的示例如下。
package Custom; import java.lang.annotation.Documented; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; @Documented @Retention(RetentionPolicy.RUNTIME) @ interface TestAnnotation { String Developer() default "theitroad"; String Expirydate(); } public class Custom { @TestAnnotation(Developer="Rajesh", Expirydate="01-Aug-2026") void function1() { System.out.println("Testing Annotation method 1"); } @TestAnnotation(Developer="Anil", Expirydate="01-Oct-2025") void function2() { System.out.println("Test Annotation method 2"); } public static void main(String args[]) { System.out.println("Customized Annotations Example"); } }