Apa urutan pengubah Java yang wajar (abstrak, final, publik, statis, dll.)?

114

Apa urutan pengubah Java yang masuk akal?

  • abstrak
  • terakhir
  • asli
  • pribadi
  • terlindung
  • publik
  • statis
  • strikfp
  • disinkronkan
  • sementara
  • lincah

Memperbarui

Saya telah mengubah susunan kata dari recommended menjadi wajar untuk menenangkan diskusi apakah perintah tersebut direkomendasikan atau tidak.

Micha Wiedenmann
sumber
Tidak masalah sedikit pun, dan Anda tidak boleh membuang terlalu banyak waktu untuk memikirkannya. Secara pribadi saya selalu mengutamakan pengubah akses tetapi setelah itu saya bahkan tidak dapat memberi tahu Anda apa yang saya lakukan selanjutnya. Jika Anda ingin referensi, coba di sini , tetapi saya tidak yakin bahwa itu bahkan ditentukan di sana.
Marquis dari Lorne
9
Saya bertanya-tanya mengapa ini harus menjadi pertanyaan yang "tidak konstruktif" (permintaan dekat). Anda dapat menemukan rekomendasi dalam spesifikasi (lihat jawaban saya) dan mengikuti rekomendasi ini akan meningkatkan keterbacaan kode. Penganalisis kode statis (seperti SONAR) akan mengeluh jika Anda menggunakan urutan yang berbeda.
FrVaBe
Aku mengambil melihat lagi pada Konvensi Oracle / Sun Kode Java . Masalahnya bahkan tidak disebutkan, di satu tempat di mana Anda harus melihat dan di satu tempat di mana Anda mengharapkannya muncul.
Marquis dari Lorne
@EJB Konvensi kode berasal dari tahun 1999 dan sangat perlu diperbarui. Saya berharap mereka memasukkan topik ini jika mereka pernah menyentuh konvensi ini lagi karena ini memang tempat yang bagus!
FrVaBe
1
Bisakah Eclipse mengurutkan pengubah secara otomatis? Atau setidaknya beri peringatan jika tidak disortir?
Roland

Jawaban:

126

Urutan penggunaan biasa dari pengubah disebutkan dalam Spesifikasi Bahasa Java (dan bukan Spesifikasi Mesin Virtual Java) misalnya untuk pengubah kelas Anda akan menemukan definisi berikut (ekstrak):

ClassModifiers:
    ClassModifier
    ClassModifiers ClassModifier

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

[....]

Jika dua atau lebih pengubah kelas (berbeda) muncul dalam deklarasi kelas, maka sudah lazim, meskipun tidak wajib, mereka muncul dalam urutan yang konsisten dengan yang ditunjukkan di atas dalam produksi untuk ClassModifier. (teks kecil di bagian bawah paragraf!)

Anda akan menemukan kalimat ini di beberapa tempat lain di mana penggunaan pengubah ditentukan, misalnya di sini untuk pengubah bidang.

Pembaruan : Saya mengganti "ditentukan / disarankan" dengan "kebiasaan" untuk membuat ini jawaban yang dapat diterima. Pertimbangkan ini jika Anda membaca komentar ;-) (terima kasih @EJP untuk menjelaskannya) - Namun demikian saya akan merekomendasikan untuk menggunakanpesanan biasa .

Google juga merekomendasikan penggunaan urutan biasa yang disebutkan dalam spesifikasi Java.

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

Pembaruan : Adainisiatif " Panduan Gaya Java " baruuntuk proyek di komunitas OpenJDK. Ini juga memiliki rekomendasi untuk urutan pengubah dan juga termasukpengubah default baruJava 8.

