Chú thích Java


114

Mục đích của chú thích trong Java là gì? Tôi có ý tưởng mờ nhạt này về chúng như ở đâu đó giữa nhận xét và mã thực tế. Chúng có ảnh hưởng đến chương trình lúc chạy không?

Cách sử dụng điển hình của họ là gì?

Chúng có phải là duy nhất cho Java không? Có tương đương C ++ không?


9
Bạn có thể làm một số điều thực sự độc ác với chú thích. Ví dụ: nếu bạn biết Spring Framework và chú thích @Transactional của chúng bắt đầu giao dịch trước khi gọi phương thức và khôi phục về ngoại lệ / lỗi và cam kết giao dịch thành công. Nó hoàn toàn hỗ trợ nguyên tắc SOC (phân tách mối quan tâm). Rất sạch sẽ ! Quy tắc Java! :-)

1
Đó có vẻ như là 3 câu hỏi đối với tôi. Điều thứ hai tự nó là quá rộng.
Raedwald

Tất cả các chú thích theo cú pháp trông giống như giao diện. Vì vậy, làm thế nào trình biên dịch hoặc JVM biết mục đích của nó? Giả sử nếu chúng ta sử dụng @ Override -> thực hiện kiểm tra xem phương thức có được ghi đè đúng cách hay không @ Transactional, như đã giải thích ở trên, nó thực hiện những thứ liên quan đến giao dịch. Đối với tất cả các chú thích này, chúng ta có thể tìm định nghĩa / logic ở đâu?
Paramesh Korrakuti

Câu trả lời:


80

Chú thích chủ yếu được sử dụng bởi mã đang kiểm tra mã khác. Chúng thường được sử dụng để sửa đổi (tức là trang trí hoặc bao bọc) các lớp hiện có tại thời điểm chạy để thay đổi hành vi của chúng. Các khung công tác như JUnitHibernate sử dụng chú thích để giảm thiểu số lượng mã bạn cần tự viết để sử dụng các khung công tác.

Oracle đã giải thích tốt về khái niệm và ý nghĩa của nó trong Java trên trang web của họ.


17

Ngoài ra, chúng có phải là duy nhất cho Java, có tương đương với C ++ không?

Không, nhưng VB và C # có các thuộc tính giống nhau.

Công dụng của chúng khá đa dạng. Một ví dụ điển hình của Java, @Overridekhông ảnh hưởng đến mã nhưng nó có thể được trình biên dịch sử dụng để tạo cảnh báo (hoặc lỗi) nếu phương thức được trang trí không thực sự ghi đè phương thức khác. Tương tự, các phương pháp có thể được đánh dấu là lỗi thời.

Sau đó, có sự phản chiếu. Khi bạn phản ánh một loại lớp trong mã của mình, bạn có thể truy cập các thuộc tính và hành động theo thông tin được tìm thấy ở đó. Tôi không biết bất kỳ ví dụ nào trong Java nhưng trong .NET, điều này được trình biên dịch sử dụng để tạo (de) thông tin tuần tự hóa cho các lớp, xác định bố cục bộ nhớ của cấu trúc và khai báo nhập hàm từ các thư viện kế thừa (trong số những thứ khác). Họ cũng kiểm soát cách hoạt động của trình thiết kế biểu mẫu IDE.

/ EDIT: Các thuộc tính trên các lớp có thể so sánh với các giao diện thẻ (như Serializable trong Java). Tuy nhiên, hướng dẫn mã hóa .NET nói rằng không sử dụng giao diện thẻ. Ngoài ra, chúng chỉ hoạt động ở cấp độ lớp học, không phải ở cấp độ phương pháp.


13

Anders đưa ra một bản tóm tắt tốt và đây là một ví dụ về chú thích JUnit

@Test(expected=IOException.class)
public void flatfileMissing() throws IOException {
    readFlatFile("testfiles"+separator+"flatfile_doesnotexist.dat");
}

Ở đây, @Testchú thích cho JUnit biết rằng flatfileMissingphương thức là một bài kiểm tra cần được thực thi và kết quả mong đợi là một lần ném IOException. Do đó, khi bạn chạy các bài kiểm tra của mình, phương thức này sẽ được gọi và bài kiểm tra sẽ đạt hay không thành công dựa trên việc một lệnh có IOExceptionđược ném ra hay không.


7

Java cũng có Công cụ xử lý chú thích (apt), nơi bạn không chỉ tạo chú thích mà còn quyết định cách thức hoạt động của các chú thích này trên mã nguồn.

Đây là phần giới thiệu.



1

Theo định nghĩa nghĩa đen, một chú thích thêm ghi chú vào một phần tử. Tương tự như vậy, chú thích Java là các thẻ mà chúng tôi chèn vào mã nguồn để cung cấp thêm thông tin về mã. Chú thích Java liên kết thông tin với phần tử chương trình được chú thích. Bên cạnh chú thích Java Các chương trình Java có rất nhiều tài liệu không chính thức thường được chứa trong các chú thích trong tệp mã nguồn. Tuy nhiên, chú thích Java khác với chú thích, chúng chú thích trực tiếp các phần tử chương trình bằng cách sử dụng các loại chú thích để mô tả hình thức của chú thích. Các chú thích Java trình bày thông tin theo cách chuẩn và có cấu trúc để nó có thể được sử dụng một cách thuận lợi bằng các công cụ xử lý.

Để đọc chi tiết, có một hướng dẫn hay về Java Annotations



0

Chú thích khi nói đến EJB được gọi là lựa chọn phương pháp tiếp cận trung gian ngầm thay vì phương pháp trung gian rõ ràng, khi bạn sử dụng chú thích, bạn đang tùy chỉnh những gì bạn chính xác cần từ API, chẳng hạn như bạn cần gọi phương thức giao dịch để chuyển khoản ngân hàng : mà không sử dụng chú thích: mã sẽ là

transfer(Account account1, Account account2, long amount)    
{
   // 1: Call middleware API to perform a security check
   // 2: Call middleware API to start a transaction
   // 3: Call middleware API to load rows from the database
   // 4: Subtract the balance from one account, add to the other
   // 5: Call middleware API to store rows in the database
   // 6: Call middleware API to end the transaction
}

trong khi sử dụng Annotation, mã của bạn không chứa các lệnh gọi API rườm rà để sử dụng các dịch vụ trung gian. Mã rõ ràng và tập trung vào logic nghiệp vụ

transfer(Account account1, Account account2, long amount) 
{
   // 1: Subtract the balance from one account, add to the other
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.