Java注释的完整介绍

时间:2020-02-23 14:33:54  来源:igfitidea点击:

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");
          }
}