Java logger: Statik blok başlatma veya değişken bildirimde başlatma


15

Şu anda projemde logger'ı şu şekilde kullanıyorum:

private static final Logger LOGGER;

static{
  LOGGER = logger.getLogger();
}

Logger değişken başlatmak için statik blok kullanmak için bir kod inceleme var. Bildirge değişkeninin kendisinde logger değişkenini değerlendirmem söylendi.

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

Statik blokta başlatmazsam ne fark yaratacağını anlamaya çalışıyorum. Bunun bir uygulama olup olmadığını bilmek istiyorum.


8
Herhangi bir fark yaratmaz, ancak bunlardan biri daha fazla yazım ve daha fazla kod satırı içerir.
user253751

Her ikisi de tam olarak aynı bayt kodunu oluşturur. Hangisini tercih edeceğiniz tamamen bir zevk meselesidir,
user207421

Neden Lombok kullanmıyorsun?
Monica'yı eski durumuna getirin - M. Schröder

Yanıtlar:


48

Başlatıcı dizisini içeren bazı gerçekten garip köşe vakaları dışında, iki alternatif tamamen aynı şekilde çalışacaktır.

Bununla birlikte, vakanın beyanda doğru başlatılması daha kısa ve daha tanıdıktır ve yalnızca bu nedenle tercih edilmelidir.

Statik başlatma blokları biraz egzotik bir yapıdır ve yalnızca istisnaları ele almanız gerektiğinde olduğu gibi gerçekte katma değer sağladıklarında kullanılmalıdır.


7
Statik blokları kullanmak için nadir bir durum olarak İstisnalardan bahsetmek iyi bir nokta.
user949300

4
Bir HashMap'i başlatmak başka bir iyi kullanımdır.
RubberDuck

3
@RubberDuck Her ne kadar Java 9'un Map.ofyöntemleri bu konuda yardımcı olmalıdır.
cbojar

1
@cbojar Map.ofdeğişmez bir harita döndürür, bu yüzden gerçekten ihtiyacınız HashMapvarsa, hala eski şekilde yapmanız gerekir. Veya bir şey gibinew HashMap(Map.of(...))
kapex

1
@Kapep Evet, yapıcıya geçmek için kullanmak, başlatıcı bloğu yerine değiştirilebilir bir haritaya ihtiyacım olursa nasıl yapacağımdır.
cbojar
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.