개요
Java는 Java 주석으로도 알려진 버전 1.5에서 주석을 도입했습니다. 주석은 소스 코드에서 직접 사용할 수있는 일종의 구문 메타 데이터이며 클래스/메소드/변수/매개 변수/패키지 이름 등이 주석을 달 수 있습니다. Javadoc 태그와 달리 컴파일러는 클래스 파일을 생성 할 때 주석 코드를 유지할 수 있습니다. 동시에, 런타임 프로세스 중에 주석을 사용하기 위해 Java 가상 머신은 주석을 유지하여 주석에 대한 관련 정보를 반사를 통해 얻을 수 있습니다.
내장 주석
실제로, 우리는 종종 @override, @deprecated 등과 같은 주석을 만난다. 먼저 Java의 기본 내장 주석이 무엇인지 살펴 보겠습니다.
• Java 코드에 작용하는 주석
◦@오버라이드 메소드가 다시 쓰기 메소드인지 확인합니다. 이 메소드가 상위 클래스 또는 구현 된 인터페이스에서 찾을 수없는 경우 컴파일 오류가 발생합니다.
◦ 메소드 나 클래스가 폐기 된@이상한 점수. 클래스 또는 메소드가 사용되면 컴파일 프로세스가 귀하에게 경고합니다.
◦@suppresswarnings는 컴파일러에게 주석이 달린 매개 변수에 대한 경고를 무시하도록 알립니다.
◦@safevarargs 일반 매개 변수를 포함하는 통화 방법 또는 생성자에 대한 경고를 무시하고 1.7은 주석이 추가되었습니다.
◦@functionalinterface는 선언 된 인터페이스가 기능 인터페이스로 사용될 것임을 나타냅니다. 1.8은 주석을 추가했습니다
• 다른 주석에 대한 주석은 메타 주석 (메타 주석)이라고합니다.
◦@보유 주석이 달린 주석이 사용되는시기를 지정합니다 (즉, 주석이 유지 될 때)
■ 소스 코드의 유지 및 컴파일 중에 폐기 (rendentionPolicy.runtime)
■ 주석이 컴파일하는 동안 클래스 파일에 저장되며 클래스 파일이로드 될 때 무시됩니다 (retentionpolicy.class)
■ 주석은 클래스 파일이로드 될 때 읽습니다. 즉, 작동 중에 주석이 있습니다. 주석은 반사를 통해 얻을 수 있습니다 (retentionpolicy.runtime)
◦@문서화 된 것은 Javadoc을 생성 할 때 주석이 달린 주석이 Javadoc 문서에 기록 될 것임을 나타냅니다.
◦@target은 주석이 붙은 주석의 범위를 지정합니다. intormated annotation의 범위를 지정 ■ elementType.type : 클래스, 인터페이스 (주석 유형 포함) 또는 열거 선언을 설명하는 데 사용 ■ elementType.field : 도메인을 설명하는 데 사용 ■ elementType.Method : 방법을 설명하는 데 사용됩니다. 생성자 ■ ElementType.local_variable : 로컬 변수를 설명하는 데 사용 ■ elementType.Annotation_type : 주석을 설명하는 데 사용 ■ elementType.package : 패키지를 설명하는 데 사용됩니다.
◦ @상속은 주석이 상속되었음을 나타냅니다. 즉, @inherited에 의해 수정 된 주석 유형이 클래스에 사용되면 주석이 수정 된 클래스의 서브 클래스에도 작동합니다.
◦@반복 가능한 것은 주석이 달린 주석이 동일한 객체에 여러 번 적용될 수 있음을 나타냅니다. 1.9는 주석을 추가했습니다
맞춤형 주석
나는 위의 많은 주석을 언급했으며 모두가 메타 주석에 중점을 둡니다. 주석을 맞춤화 할 때 일반적으로 메타 주석을 사용하여 도움을줍니다. 사용자 정의 주석 형식은 public @interface 주석 이름 {정의 body}입니다. @interface 사용자 정의 주석을 사용하면 java.lang.annotation.annotation 인터페이스가 자동으로 상속됩니다. 주석을 사용자 정의 할 때 다른 주석 또는 인터페이스를 상속받을 수 없습니다. 주석으로 선언 된 방법은 실제로 주석 매개 변수입니다. 메소드의 이름은 매개 변수의 이름이며 리턴 값 유형은 매개 변수의 유형입니다. 매개 변수의 기본값은 기본값을 통해 선언 할 수 있습니다.
사용자 정의 주석은 간단합니다. @interface를 사용하여 다음과 같이 주석을 정의하십시오.
@retention (rendentionpolicy.runtime) @target (elementtype.type) @documentedPublic @interface classInfo {string author () 기본 "Wang"; 문자열 날짜 (); 문자열 댓글 ();} ClassInfo라는 사용자 정의 주석. @retention에 따르면,이 주석이 항상 존재한다는 것을 알 수 있습니다. 즉,이 주석은 프로그램이 실행될 때 여전히 유효합니다. @target (elementtype.type)은 classInfo 주석이 클래스, 인터페이스 또는 열거 선언에서 작용 함을 의미합니다. @documented
지침 ClassInfo 정보는 Javadoc 문서에 작성할 수 있습니다.
사용자 정의 주석의 주석 매개 변수를 살펴 보겠습니다. 세 가지 주석 매개 변수가 있습니다. 주석 매개 변수는 기본적으로 작성자 주석 매개 변수, 기본값은 Wang이고 다른 두 매개 변수에는 기본값이 없습니다.
다른 맞춤 주석을 살펴 보겠습니다.
@retention (rendentionpolicy.runtime) @target (elementtype.method) public @interface methodInfo {String description () 기본 "No description"; 문자열 날짜 ();}이 사용자 정의 주석은 메소드에 작용 하며이 주석은 프로그램이 실행될 때도 존재합니다. 두 개의 주석 매개 변수가 있습니다.
매개 변수 정의 (메소드 정의)에 주석을 달으려면 두 개의 액세스 권한 수정 자 공개 또는 기본값 만 사용할 수 있습니다. 매개 변수 유형은 다음 유형을 지원합니다.
• 8 개의 기본 데이터 유형 (바이트, int, 짧은, 길고, 플로트, 이중, 숯, 부울)
• 문자열 유형
• 클래스 유형
• 열렬한 유형
• 주석 유형
• 위의 모든 유형의 배열
주석 사용
위의 두 가지 주석 외에도 필드 스코프가있는 주석이 추가되었습니다.
@retention (rendentionpolicy.runtime) @target (elementtype.field) public @interface fieldInfo {String type (); 문자열 이름 ();}사용자 정의 주석으로 기본값이 선언되지 않으면 사용자 정의 주석을 사용할 때 이러한 매개 변수를 할당해야합니다. 그렇지 않으면 컴파일러에 오류가보고됩니다.
주석이 사용한 코드를 살펴보십시오.
@classinfo (author = "wang", date = "2016/9/13", comment = "Annotation Demo") public class annotationdemo {@fieldInfo (type = "public", names = "Firstfield") public int firstfield; @FieldInfo (type = "private", name = "secondfield") private String Secondfield; @MethodInfo (description = "AnnotationDemo의 메소드", 이름 = "FirstMethod") public void firstMethod (String value) {System.out.printf ( "첫 번째 메소드 관련"); } @MethodInfo (description = "AnnotationDemo의 메소드", name = "secrmethod") private void secrmethod () {system.out.printf ( "첫 번째 메소드 관련"); }}주석 정보를 얻으십시오
주석 정보를 얻으려면 먼저 프로그램 실행 중에 주석이 존재하는지 확인해야합니다. 따라서 일반적으로 사용자 정의 주석에 @retention (rendentionpolicy.runtime) 메타 주석을 추가합니다. 이런 식으로 프로그램이 진행되는 동안 반사를 통해 주석 정보를 얻을 수 있습니다. 반성에 대한 지침은이 기사를 볼 수 있습니다.
public class annotationTest {public static void main (String [] args) {resolveClassAnnotationInfo (AnnotationDemo.class); ResolveFieldAnnotationInfo (AnnotationDemo.class); ResolveMethodantationInfo (AnnotationDemo.class); } private static void resolveClassAnnotationInfo (class <?> clz) {//이 클래스가 classInfo annotation if (clz.isannotationPresent (classInfo.class)) {classInfo classInfo = (classInfo) clz.getAntation (classInfo.class); System.out.println (classInfo.author () + "" + classInfo.comments () + "" + classInfo.date ()); }} private static void resolvefieldannotationInfo (class <?> clz) {field [] fields = clz.getDeclaredFields (); for (field field : fields) {if (field.isAnnotationPresent (FieldInfo.class)) {FieldInfo FieldInfo = (FieldInfo) field.getAntOntation (FieldInfo.class); System.out.println (FieldInfo.type () + "" + FieldInfo.name ()); }}} private static void resolveMethodannotationInfo (class <?> clz) {method [] method = clz.getDeclaredMethods (); for (method method : methods) {if (method.isAnnotationPresent (methodInfo.class)) {MethodInfo methodInfo = (methodInfo) method.getAnnotation (methodInfo.class); System.out.println (MethodInfo.name () + "" + MethodInfo.Description ()); }}}}클래스에서 필드/방법을 얻기위한 반사와 GetAnnotation () 또는 getAnnotations ()를 통해 관련 주석을 얻습니다. 특정 주석을 얻어 특정 정보를 얻을 수 있습니다.
실행 결과의 출력은 다음과 같습니다.
그림 1 작동 결과 다이어그램
요약
Java의 초보자와 특정 경험이있는 Java 개발자에게는 Java 주석에 노출 될 수 있습니다. 실제로, 주석은 거의 사용되지 않지만 종종 코드에서 볼 수 있습니다. 이 기사는 주석에 대한 간단한 소개이며, 적어도 코드 수준에서 읽는 것은 스트레스가 없습니다.
위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.