>  기사  >  Java  >  Java에 대한 심층적인 이해: 주석의 기본 개념

Java에 대한 심층적인 이해: 주석의 기본 개념

巴扎黑
巴扎黑원래의
2017-06-26 09:18:321226검색

주석(Annotation)이란 무엇입니까?

 주석(annotation)은 Java가 메타프로그램의 요소에 대해 모든 정보와 메타데이터(메타데이터)를 연결하기 위해 제공하는 방법 및 방법입니다. Annotation(annotation)은 인터페이스입니다. 프로그램은 리플렉션을 통해 지정된 프로그램 요소의 Annotation 개체를 얻은 다음 Annotation 개체를 통해 주석에 포함된 메타데이터를 얻을 수 있습니다.

 Annotation은 JDK5.0 이상 버전에 도입되었습니다. 문서를 작성하고, 코드의 종속성을 추적하고, 기본적인 컴파일 타임 검사를 수행하는 데에도 사용할 수 있습니다. 어떤 면에서 주석은 수정자처럼 사용되며 패키지, 유형, 생성자, 메서드, 멤버 변수, 매개변수 및 지역 변수의 선언에 적용됩니다. 이 정보는 Annotation의 "name=value" 구조 쌍에 저장됩니다.

 Annotation의 멤버는 Annotation 유형에서 매개변수 없는 메소드 형태로 선언됩니다. 해당 메서드 이름과 반환 값은 멤버의 이름과 유형을 정의합니다. 여기에는 특정 기본 구문이 있습니다. 모든 Annotation 멤버의 기본값을 선언하는 것이 허용됩니다. Annotation은 기본값을 정의하지 않는 Annotation 멤버의 값으로 이름=값 쌍을 사용할 수 있습니다. =value 쌍은 다른 멤버 값의 기본값을 재정의하는 데에도 사용할 수 있습니다. 이는 클래스의 상속 특성과 다소 유사합니다. 상위 클래스의 생성자를 하위 클래스의 기본 생성자로 사용할 수 있지만 하위 클래스에서 재정의할 수도 있습니다.

 주석은 모든 정보를 특정 프로그램 요소(클래스, 메서드, 멤버 변수 등)와 연결하는 데 사용할 수 있습니다. 여기에는 기본 규칙이 있습니다. 주석은 프로그램 코드의 실행에 영향을 미칠 수 없습니다. 주석이 추가되거나 삭제되더라도 코드는 일관되게 실행됩니다. 또한 일부 주석은 Java의 리플렉션 API 메서드를 통해 런타임에 액세스되지만 Java 언어 인터프리터는 작업하는 동안 이러한 주석을 무시합니다. 주석 유형이 코드에서 "작동하지 않는" 것은 Java 가상 머신이 주석을 무시하기 때문입니다. 주석 유형의 정보는 일부 지원 도구를 통해서만 액세스하고 처리할 수 있습니다. 이 기사에서는 표준 Annotation 및 메타 주석 유형을 다룰 것입니다. 이러한 주석 유형과 함께 제공되는 도구는 Java 컴파일러입니다(물론 특별한 방법으로 이를 처리합니다).


메타데이터(metadata)란 무엇입니까:

 메타데이터는 "데이터에 관한 데이터"를 의미하는 메타데이터라는 단어에서 번역됩니다.
 메타데이터에는 많은 기능이 있습니다. 예를 들어 Javadoc 주석을 사용하여 문서를 자동으로 생성했을 수 있습니다. 이는 메타데이터 기능의 한 유형입니다. 일반적으로 메타데이터는 문서 작성, 코드 종속성 추적, 컴파일 시간 형식 확인 수행, 기존 구성 파일 대체에 사용될 수 있습니다. 메타데이터의 역할을 분류하자면 현재 명확한 정의는 없지만 역할에 따라 대략 3가지로 나눌 수 있습니다.
  1. 문서 작성: 코드에서 식별된 메타데이터를 통해 문서 생성
2. 코드 분석: 코드에서 식별된 메타데이터를 통해 코드를 분석합니다.
3. 컴파일 확인: 코드에서 식별된 메타데이터를 통해 컴파일러는 기본적인 컴파일 확인을 구현할 수 있습니다.
Java에서는 메타데이터가 태그 형태로 존재합니다. 메타데이터 태그의 내용은 프로그램 코드의 컴파일 및 실행에 영향을 미치지 않습니다. 다른 파일을 생성하거나 런타임에 실행되는 코드의 설명 정보를 아는 데만 사용됩니다.
 요약하자면:
  먼저 메타데이터는 Java 코드에 태그 형태로 존재합니다.
 둘째, 메타데이터에 설명된 정보는 유형이 안전합니다. 즉, 메타데이터 내의 필드에는 명확한 유형이 있습니다.
  셋째, 메타데이터는 다른 프로그램 구성 요소를 생성하기 위해 컴파일러 이외의 도구를 통한 추가 처리가 필요합니다.
  넷째, 메타데이터는 Java 소스 코드 수준에만 존재할 수도 있고, 컴파일된 클래스 파일 내에 존재할 수도 있습니다.


