Diferença entre estática final e final estática

151

Encontrei um código em que declarava código como

private final static String API_RTN_SUCCESS = "0";
private final static String API_RTN_ERROR = "1";

public static final String SHARED_PREFERENCE_CONFIG = "shared_preference_config";
public static final String STARTUP_SETTING_KEY = "startup_setting";

Qual é a diferença entre eles ou são iguais? Ou difere para privateou public?

MBMJ
fonte
149
Se eles são diferentes, então desisto completamente do java.
Alex Lockwood

Respostas:

226

Nenhuma diferença. De acordo com 8.3.1 - Classes - Modificadores de campo da especificação da linguagem Java ,

Se dois ou mais modificadores de campo (distintos) aparecerem em uma declaração de campo, é habitual, embora não obrigatório, que eles apareçam na ordem consistente com a mostrada acima na produção do FieldModifier.

Para campos, a produção mencionada lista os modificadores nesta ordem:

@Annotation public protected private static final transient volatile

E para métodos:

@Annotation public protected private abstract static final synchronized native strictfp

Gergely Szilagyi
fonte
9
Para referência, a ordem a partir do link é abstract static final.
sfarbota
42

Eles são os mesmos. A ordem dos modificadores não é significativa. E observe que a mesma regra se aplica a todos os contextos em que modificadores são usados ​​em Java.

No entanto, a maioria dos guias de estilo Java recomenda / exige a mesma ordem específica para os modificadores. Neste caso, é public static final.

Stephen C
fonte
19
private static final String API_RTN_ERROR= "1";
private final static String API_RTN_ERROR= "1";
static private final String API_RTN_ERROR= "1";
static final private String API_RTN_ERROR= "1";
final static private String API_RTN_ERROR= "1";
final private static String API_RTN_ERROR= "1";

mesmo todos acima são os mesmos, a posição dos três primeiros é intercambiável.

RTA
fonte
8

Eles são iguais,

private final static String API_RTN_ERROR = "1";

private static final String API_RTN_ERROR= "1";
Jigar Joshi
fonte
4

Qual é a diferença entre eles ou são iguais?

Se você está falando sobre mudar a ordem de estática e final, então sim, são as mesmas.

difere para privado ou público?

Não, você pode usar qualquer pedido em privado e público. A diferença é que variáveis ​​privadas não serão acessíveis fora da classe diretamente.

Harry Joy
fonte
1

Esta é apenas uma convenção ou prática que as pessoas seguem para manter o estilo de codificação consistente. Melhora a legibilidade. maneira tão preferida de escrever isso é

private static final <Type> <variable_name> = <value>;
Vishal Akkalkote
fonte
0

é o mesmo, é claro. depende apenas de seus hábitos e preferências :-). Também uso ordem final estática pública para membros e métodos

pietroSV
fonte