Thứ tự hợp lý của các bổ ngữ Java (trừu tượng, cuối cùng, công khai, tĩnh, v.v.) là gì?


114

Thứ tự hợp lý của các bổ ngữ Java là gì?

  • trừu tượng
  • sau cùng
  • tự nhiên
  • riêng tư
  • được bảo vệ
  • công cộng
  • tĩnh
  • nghiêm ngặt
  • đồng bộ
  • tạm thời
  • bay hơi

Cập nhật

Tôi đã thay đổi từ ngữ từ khuyến nghị thành hợp lý để làm dịu các cuộc thảo luận xem liệu lệnh có được khuyến nghị hay không.


Nó không quan trọng chút nào, và bạn không nên lãng phí quá nhiều thời gian để đau khổ về nó. Cá nhân tôi luôn đặt công cụ sửa đổi quyền truy cập đầu tiên nhưng sau đó tôi thậm chí không thể cho bạn biết tôi làm gì tiếp theo. Nếu bạn muốn tham khảo, hãy thử ở đây , nhưng tôi không tự tin rằng nó thậm chí còn được chỉ định ở đó.
Marquis of Lorne

9
Tôi tự hỏi tại sao đây phải là một câu hỏi "không mang tính xây dựng" (yêu cầu gần gũi). Bạn có thể tìm thấy đề xuất trong thông số kỹ thuật (xem câu trả lời của tôi) và làm theo đề xuất này sẽ cải thiện khả năng đọc của mã. Bộ phân tích mã tĩnh (như SONAR) sẽ khiếu nại nếu bạn sử dụng một lệnh khác.
FrVaBe

Tôi đã xem xét lại Quy ước mã Oracle / Sun Java . Vấn đề thậm chí không được đề cập đến, ở một nơi mà bạn nên xem xét và một nơi mà bạn mong đợi nó xuất hiện.
Marquis of Lorne

@EJB Các quy ước mã có từ năm 1999 và rất cần được cập nhật. Tôi hy vọng rằng họ sẽ bao gồm chủ đề này nếu họ chạm vào những quy ước này một lần nữa vì nó thực sự là một nơi tốt!
FrVaBe

1
Eclipse có thể tự động sắp xếp các công cụ sửa đổi không? Hoặc ít nhất là đưa ra một cảnh báo nếu chúng không được sắp xếp?
Roland

Câu trả lời:


126

Thứ tự sử dụng thông thường của các bổ ngữ được đề cập trong Đặc tả ngôn ngữ Java (chứ không phải Đặc tả máy ảo Java), ví dụ: đối với các bổ ngữ lớp, bạn sẽ tìm thấy định nghĩa sau (trích xuất):

ClassModifiers:
    ClassModifier
    ClassModifiers ClassModifier

ClassModifier: one of
    Annotation public protected private
    abstract static final strictfp

[....]

Nếu hai hoặc nhiều công cụ sửa đổi lớp (riêng biệt) xuất hiện trong khai báo lớp, thì theo thông lệ, mặc dù không bắt buộc, chúng xuất hiện theo thứ tự phù hợp với trình tự được hiển thị ở trên trong bản sản xuất cho ClassModifier. (dòng chữ nhỏ ở cuối đoạn văn!)

Bạn sẽ tìm thấy câu này ở một số nơi khác mà việc sử dụng các bổ ngữ được chỉ định, ví dụ ở đây đối với các bổ ngữ trường.

Cập nhật : Tôi đã thay thế "được chỉ định / khuyến nghị" bằng "thông lệ" để biến đây thành một câu trả lời có thể chấp nhận được. Hãy tính đến điều này nếu bạn đọc các bình luận ;-) (cảm ơn @EJP đã nói rõ điều này) - Tuy nhiên, tôi sẽ giới thiệu để sử dụng các phong tục đặt hàng.

Google cũng khuyến nghị sử dụng thứ tự tùy chỉnh được đề cập trong thông số Java.

public / protected / private 
abstract 
static 
final 
transient 
volatile 
synchronized 
native 
strictfp

Cập nhật : Có mộtsáng kiến ​​" Hướng dẫn kiểu Java " mớidành cho các dự án trong cộng đồng OpenJDK. Nó cũng có một đề xuất cho một thứ tự bổ trợ và cũng bao gồmbổ trợ mặc định mớicủa Java 8.

public / private / protected
abstract
static
final
transient
volatile
**default**
synchronized
native
strictfp