주석 및 주석 유형:

주석:

주석은 java5.0에서 가져온 새로운 구문을 사용하며 해당 동작은 public 및 final과 같은 수정자와 매우 유사합니다. 각 주석에는 이름과 멤버 수가 0 이상입니다. Annotation의 각 멤버는 name=value 쌍(javabean과 마찬가지로)이라는 이름과 값을 가지며 name=value는 Annotation의 정보를 로드합니다.

 주석 유형:

 주석 유형은 주석의 이름, 유형 및 멤버 기본값을 정의합니다. Annotation 타입은 특별한 Java 인터페이스라고 할 수 있으며, 해당 멤버 변수는 제한되어 있으며 Annotation 타입을 선언할 때 새로운 구문이 필요합니다. Java Reflection API를 통해 Annotation에 액세스하면 반환 값은 Annotation 유형 인터페이스를 구현하는 객체가 됩니다. 이 객체에 액세스하면 해당 Annotation 멤버에 쉽게 액세스할 수 있습니다. 다음 장에서는 java5.0의 java.lang 패키지에 포함된 세 가지 표준 Annotation 유형을 언급합니다.


주석 카테고리:

 Annotation 매개변수 수에 따라 Annotation을 세 가지 카테고리로 나눌 수 있습니다:
  1. Marker Annotation: 멤버 정의가 없는 Annotation 유형을 Mark Annotation이라고 합니다. 이 주석 유형은 정보를 제공하기 위해 자체 존재 여부만 사용합니다. 예를 들어 다음 시스템 주석 @Override; 2. 단일 값 주석
3. 완전한 주석

주석의 용도와 목적에 따라 Annotation을 세 가지 범주로 나눌 수 있습니다.

1. JDK 내장 시스템 주석
2 . 메타 주석
3. 사용자 정의 주석


시스템 내장 표준 주석:

주석의 구문은 @ 기호 사용을 제외하면 기본적으로 Java 고유의 ​​구문과 일치합니다. java.lang에 정의된 JavaSE에 내장된 세 가지 표준 주석:

   @Override: 상위 클래스의 메서드를 덮어쓰기 위해 이 메서드를 수정하는 데 사용됩니다.
   @Deprecated: 사용되지 않는 메서드를 수정하는 데 사용됩니다.
   @SuppressWarnings: 알리는 데 사용됩니다. 특정 컴파일 경고를 억제하는 Java 컴파일러.

 이제 내장된 세 가지 표준 주석의 기능과 사용 시나리오를 살펴보겠습니다.


  @Override, 상위 클래스 메서드 재정의로 제한됨:

   @Override는 주석 메서드로 사용되는 마크 주석 유형입니다. Annotation된 메소드가 상위 클래스의 메소드를 오버로드하여 Assertion 역할을 하는 것을 보여줍니다. 부모 클래스 메서드를 재정의하지 않는 메서드에서 이런 종류의 주석을 사용하면 Java 컴파일러는 컴파일 오류로 경고합니다. 이 주석은 부모 클래스 메서드를 재정의하려고 시도하지만 잘못된 메서드 이름을 작성할 때 종종 작동합니다. 사용법은 매우 간단합니다. 이 주석을 사용할 때 수정된 메서드 앞에 @Override를 추가하면 됩니다. 다음 코드는 @Override를 사용하여 부모 클래스를 재정의하려는 시도의 displayName() 메서드를 수정하는 예이지만 오타가 있습니다. , Deprecated로 표시됨:

 마찬가지로 Deprecated도 마크업 주석입니다. 유형 또는 유형 멤버가 @Deprecated로 수정되면 컴파일러는 주석이 달린 이 프로그램 요소의 사용을 권장하지 않습니다. 그리고 이러한 종류의 수정에는 어느 정도 "연속성"이 있습니다. 상속이나 덮어쓰기를 통해 코드에서 이 오래된 형식이나 멤버를 사용하는 경우 상속되거나 재정의된 형식이나 멤버가 @Deprecated로 선언되지 않더라도 컴파일러는 여전히 다음을 수행해야 합니다. 경고합니다.
