2011-08-13 32 views
11

Tôi thấy mình bị nhầm lẫn với thứ tự truy cập và các công cụ sửa đổi không truy cập. Ví dụ:Cú pháp và định dạng của trình sửa đổi Java

abstract void go() 
abstract public void go() 
public final void go() 
void final go() 

final class Test{} 
class final Test{} 
final abstract class Test{} 
abstract final Test{} 

Tôi không bao giờ biết thứ tự đúng là gì và đôi khi tôi hiểu sai vì có quá nhiều kết hợp có thể. Có hướng dẫn xác định nào nên đến trước cái kia không?

Có mô tả nào về định dạng và thứ tự mà chúng xuất hiện trong mã không? Tôi đang cố gắng để đưa ra một hướng dẫn cú pháp nhưng tôi không chắc chắn nếu nó là chính xác 100%. Dưới đây là:

Methods: 
[access modifier | nonaccess modifier] return-type method-name 

Classes: 
[access modifier | nonaccess modifier] class class-name 

Interfaces: 
[access modifier | nonaccess modifier] interface interface-name  

Variables: 
[access modifier | nonaccess modifier] variable-type variale-name 
+0

Không có thứ tự đúng, không phải là một câu hỏi thực tế. – EJP

Trả lời

18

Từ chính thức grammar của ngôn ngữ lập trình Java (giản thể):

Modifier: 
    Annotation | public | protected | private 
    static | abstract | final | native | synchronized 
    transient | volatile | strictfp 

ClassOrInterfaceDeclaration: 
     {Modifier} (ClassDeclaration | InterfaceDeclaration) 

ClassBodyDeclaration: 
     {Modifier} MethodOrFieldDecl 

MethodOrFieldDecl: 
     Type Identifier MethodOrFieldRest 

Vì vậy, đối với các lớp và các giao diện, các bổ phải luôn xuất hiện trước khi từ khóa class, và trong bất kỳ thứ tự. Ví dụ: final public class hợp lệ, nhưng class final thì không. Đối với các phương thức và các trường, nó giống nhau, nhưng các công cụ sửa đổi phải xuất hiện trước kiểu.

+3

Lưu ý: bất kỳ thứ tự sửa đổi nào là ** hợp lệ **, nhưng mọi người đọc mã dễ dàng hơn nếu tất cả mã trong một dự án sử dụng thứ tự nhất quán. Do đó, có một lệnh * theo thứ tự * [(xem câu nhỏ ở cuối Java spec 8.3.1)] (http://docs.oracle.com/javase/specs/jls/se7/html/jls -8.html # jls-8.3.1) đã được áp dụng rộng rãi, [ví dụ bởi Google] (https://google-styleguide.googlecode.com/svn/trunk/javaguide.html#s4.8.7-modifiers); nhiều công cụ java khuyến khích thứ tự này. – ToolmakerSteve

+2

Lưu ý rằng Java 8 thêm 'default' vào khai báo phương thức giao diện: http://docs.oracle.com/javase/specs/jls/se8/html/jls-19.html#jls-19-9 theo thứ tự trong ngữ pháp xuất hiện sau 'public' và' abstract'. –

2

Công cụ sửa đổi trước class hoặc loại. Theo số JavaLanguageSpecification, thứ tự giữa các công cụ sửa đổi không quan trọng.

11

Xem http://checkstyle.sourceforge.net/config_modifier.html.

Các chính xác (hay đúng hơn, thông thường) thứ tự là:

  1. công
  2. bảo vệ
  3. tin
  4. trừu tượng
  5. tĩnh
  6. thức
  7. thoáng
  8. dễ bay hơi
  9. đồng bộ
  10. mẹ đẻ
  11. strictfp

Lệnh này nên đến một cách tự nhiên để tâm trí của bạn sau một ngày lập trình trong Java.

3

Cũng như trong ngôn ngữ tiếng Anh, tính từ (bổ nghĩa như public, static, volatile, vv) trước danh từ mà chúng mô tả (class, interface, hoặc bất kỳ loại như int hay String). Thứ tự của các công cụ sửa đổi không quan trọng đối với ngôn ngữ, nhưng bằng cách đọc mã, bạn sẽ nhanh chóng tìm thấy cảm giác tự nhiên hơn.

Các vấn đề liên quan