Java logger: inisialisasi blok statis atau inisialisasi dalam deklarasi variabel

15

Saat ini saya menggunakan logger di proyek saya dengan cara berikut:

private static final Logger LOGGER;

static{
  LOGGER = logger.getLogger();
}

Saya mendapat review kode untuk menggunakan blok statis untuk menginisialisasi variabel logger. Saya diberitahu untuk menginternalisasi variabel logger dalam pernyataan deklarasi itu sendiri.

private static final Logger LOGGER = Logger.getLogger();

Saya mencoba mencari tahu apa bedanya jika saya tidak menginisialisasi di blok statis. Saya ingin tahu apakah ini sebuah praktik.

Tidak berbahaya
sumber
8
Tidak ada bedanya, tetapi salah satunya melibatkan lebih banyak mengetik dan lebih banyak baris kode.
user253751
Keduanya akan menghasilkan bytecode yang persis sama. Yang mana yang Anda sukai sepenuhnya adalah masalah selera,
user207421
Kenapa kamu tidak menggunakan Lombok?
Pasang kembali Monica - M. Schröder

Jawaban:

48

Kecuali untuk beberapa kasus sudut yang benar-benar aneh yang melibatkan urutan inisialisasi, dua alternatif akan bekerja sama persis.

Namun, menginisialisasi instance tepat dalam deklarasi lebih pendek dan lebih akrab, dan harus lebih disukai karena alasan itu saja.

Blok inisialisasi statis adalah konstruk yang agak eksotis dan hanya boleh digunakan ketika mereka benar-benar memberikan nilai tambah, seperti ketika Anda perlu menangani pengecualian.

Michael Borgwardt
sumber
7
Poin bagus menyebutkan Pengecualian sebagai kasus langka untuk menggunakan blok statis.
user949300
4
Menginternalisasi HashMap adalah usecase lain yang bagus.
RubberDuck
3
@RubberDuck Meskipun Map.ofmetode Java 9 seharusnya membantu.
cbojar
1
@cbojar Map.ofmengembalikan peta yang tidak dapat diubah, jadi jika Anda benar-benar membutuhkannya, HashMapAnda masih perlu melakukannya dengan cara lama. Atau sesuatu sepertinew HashMap(Map.of(...))
kapex
1
@ Kapap Ya, menggunakannya untuk meneruskan ke konstruktor adalah bagaimana saya akan melakukannya jika saya membutuhkan peta yang bisa diubah-ubah alih-alih blok penginisialisasi.
cbojar