O que é uma ordem razoável de modificadores Java (abstrato, final, público, estático, etc.)?

114

O que é uma ordem razoável de modificadores Java?

  • resumo
  • final
  • nativo
  • privado
  • protegido
  • público
  • estático
  • strictfp
  • sincronizado
  • transitório
  • volátil

Atualizar

Mudei o texto de recomendado para razoável a fim de acalmar as discussões, seja a ordem recomendada ou não.

Micha Wiedenmann
fonte
Não importa nem um pouco, e você não deve perder muito tempo agonizando com isso. Pessoalmente, sempre coloco o modificador de acesso primeiro, mas depois disso não posso nem dizer o que faço a seguir. Se você quiser uma referência, tente aqui , mas não tenho certeza de que esteja especificada lá.
Marquês de Lorne
9
Eu me pergunto por que essa pergunta deveria ser "não construtiva" (solicitações de fechamento). Você pode encontrar a recomendação na especificação (veja minha resposta) e seguir esta recomendação irá melhorar a legibilidade do código. O analisador de código estático (como o SONAR) reclamará se você usar um pedido diferente.
FrVaBe
Dei outra olhada nas convenções de código Oracle / Sun Java . O assunto nem sequer é mencionado, no único lugar onde você deveria olhar e onde você esperaria que ele aparecesse.
Marquês de Lorne
@EJB As convenções de código são de 1999 e precisam ser atualizadas. Espero que eles incluam este tópico se tocarem nessas convenções novamente, pois é realmente um bom lugar!
FrVaBe
1
O Eclipse pode classificar os modificadores automaticamente? Ou pelo menos avisar se não estiverem classificados?
Roland de

Respostas:

126

A ordem de uso habitual dos modificadores é mencionada na Especificação da linguagem Java (e não na Especificação da máquina virtual Java), por exemplo, para modificadores de classe, você encontrará a seguinte definição (extrato):

ClassModifiers:
    ClassModifier
    ClassModifiers ClassModifier

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

[....]

Se dois ou mais modificadores de classe (distintos) aparecem em uma declaração de classe, então é comum, embora não obrigatório, que eles apareçam na ordem consistente com aquela mostrada acima na produção para ClassModifier. (pequeno texto na parte inferior do parágrafo!)

Você encontrará esta frase em vários outros lugares onde o uso de modificadores é especificado, por exemplo, aqui para modificadores de campo.

Atualização : substituí "especificado / recomendado" por "habitual" para tornar a resposta aceitável. Leve isso em conta se você ler os comentários ;-) (graças @EJP deixar isso claro) - No entanto eu iria recomendar a usar a habitual ordem.

O Google também recomenda o uso do pedido habitual mencionado nas especificações Java.

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

Atualização : há uma novainiciativa de " Diretrizes de estilo Java " para projetos na comunidade OpenJDK. Ele também tem uma recomendação para uma ordem de modificador e também inclui o novomodificador padrão do Java 8.

public / private / protected
abstract
static
final
transient
volatile
**default**
synchronized
native
strictfp
FrVaBe
fonte
1
A pergunta era "Qual é a ordem recomendada dos modificadores Java?" e esta questão é respondida na Especificação da Linguagem (e como a ordem não é exigida, eu diria que é recomendado na especificação). A especificação JVM é sobre o formato do arquivo de classe e não sobre o código-fonte Java. - Na verdade, a ordem não importa, mas se você seguir uma recomendação, seu código será mais legível para outras pessoas. Portanto, acho que essa é uma pergunta razoável, onde uma resposta precisa pode ser dada. A propósito, o analisador de código estático (por exemplo, SONAR) irá comentar sobre a ordem errada.
FrVaBe
3
A sentença Se dois ou mais modificadores de classe (distintos) aparecem em uma declaração de classe, então é comum, embora não obrigatório, que eles apareçam na ordem consistente com aquela mostrada acima na produção para ClassModifier. FAZ PARTE DA ESPECIFICAÇÃO!
FrVaBe
1
Neste caso eu queria gritar, mas já me acalmei - sinto muito ;-) - Eu também não sou nativo - então você provavelmente está certo na interpretação da linguagem. O que eu queria apenas dizer com minha resposta é que existe um lugar muito oficial onde a ordem dos modificadores no código-fonte Java é tratada - e tive a sorte de descobrir isso quando fiz a mesma pergunta para mim mesmo. IMHO, não há melhor lugar para encontrar a resposta do que na Especificação da linguagem Java.
FrVaBe
1
@EJP Você tem uma opinião forte (~ sem pedido recomendado) sobre esse assunto. Você faria a gentileza de fornecer isso como uma resposta? Estou curioso sobre a votação.
FrVaBe
28

É razoável usar o pedido de acordo com a Especificação da Máquina Virtual Java, Tabela 4.4

  • público
  • protegido
  • privado
  • resumo
  • padrão
  • estático
  • final
  • transitório
  • volátil
  • sincronizado
  • nativo
  • strictfp
Micha Wiedenmann
fonte
8
+1 você vê frequentemente: "resumo público", "final estático privado" etc. Alguns IDEs (por exemplo, NetBeans) até têm alguns atalhos, por exemplo, "psf" ou "Psf"
Puce
1
Você pode encontrar o pedido recomendado na Especificação da linguagem Java (e não na Especificação da máquina virtual Java!). Dê uma olhada na minha resposta.
FrVaBe
1
@FrVaBe Você não pode encontrar tal coisa. Não confunda gramáticas de linguagem com recomendações de estilo.
Marquês de Lorne
@Puce: alguns IDEs (por exemplo, IntelliJ IDEA) podem até classificar os modificadores corretamente.
Mot
5

Com base em seus valores int.

Modificador (Java Platform SE 8)

  • 1: público
  • 2: privado
  • 4: protegido
  • 8: estático
  • 16: final
  • 32: sincronizado
  • 64: volátil
  • 128: transitório
  • 256: nativo
  • 512: interface
  • 1024: resumo
  • 2048: strictfp
Sero
fonte
1
esta resposta não inclui a palavra-chave "padrão"
Sero
1
O que seus valores internos têm a ver com isso?
Marquês de Lorne
0

Eu uso duas regras para lembrar a sequência do modificador, mas não inclui o strictfp, pois ele nunca é usado por mim. PARA SUA INFORMAÇÃO.

  1. nativos sincronizados são pessoas com menos prioridade.

  2. PPP AS FTV: PPP {ruído de som} AS {assistindo} FTV {França TV}.

:)

Houcheng
fonte