javadoc의 @Deprecated 주석 유형과 @deprecated 태그 사이에는 차이가 있다는 점은 주목할 가치가 있습니다. 전자는 Java 컴파일러에서 인식되는 반면 후자는 javadoc 도구에서 인식되어 문서를 생성하는 데 사용됩니다(포함). 프로그램 멤버가 더 이상 사용되지 않는 이유, 금지 또는 대체 방법에 대한 설명). Java에 대한 심층적인 이해: 주석의 기본 개념 Java 5.0에서 Java 컴파일러는 이전 버전과 마찬가지로 @deprecated javadoc 태그를 찾고 이를 사용하여 경고 메시지를 생성합니다. 하지만 이 상황은 후속 버전에서 바뀔 것이므로 이제 @deprecated javadoc 태그 대신 @Deprecated를 사용하여 더 이상 사용되지 않는 메소드를 장식해야 합니다.
 @Deprecated 주석은 다음 프로그램에서 메서드를 만료된 것으로 표시하는 데 사용되며, @deprecated 태그는 메서드를 오래된 것으로 표시하는 데 사용됩니다. 코드는 다음과 같습니다.
Java에 대한 심층적인 이해: 주석의 기본 개념

public class Fruit {

    public void displayName(){
        System.out.println("水果的名字是:*****");
    }
}

class Orange extends Fruit {
    @Override
    public void displayName(){
        System.out.println("水果的名字是:桔子");
    }
}

class Apple extends Fruit {
    @Override
    public void displayname(){
        System.out.println("水果的名字是:苹果");
    }
}

  AppleService类的showTaste() 方法被@Deprecated标注为过时方法,在FruitRun类中使用的时候,编译器会给出该方法已过期,不推荐使用的提示。


SuppressWarnnings,抑制编译器警告:

  @SuppressWarnings 被用于有选择的关闭编译器对类、方法、成员变量、变量初始化的警告。在java5.0,sun提供的javac编译器为我们提供了-Xlint选项来使编译器对合法的程序代码提出警告,此种警告从某种程度上代表了程序错误。例如当我们使用一个generic collection类而又没有提供它的类型时,编译器将提示出"unchecked warning"的警告。通常当这种情况发生时,我们就需要查找引起警告的代码。如果它真的表示错误,我们就需要纠正它。例如如果警告信息表明我们代码中的switch语句没有覆盖所有可能的case,那么我们就应增加一个默认的case来避免这种警告。
  有时我们无法避免这种警告,例如,我们使用必须和非generic的旧代码交互的generic collection类时,我们不能避免这个unchecked warning。此时@SuppressWarning就要派上用场了,在调用的方法前增加@SuppressWarnings修饰,告诉编译器停止对此方法的警告。
  SuppressWarning不是一个标记注解。它有一个类型为String[]的成员,这个成员的值为被禁止的警告名。对于javac编译器来讲,被-Xlint选项有效的警告 名也同样对@SuppressWarings有效,同时编译器忽略掉无法识别的警告名。
  annotation语法允许在annotation名后跟括号,括号中是使用逗号分割的name=value对用于为annotation的成员赋值。实例如下:

Java에 대한 심층적인 이해: 주석의 기본 개념
public class FruitService {
    
    @SuppressWarnings(value={ "rawtypes", "unchecked" })
    public static  List<fruit> getFruitList(){
        List<fruit> fruitList=new ArrayList();
        return fruitList;
    }
    
    @SuppressWarnings({ "rawtypes", "unchecked" })
    public static  List<fruit> getFruit(){
        List<fruit> fruitList=new ArrayList();
        return fruitList;
    }

    @SuppressWarnings("unused")
    public static void main(String[] args){
        List<string> strList=new ArrayList<string>();
    }
}</string></string></fruit></fruit></fruit></fruit>
Java에 대한 심층적인 이해: 주석의 기본 개념

  在这个例子中SuppressWarnings annotation类型只定义了一个单一的成员,所以只有一个简单的value={...}作为name=value对。又由于成员值是一个数组,故使用大括号来声明数组值。注意:我们可以在下面的情况中缩写annotation:当annotation只有单一成员,并成员命名为"value="。这时可以省去"value="。比如将上面方法getFruit()的SuppressWarnings annotation就是缩写的。

   SuppressWarnings注解的常见参数值的简单说明:

    1.deprecation:使用了不赞成使用的类或方法时的警告;
    2.unchecked:执行了未检查的转换时的警告,例如当使用集合时没有用泛型 (Generics) 来指定集合保存的类型; 
    3.fallthrough:当 Switch 程序块直接通往下一种情况而没有 Break 时的警告;
    4.path:在类路径、源文件路径等中有不存在的路径时的警告; 
    5.serial:当在可序列化的类上缺少 serialVersionUID 定义时的警告; 
    6.finally:任何 finally 子句不能正常完成时的警告; 

    7.all:关于以上所有情况的警告。

学习Java的同学注意了!!!
学习过程中遇到什么问题或者想获取学习资源的话,欢迎加入Java学习交流群:159610322   我们一起学Java!

위 내용은 Java에 대한 심층적인 이해: 주석의 기본 개념의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.