Makul bir Java değiştiriciler sırası nedir (özet, son, genel, statik vb.)?


114

Makul bir Java değiştiriciler sırası nedir?

  • Öz
  • nihai
  • yerli
  • özel
  • korumalı
  • halka açık
  • statik
  • strictfp
  • senkronize
  • geçici
  • uçucu

Güncelleme

I ifadeleri değişti tavsiye etmek makul düzen tavsiye olup olmadığını tartışmaları sakinleştirmeye için.


En ufak bir önemi yok ve bu konuda ızdırap çekerek çok fazla zaman kaybetmemelisiniz. Şahsen ben her zaman önce erişim değiştiriciyi koyarım ama bundan sonra ne yapacağımı bile söyleyemedim. Bir referans istiyorsanız burayı deneyin , ancak orada belirtildiğinden bile emin değilim.
Marquis of Lorne

9
Bunun neden "yapıcı olmayan" bir soru olması gerektiğini merak ediyorum (yakın istekler). Tavsiyeyi şartnamede bulabilirsiniz (cevabıma bakın) ve bu tavsiyeyi takip etmek kodun okunabilirliğini artıracaktır. Statik kod analizörü (SONAR gibi) farklı bir sipariş kullanırsanız şikayette bulunacaktır.
FrVaBe

Oracle / Sun Java Kod Sözleşmelerine bir kez daha göz attım . Bu konudan, bakmanız gereken tek yerde ve ortaya çıkmasını beklediğiniz tek yerde bahsedilmiyor bile.
Marquis of Lorne

@EJB Kod kuralları 1999'dan kalmadır ve kesinlikle güncellenmesi gerekmektedir. Umarım bu konvansiyonlara bir daha dokunurlarsa bu konuyu dahil ederler çünkü gerçekten iyi bir yer!
FrVaBe

1
Eclipse değiştiricileri otomatik olarak sıralayabilir mi? Veya en azından sıralanmamışlarsa bir uyarıda bulunun?
Roland

Yanıtlar:


126

Değiştiricilerin alışılmış kullanım sırası Java Dil Spesifikasyonunda belirtilmiştir (Java Sanal Makine Spesifikasyonunda değil) örneğin, sınıf değiştiriciler için aşağıdaki tanımı bulacaksınız (özet):

ClassModifiers:
    ClassModifier
    ClassModifiers ClassModifier

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

[....]

Bir sınıf bildiriminde iki veya daha fazla (farklı) sınıf değiştirici görünürse, bu durumda bunların ClassModifier için üretimde yukarıda gösterilenle tutarlı sırada görünmeleri alışılmış bir durumdur, ancak gerekli değildir. (paragrafın altındaki küçük metin!)

Bu cümleyi, değiştiricilerin kullanımının belirtildiği başka yerlerde bulacaksınız, örneğin burada alan değiştiriciler için.

Güncelleme : Bunu kabul edilebilir bir cevap yapmak için "belirtilen / önerilen" ifadesini "geleneksel" ile değiştirdim. Eğer yorum okursanız (teşekkürler bu açıklığa kavuşturmak @EJP) ;-) bunu dikkate - Yine ben ediyorum tavsiye kullanmak alışılmış düzeni.

Google ayrıca Java spesifikasyonunda belirtilen geleneksel sırayı kullanmanızı önerir .

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

Güncelleme :OpenJDK topluluğundaki projeler içinyeni bir " Java Stil Yönergeleri " girişimi var. Ayrıca bir değiştirici sırası için bir önerisi vardırve ayrıcaJava 8'inyeni varsayılan değiştiricisini içerir.

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

1
Soru şuydu: "Java değiştiricilerinin önerilen sırası nedir?" ve bu sorular Dil Spesifikasyonunda cevaplandırılmıştır (ve sipariş gerekli olmadığından spesifikasyonda tavsiye edildiğini söyleyebilirim). JVM belirtimi, Java Kaynak kodu ile değil, sınıf dosya biçimiyle ilgilidir. - Aslında sıra önemli değildir, ancak bir öneriyi uygularsanız kodunuz başkaları tarafından daha okunabilir olacaktır. Bu yüzden, kesin bir cevabın verilebileceği makul bir soru olduğunu düşünüyorum. Bu arada - statik kod analizörü (örneğin SONAR) yanlış sipariş hakkında bilgi verecektir.
FrVaBe

3
Cümle Bir sınıf bildiriminde iki veya daha fazla (farklı) sınıf değiştirici görünüyorsa, zorunlu olmamakla birlikte, bunların ClassModifier için üretimde yukarıda gösterilenle tutarlı sırada görünmeleri alışılmış bir durumdur. ÖZELLİKLERİN BİR PARÇASI!
FrVaBe

1
Bu durumda bağırmak istedim ama şimdiden sakinleştim - bunun için çok üzgünüm ;-) - Ben de yerli değilim - bu yüzden muhtemelen dil yorumunda haklısınız. Cevabımla birlikte söylemek istediğim şey, Java Kaynak Kodundaki değiştiricilerin sırasının işlendiği çok resmi bir yer olduğudur - ve aynı soruyu kendime sorduğumda bunu bulduğum için şanslıydım. IMHO cevabı bulmak için Java Dil Spesifikasyonundan daha iyi bir yer yoktur.
FrVaBe


1
@EJP Bu konuda güçlü bir fikriniz var (~ tavsiye edilen sipariş yok). Bunu bir cevap olarak verir misiniz? Oylamayı merak ediyorum.
FrVaBe

28

Siparişin Java Virtual Machine Specification, Tablo 4.4'e göre kullanılması mantıklıdır.

  • halka açık
  • korumalı
  • özel
  • Öz
  • varsayılan
  • statik
  • nihai
  • geçici
  • uçucu
  • senkronize
  • yerli
  • strictfp

8
Sık gördüğünüz +1: "genel özet", "özel statik son" vb. Bazı IDE'lerin (ör. NetBeans) bazı kısayolları bile vardır, örneğin "psf" veya "Psf"
Puce

1
Önerilen sırayı Java Dil Belirtiminde bulabilirsiniz (Java Sanal Makine Belirtiminde değil!). Cevabıma bir bak.
FrVaBe

1
@FrVaBe Böyle bir şey bulamazsınız. Dil gramerlerini stil önerileriyle karıştırmayın.
Lorne Markisi

@Puce: bazı IDE'ler (örn. IntelliJ IDEA) değiştiricileri doğru bir şekilde sıralayabilir.
Mot

5

İnt değerlerine göre.

Değiştirici (Java Platformu SE 8)

  • 1: genel
  • 2: özel
  • 4: korumalı
  • 8: statik
  • 16: final
  • 32: senkronize
  • 64: uçucu
  • 128: geçici
  • 256: yerli
  • 512: arayüz
  • 1024: soyut
  • 2048: tightfp

1
bu cevap "varsayılan" anahtar kelimesini içermiyor
Sero

1
İnt değerlerinin bununla ne ilgisi var?
Lorne Markisi

0

Değiştirici sırasını hatırlamak için iki kural kullanıyorum, ancak benim tarafımdan hiç kullanılmadığı için katı fp'yi içermiyorum. Bilginize.

  1. senkronize yerel, en az öncelikli kişilerdir.

  2. PPP AS FTV: PPP {gürültü sesi} AS {izleme} FTV {Fransa TV}.

:)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.