Java 수정 자의 합리적인 순서 (추상, 최종, 공개, 정적 등)는 무엇입니까?


114

Java 수정 자의 합리적인 순서는 무엇입니까?

  • 요약
  • 결정적인
  • 원주민
  • 은밀한
  • 보호
  • 공공의
  • 공전
  • strictfp
  • 동기화 됨
  • 과도 현상
  • 휘발성 물질

최신 정보

에서 나는 표현을 변경 한 추천합리적인 순서가 권장 여부 논의를 진정시키기 위해.


조금이라도 문제가되지 않으며, 그것에 대해 너무 많은 시간을 낭비해서는 안됩니다. 개인적으로 항상 액세스 수정자를 먼저 입력했지만 그 후에는 다음에 무엇을하는지조차 말할 수 없었습니다. 참조를 원한다면 여기 에서 시도 하십시오 .하지만 거기에 지정되어 있다고 확신하지 못합니다.
Marquis of Lorne

9
왜 이것이 "건설적이지 않은"질문 (마감 요청)이어야하는지 궁금합니다. 사양에서 권장 사항을 찾을 수 있으며 (내 답변 참조)이 권장 사항을 따르면 코드의 가독성이 향상됩니다. 다른 순서를 사용하면 정적 코드 분석기 (예 : SONAR)가 불만을 표시합니다.
FrVaBe 2013 년

Oracle / Sun Java Code Conventions를 다시 살펴 보았습니다 . 그 문제는 당신이 봐야 할 곳과 그것이 나타날 것으로 기대하는 곳에서 언급조차되지 않았습니다.
Marquis of Lorne

@EJB 코드 규칙은 1999 년의 것이며 강력하게 업데이트해야합니다. 정말 좋은 곳이기 때문에 그들이 이러한 관습을 다시 만지면이 주제를 포함하기를 바랍니다!
FrVaBe 2013 년

1
Eclipse가 수정자를 자동으로 정렬 할 수 있습니까? 아니면 적어도 정렬되지 않은 경우 경고를 제공합니까?
Roland

답변:


126

관습 수식의 사용 순서는에서 언급 Java 언어 사양 (그리고 자바 가상 머신 사양) 예에 대한 클래스 수정 다음과 같은 정의 (추출물)를 찾을 수 있습니다 :

ClassModifiers:
    ClassModifier
    ClassModifiers ClassModifier

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

[....]

클래스 선언에 둘 이상의 (고유 한) 클래스 수정자가 나타나면 필수는 아니지만 ClassModifier 프로덕션에서 위에 표시된 순서와 일치하는 순서로 나타나는 것이 일반적입니다. (단락 하단에 작은 텍스트!)

당신은 예 수정의 사용이 지정되어 여러 다른 장소에서이 문장을 찾을 여기 필드 수정을 위해.

업데이트 : "지정 / 권장"을 "관습"으로 대체하여이 답변을 수용 할 수 있도록했습니다. 당신은 코멘트를 읽으면 (덕분에이 명확를 만들기 위해 @EJP) ;-)이 점을 고려 - 그럼에도 불구하고 나는 것이 권장 사용에 관례 순서를.

Google은 또한 Java 사양에 언급 된 관례적인 순서를 사용하는 것이 좋습니다 .

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

업데이트 :OpenJDK 커뮤니티의 프로젝트를위한새로운 " Java Style Guidelines "이니셔티브가 있습니다. 또한 수정 자 순서에 대한 권장 사항이 있으며Java 8의 새로운 기본 수정자를포함합니다.

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

1
질문은 "자바 수정 자의 권장 순서는 무엇입니까?"였습니다. 이 질문에 대한 답변은 언어 사양에 나와 있습니다 (주문이 필요하지 않으므로 사양에서 권장한다고 말하겠습니다). JVM 사양은 Java 소스 코드가 아닌 클래스 파일 형식에 관한 것입니다. -실제로 순서는 중요하지 않지만 권장 사항을 따르면 다른 사람이 코드를 더 쉽게 읽을 수 있습니다. 그래서 정확한 답을 줄 수있는 합리적인 질문이라고 생각합니다. 그건 그렇고-정적 코드 분석기 (예 : SONAR)는 잘못된 순서에 대해 불평합니다.
FrVaBe 2013 년

3
문장 이 이상 (별개의) 클래스 한정자는 클래스 선언에 나타나는 경우, 그것은 그들이 ClassModifier에 대한 생산 위에 표시된 것과 일치 순서대로 표시되는지,하지만 필요하지 관례이다. 사양의 일부입니다!
FrVaBe 2013 년

1
이 경우에 나는 소리 치고 싶었지만 나는 이미 진정되었습니다-너무 죄송합니다 ;-)-나도 모국어가 아니기 때문에 아마도 당신은 언어 통역에 맞을 것입니다. 내 대답으로 방금 말하고 싶었던 것은 Java 소스 코드의 수정 자 순서가 처리되는 매우 공식적인 장소가 있다는 것입니다. 같은 질문을 저에게 물어 보았을 때 운이 좋았습니다. IMHO는 Java 언어 사양보다 답을 찾기에 더 좋은 곳은 없습니다.
FrVaBe 2013 년


1
@EJP 당신은 그 주제에 대해 강한 의견 (~ 추천 순서 없음)을 가지고 있습니다. 이 질문에 대한 답을 제공해 주시겠습니까? 투표에 대해 궁금합니다.
FrVaBe 2013 년

28

Java Virtual Machine 사양, 표 4.4 에 따라 주문을 사용하는 것이 합리적입니다.

  • 공공의
  • 보호
  • 은밀한
  • 요약
  • 기본
  • 공전
  • 결정적인
  • 과도 현상
  • 휘발성 물질
  • 동기화 됨
  • 원주민
  • strictfp

8
자주 보게되는 +1 : "공개 요약", "개인 정적 최종"등. 일부 IDE (예 : NetBeans)에는 "psf"또는 "Psf"와 같은 단축키도 있습니다.
Puce

1
권장 순서는 Java 언어 사양 (Java Virtual Machine 사양이 아님) 에서 찾을 수 있습니다 . 내 대답을 살펴보십시오.
FrVaBe 2013 년

1
@FrVaBe 당신은 그런 것을 찾을 수 없습니다. 언어 문법과 스타일 권장 사항을 혼동하지 마십시오.
Marquis of Lorne

@Puce : 일부 IDE (예 : IntelliJ IDEA)는 수정자를 올바르게 정렬 할 수도 있습니다.
Mot

5

int 값을 기반으로합니다.

수정 자 (Java Platform SE 8)

  • 1 : 공개
  • 2 : 개인
  • 4 : 보호됨
  • 8 : 정적
  • 16 : 최종
  • 32 : 동기화 됨
  • 64 : 휘발성
  • 128 : 과도
  • 256 : 네이티브
  • 512 : 인터페이스
  • 1024 : 초록
  • 2048 : strictfp

1
이 답변에는 키워드 "default"가 포함되어 있지 않습니다.
Sero

1
그들의 int 값은 그것과 어떤 관련이 있습니까?
론의 후작

0

두 가지 규칙을 사용하여 수정 자 시퀀스를 기억하지만 strictfp는 포함하지 않습니다. 참고로.

  1. 동기화 된 네이티브는 우선 순위가 가장 낮은 사람들입니다.

  2. PPP AS FTV : PPP {노이즈 사운드} AS {시청} FTV {프랑스 TV}.

:)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.