1
Câu hỏi là "Thứ tự được đề xuất của các bổ ngữ Java là gì?" và câu hỏi này được trả lời trong Đặc tả ngôn ngữ (và vì thứ tự không bắt buộc, tôi sẽ nói rằng nó được đề xuất trong đặc điểm kỹ thuật). Đặc tả JVM là về định dạng tệp lớp chứ không phải mã Nguồn Java. - Thật vậy, thứ tự không quan trọng nhưng nếu bạn làm theo một khuyến nghị thì mã của bạn sẽ dễ đọc hơn đối với người khác. Vì vậy, tôi nghĩ đây là một câu hỏi hợp lý, nơi có thể đưa ra câu trả lời chính xác. Nhân tiện - bộ phân tích mã tĩnh (ví dụ SONAR) sẽ phàn nàn về thứ tự sai.
FrVaBe

3
Câu Nếu hai hoặc nhiều bổ ngữ lớp (riêng biệt) xuất hiện trong khai báo lớp, thì theo thông lệ, mặc dù không bắt buộc, chúng xuất hiện theo thứ tự phù hợp với trình tự được hiển thị ở trên trong bản sản xuất cho ClassModifier. LÀ MỘT PHẦN CỦA THÔNG SỐ KỸ THUẬT!
FrVaBe

1
Trong trường hợp này, tôi muốn hét lên nhưng tôi đã bình tĩnh lại rồi - rất xin lỗi về điều đó ;-) - Tôi cũng không phải là người bản xứ - vì vậy có lẽ bạn đã đúng khi giải thích ngôn ngữ. Điều tôi chỉ muốn nói với câu trả lời của mình là có một nơi rất chính thức để xử lý thứ tự các sửa đổi trong Mã nguồn Java - và tôi đã may mắn tìm thấy điều này khi tôi đặt câu hỏi tương tự cho chính mình. IMHO không có nơi nào tốt hơn để tìm câu trả lời hơn là trong Đặc tả ngôn ngữ Java.
FrVaBe


1
@EJP Bạn có ý kiến ​​mạnh mẽ (~ không đề xuất thứ tự) về chủ đề đó. Bạn có vui lòng cung cấp điều này như một câu trả lời không? Tôi tò mò về cuộc bỏ phiếu.
FrVaBe

28

Sử dụng thứ tự theo Đặc điểm kỹ thuật máy ảo Java, Bảng 4.4 là hợp lý

  • công cộng
  • được bảo vệ
  • riêng tư
  • trừu tượng
  • mặc định
  • tĩnh
  • sau cùng
  • tạm thời
  • bay hơi
  • đồng bộ
  • tự nhiên
  • nghiêm ngặt

8
+1 bạn thường thấy: "public abstract", "private static final", v.v. Một số IDE (ví dụ: NetBeans) thậm chí có một số phím tắt, ví dụ: "psf" hoặc "Psf"
Puce

1
Bạn có thể tìm thấy thứ tự được đề xuất trong Đặc tả ngôn ngữ Java (chứ không phải Đặc tả máy ảo Java!). Hãy xem câu trả lời của tôi.
FrVaBe

1
@FrVaBe Bạn không thể tìm thấy thứ như vậy. Đừng nhầm lẫn ngữ pháp ngôn ngữ với các khuyến nghị về phong cách.
Marquis of Lorne,

@Puce: một số IDE (ví dụ: IntelliJ IDEA) thậm chí có thể sắp xếp chính xác các công cụ sửa đổi.
Một

5

Dựa trên giá trị int của chúng.

Công cụ sửa đổi (Nền tảng Java SE 8)

  • 1: công khai
  • 2: riêng tư
  • 4: được bảo vệ
  • 8: tĩnh
  • 16: cuối cùng
  • 32: đồng bộ hóa
  • 64: dễ bay hơi
  • 128: thoáng qua
  • 256: bản địa
  • 512: giao diện
  • 1024: trừu tượng
  • 2048: nghiêm ngặt

1
câu trả lời này không bao gồm từ khóa "mặc định"
Sero

1
Giá trị int của họ có liên quan gì với nó?
Marquis of Lorne

0

Tôi sử dụng hai quy tắc để nhớ trình tự bổ trợ, nhưng không bao gồm nghiêm ngặt vì nó không bao giờ được tôi sử dụng. FYI.

  1. bản địa đồng bộ là những người ít ưu tiên nhất.

  2. PPP AS FTV: PPP {noise sound} AS {watching} FTV {France TV}.

:)

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.