Java中的注释@

作者: Arvin Chen 分类: Java 来源: Break易站(www.breakyizhan.com)

注释用于提供有关程序的补充信息。

  • 注释以' @ ' 开头。
  • 注释不会更改已编译程序的操作。
  • 注释有助于将元数据(信息)与程序元素(例如实例变量,构造函数,方法,类等)相关联。
  • 注释不是纯注释,因为它们可以改变编译器处理程序的方式。例如,参见下面的代码。
    /* Java program to demonstrate that annotations are
       not barely comments (This program throws compiler
       error because we have mentioned override, but not
       overridden, we haver overloaded display) */
    class Base
    {
         public void display()
         {
             System.out.println("Base display()");
         }
    }
    class Derived extends Base
    {
         @Override
         public void display(int x)
         {
             System.out.println("Derived display(int )"); 
         }
      
         public static void main(String args[])
         {
             Derived obj = new Derived();
             obj.display();
         }
    }
    

    输出:

    10: error: method does not override or implement
        a method from a supertype

    如果我们删除参数(int x)或删除@override,程序编译正常。

Java注释的类别

注释分为3类: -
1.标记注释:
唯一的目的是标记声明。这些注释不包含任何成员,也不包含任何数据。因此,它作为注释的存在就足够了。由于标记界面不包含成员,因此只需确定它是否存在就足够了。@Override是Marker Annotation的一个例子。

示例: -  @TestAnnotation()

2.单值注释:
这些注释仅包含一个成员,并允许指定成员值的简写形式。我们只需要在应用注释时指定该成员的值,而不需要指定成员的名称。但是,为了使用此简写,成员的名称必须是值。

示例: -  @TestAnnotation(“testing”);

3.完整注释:
这些注释由多个数据成员/名称,值,对组成。

示例: -  @TestAnnotation(owner =“Rahul”,value =“Class Geeks”)

 

Java预定义/标准注释

Java定义了七个内置注释。

  • 从java.lang.annotation中: @Retention@Documented@Target@Inherited
  • java.lang中包含三个: @Deprecated,@ Override@SuppressWarnings

@Deprecated Annotation

  • 它是标记注释。它表明声明已过时,已被更新的表单取代。
  • 不推荐使用元素时,应使用Javadoc @deprecated标记
  • @deprecated标记用于文档,@ Deprecated标注用于运行时反射。
  • 当两者一起使用时,@ deprecated标签的优先级高于@Deprecated注释。
public class DeprecatedTest
{
    @Deprecated
    public void Display()
    {
        System.out.println("Deprecatedtest display()"); 
    }
 
    public static void main(String args[])
    {
        DeprecatedTest d1 = new DeprecatedTest();
        d1.Display();
    }
}

输出:

Deprecatedtest display()

@Override Annotation
它是一个只能在方法上使用的标记注释。使用@Override注释的方法必须覆盖超类中的方法。如果没有,将导致编译时错误。它用于确保实际覆盖超类方法,而不是简单地重载。

例:-

class Base
{
     public void Display()
     {
         System.out.println("Base display()");
     }
      
     public static void main(String args[])
     {
         Base t1 = new Derived();
         t1.Display();
     }     
}
class Derived extends Base
{
     @Override
     public void Display()
     {
         System.out.println("Derived display()"); 
     }
}

输出:

Derived display()

@SuppressWarnings
用于通知编译器禁止指定的编译器警告。要禁止的警告由字符串形式的名称指定。这种类型的注释可以应用于任何类型的声明。

Java将警告分为两类。它们是:deprecation unchecked。当遗留代码与使用泛型的代码接口时,会生成任何未经检查的警告。

class DeprecatedTest
{
    @Deprecated
    public void Display()
    {
        System.out.println("Deprecatedtest display()"); 
    }
}
 
public class SuppressWarningTest
{
    // If we comment below annotation, program generates
    // warning
    @SuppressWarnings({"checked", "deprecation"})
    public static void main(String args[])
    {
        DeprecatedTest d1 = new DeprecatedTest();
        d1.Display();
    }
}

输出:

Deprecatedtest display()

@Documented Annotations
它是一个标记接口,告诉工具要记录注释。Javadoc注释不包含注释。在代码中使用@Documented注释使Javadoc等工具能够处理它并在生成的文档中包含注释类型信息。

@Target
它被设计为仅用作另一个注释的注释。@Target接受一个参数,该参数必须是ElementType枚举中的常量。此参数指定可以应用注释的声明类型。下面显示常量以及它们对应的声明类型。

目标常数 注释可以应用于
ANNOTATION_TYPE 另一个注释
CONSTRUCTOR 构造函数
FIELD 领域
LOCAL_VARIABLE 局部变量
METHOD 方法
PACKAGE
PARAMETER 参数
TYPE 类,接口或枚举

我们可以在@Target注释中指定这些值中的一个或多个。要指定多个值,我们必须在以大括号分隔的列表中指定它们。例如,要指定注释仅适用于字段和局部变量,可以使用此@Target注释:@Target({ElementType.FIELD,ElementType.LOCAL_VARIABLE})@Retention Annotation它确定注释的位置和持续时间。@Retention注释可以具有的3个值:

  • SOURCE:注释将保留在源级别,并由编译器忽略。
  • CLASS:注释将在编译时保留,并由JVM忽略。
  • RUNTIME:这些将在运行时保留。

@Inherited
@Inherited是一个标记注释,只能用于注释声明。它仅影响将在类声明上使用的注释。@Inherited使超类的注释被子类继承。因此,当对子类进行特定注释的请求时,如果子类中不存在该注释,则检查其超类。如果该批注存在于超类中,并且如果使用@Inherited进行批注,则将返回该批注。

 

Java用户定义/自定义注释

用户定义的注释可用于注释程序元素,即变量,构造函数,方法等。这些注释可以在声明元素(构造函数,方法,类等)之前应用。

语法: -

[Access Specifier] @interface<AnnotationName>
{         
   DataType <Method Name>() [default value];
}
  • AnnotationName是一个标识符。
  • 参数不应与方法声明相关联,并且throws子句不应与方法声明一起使用。
  • 参数不具有空值,但可以具有默认值。
  • 默认值是可选的。
  • 方法的返回类型应该是primitive,enum,string,class name或primitive,enum,string或class name类型的数组。
package source;
// A Java program to demonstrate user defined annotations
import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
 
// user-defined annotation
@Documented
@Retention(RetentionPolicy.RUNTIME)
@ interface TestAnnotation
{
    String Developer() default "Rahul"; 
    String Expirydate();
} // will be retained at runtime
 
// Driver class that uses @TestAnnotation
public class Test
{
    @TestAnnotation(Developer="Rahul", Expirydate="01-10-2020") 
    void fun1()
    {
        System.out.println("Test method 1");
    }
 
    @TestAnnotation(Developer="Anil", Expirydate="01-10-2021")
    void fun2()
    {
        System.out.println("Test method 2");
    }
     
    public static void main(String args[])
    {
        System.out.println("Hello");
    }
}

输出:

Hello
  •   本文标题:Java中的注释@ - Break易站
    转载请保留页面地址:https://www.breakyizhan.com/java/6490.html
    扫描二维码添加微信 
  • ,领取淘宝优惠券,淘宝购物更优惠。现在添加微信,还可以领取机械键盘优惠券!添加微信后,分享淘宝选中的机械键盘给淘宝机器人即可领取!
    支持我们,就用微信淘宝!

    发表笔记

    电子邮件地址不会被公开。 必填项已用*标注

    更多阅读