Chú thích Java (Có ví dụ)

Trong hướng dẫn này, chúng ta sẽ tìm hiểu chú thích là gì, các chú thích Java khác nhau và cách sử dụng chúng với sự trợ giúp của các ví dụ.

Chú thích Java là siêu dữ liệu (dữ liệu về dữ liệu) cho mã nguồn chương trình của chúng tôi.

Chúng cung cấp thông tin bổ sung về chương trình cho trình biên dịch nhưng không phải là một phần của chính chương trình. Các chú thích này không ảnh hưởng đến việc thực thi chương trình đã biên dịch.

Chú thích bắt đầu bằng @. Cú pháp của nó là:

 @AnnotationName 

Hãy lấy một ví dụ về @Overridechú thích.

Các @Overridequy định cụ thể chú thích rằng phương pháp đó đã được đánh dấu với chú thích này sẽ ghi đè phương thức của lớp cha có cùng tên phương pháp, kiểu trả về, và danh sách tham số.

Nó không bắt buộc phải sử dụng @Overridekhi ghi đè một phương thức. Tuy nhiên, nếu chúng ta sử dụng nó, trình biên dịch sẽ báo lỗi nếu có gì đó sai (chẳng hạn như kiểu tham số sai) trong khi ghi đè phương thức.

Ví dụ 1: Ví dụ về chú thích @Override

 class Animal ( public void displayInfo() ( System.out.println("I am an animal."); ) ) class Dog extends Animal ( @Override public void displayInfo() ( System.out.println("I am a dog."); ) ) class Main ( public static void main(String() args) ( Dog d1 = new Dog(); d1.displayInfo(); ) ) 

Đầu ra

 Tôi là một con chó. 

Trong ví dụ này, phương thức displayInfo()hiện diện trong cả lớp con Animal và lớp con Dog. Khi phương thức này được gọi, phương thức của lớp con được gọi thay vì phương thức trong lớp cha.

Định dạng chú thích

Chú thích cũng có thể bao gồm các phần tử (thành viên / thuộc tính / tham số).

1. Chú thích điểm đánh dấu

Chú thích điểm đánh dấu không chứa thành viên / phần tử. Nó chỉ được sử dụng để đánh dấu một tuyên bố.

Cú pháp của nó là:

 @AnnotationName () 

Vì các chú thích này không chứa phần tử, nên có thể loại trừ dấu ngoặc đơn. Ví dụ,

 @Ghi đè 

2. Chú thích một phần tử

Một chú thích phần tử chỉ chứa một phần tử.

Cú pháp của nó là:

 @AnnotationName (elementName = "elementValue") 

Nếu chỉ có một phần tử thì quy ước đặt tên phần tử đó là giá trị.

 @AnnotationName (value = "elementValue") 

Trong trường hợp này, tên phần tử cũng có thể bị loại trừ. Tên phần tử sẽ có giá trị theo mặc định.

 @AnnotationName ("elementValue") 

3. Nhiều chú thích phần tử

Các chú thích này chứa nhiều phần tử được phân tách bằng dấu phẩy.

Cú pháp của nó là:

 @AnnotationName (element1 = "value1", element2 = "value2") 

Vị trí chú thích

Bất kỳ khai báo nào cũng có thể được đánh dấu bằng chú thích bằng cách đặt nó bên trên khai báo đó. Đối với Java 8, chú thích cũng có thể được đặt trước một kiểu.

1. Khai báo trên

Như đã đề cập ở trên, các chú thích Java có thể được đặt bên trên lớp, phương thức, giao diện, trường và các khai báo phần tử chương trình khác.

Ví dụ 2: Ví dụ về chú thích @SuppressWarnings

 import java.util.*; class Main ( @SuppressWarnings("unchecked") static void wordsList() ( ArrayList wordList = new ArrayList(); // This causes an unchecked warning wordList.add("programiz"); System.out.println("Word list => " + wordList); ) public static void main(String args()) ( wordsList(); ) ) 

Đầu ra

 Danh sách từ => (programmiz) 

Nếu chương trình trên được biên dịch mà không sử dụng @SuppressWarnings("unchecked")chú thích, trình biên dịch sẽ vẫn biên dịch chương trình nhưng nó sẽ đưa ra các cảnh báo như:

Main.java sử dụng các hoạt động không được chọn hoặc không an toàn. Danh sách từ => (programmiz)

Chúng tôi đang nhận được cảnh báo

 Main.java sử dụng các hoạt động không được kiểm tra hoặc không an toàn 

vì câu lệnh sau.

 ArrayList wordList = new ArrayList(); 

This is because we haven't defined the generic type of the array list. We can fix this warning by specifying generics inside angle brackets .

 ArrayList wordList = new ArrayList(); 

2. Type annotations

Before Java 8, annotations could be applied to declarations only. Now, type annotations can be used as well. This means that we can place annotations wherever we use a type.

Constructor invocations

 new @Readonly ArrayList() 

Type definitions

 @NonNull String str; 

This declaration specifies non-null variable str of type String to avoid NullPointerException.

 @NonNull List newList; 

This declaration specifies a non-null list of type String.

 List newList; 

This declaration specifies a list of non-null values of type String.

Type casts

 newStr = (@NonNull String) str; 

extends and implements clause

 class Warning extends @Localized Message 

throws clause

 public String readMethod() throws @Localized IOException 

Type annotations enable Java code to be analyzed better and provide even stronger type checks.

Types of Annotations

1. Predefined annotations

  1. @Deprecated
  2. @Override
  3. @SuppressWarnings
  4. @SafeVarargs
  5. @FunctionalInterface

2. Meta-annotations

  1. @Retention
  2. @Documented
  3. @Target
  4. @Inherited
  5. @Repeatable

3. Custom annotations

These annotation types are described in detail in the Java Annotation Types tutorial.

Use of Annotations

  • Compiler instructions - Annotations can be used for giving instructions to the compiler, detect errors or suppress warnings. The built-in annotations @Deprecated, @Override, @SuppressWarnings are used for these purposes.
  • Compile-time instructions - Compile-time instructions provided by these annotations help the software build tools to generate code, XML files and many more.
  • Hướng dẫn thời gian chạy - Một số chú thích có thể được xác định để cung cấp hướng dẫn cho chương trình trong thời gian chạy. Các chú thích này được truy cập bằng Java Reflection.

thú vị bài viết...