public / private / protected
abstract
static
final
transient
volatile
**default**
synchronized
native
strictfp
FrVaBe
sumber
1
Pertanyaannya adalah "Apa urutan pengubah Java yang direkomendasikan?" dan pertanyaan ini dijawab dalam Spesifikasi Bahasa (dan karena pesanan tidak diperlukan, saya akan mengatakan itu direkomendasikan dalam spesifikasi). Spesifikasi JVM adalah tentang format file kelas dan bukan kode Sumber Java. - Memang urutannya tidak masalah tetapi jika Anda mengikuti suatu rekomendasi kode Anda akan lebih terbaca oleh orang lain. Jadi saya pikir ini adalah pertanyaan yang masuk akal di mana jawaban yang tepat dapat diberikan. Omong-omong - penganalisis kode statis (misalnya SONAR) akan mengeluh tentang urutan yang salah.
FrVaBe
3
Kalimat Jika dua atau lebih pengubah kelas (berbeda) muncul dalam deklarasi kelas, maka sudah lazim, meskipun tidak wajib, mereka muncul dalam urutan yang konsisten dengan yang ditunjukkan di atas dalam produksi untuk ClassModifier. ADALAH BAGIAN DARI SPESIFIKASI!
FrVaBe
1
Dalam hal ini saya ingin berteriak tetapi saya sudah tenang - maaf tentang itu ;-) - Saya juga bukan penutur asli - jadi Anda mungkin benar dalam interpretasi bahasa. Apa yang ingin saya katakan dengan jawaban saya adalah bahwa ada tempat yang sangat resmi di mana urutan pengubah di Kode Sumber Java ditangani - dan saya beruntung menemukan ini ketika saya menanyakan pertanyaan yang sama kepada diri saya sendiri. IMHO tidak ada tempat yang lebih baik untuk menemukan jawabannya selain di Spesifikasi Bahasa Java.
FrVaBe
1
@EJP Anda memiliki pendapat yang kuat (~ tidak ada urutan yang disarankan) tentang topik itu. Apakah Anda akan berbaik hati memberikan ini sebagai jawaban? Saya penasaran dengan votingnya.
FrVaBe
28

Masuk akal untuk menggunakan pesanan sesuai dengan Spesifikasi Mesin Virtual Java, Tabel 4.4

  • publik
  • terlindung
  • pribadi
  • abstrak
  • default
  • statis
  • terakhir
  • sementara
  • lincah
  • disinkronkan
  • asli
  • strikfp
Micha Wiedenmann
sumber
8
+1 yang sering Anda lihat: "public abstract", "private static final" dll. Beberapa IDE (mis. NetBeans) bahkan memiliki beberapa pintasan, mis. "Psf" atau "Psf"
Puce
1
Anda dapat menemukan pesanan yang disarankan dalam Spesifikasi Bahasa Java (dan bukan Spesifikasi Mesin Virtual Java!). Lihat jawaban saya.
FrVaBe
1
@FrVaBe Anda tidak dapat menemukan hal seperti itu. Jangan bingung tata bahasa dengan rekomendasi gaya.
Marquis dari Lorne
@ Puce: beberapa IDE (misalnya IntelliJ IDEA) bahkan dapat mengurutkan pengubah dengan benar.
Mot
5

Berdasarkan nilai int mereka.

Pengubah (Platform Java SE 8)

  • 1: publik
  • 2: pribadi
  • 4: dilindungi
  • 8: statis
  • 16: akhir
  • 32: disinkronkan
  • 64: mudah menguap
  • 128: sementara
  • 256: asli
  • 512: antarmuka
  • 1024: abstrak
  • 2048: tightfp
Sero
sumber
1
jawaban ini tidak termasuk kata kunci "default"
Sero
1
Apa hubungan nilai int mereka dengan itu?
Marquis dari Lorne
0

Saya menggunakan dua aturan untuk mengingat urutan pengubah, tetapi tidak menyertakan strictfp, karena tidak pernah digunakan oleh saya. FYI.

  1. native tersinkronisasi adalah orang dengan prioritas paling rendah.

  2. PPP AS FTV: PPP {noise sound} AS {watching} FTV {France TV}.

:)

Houcheng
sumber