Java logger: Khởi tạo khối tĩnh hoặc khởi tạo trong khai báo biến


15

Hiện tại tôi đang sử dụng logger trong dự án của mình theo cách sau:

private static final Logger LOGGER;

static{
  LOGGER = logger.getLogger();
}

Tôi đã có một đánh giá mã để sử dụng khối tĩnh để khởi tạo biến logger. Tôi được yêu cầu intialize biến logger trong chính câu lệnh khai báo.

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

Tôi đang cố gắng tìm ra sự khác biệt sẽ tạo ra sự khác biệt gì nếu tôi không khởi tạo nó trong khối tĩnh. Tôi muốn biết nếu đây là một thực hành.


8
Nó không tạo ra bất kỳ sự khác biệt nào, nhưng một trong số chúng liên quan đến việc gõ nhiều hơn và nhiều dòng mã hơn.
dùng253751

Cả hai sẽ tạo chính xác cùng một mã byte. Cái nào bạn thích hoàn toàn là vấn đề của hương vị,
user207421

Tại sao bạn không sử dụng Lombok?
Phục hồi Monica - M. Schröder

Câu trả lời:


48

Ngoại trừ một số trường hợp góc thực sự kỳ lạ liên quan đến trình tự khởi tạo, hai lựa chọn thay thế sẽ hoạt động giống hệt nhau.

Tuy nhiên, việc khởi tạo thể hiện ngay trong khai báo ngắn hơn và quen thuộc hơn, và chỉ nên được ưu tiên cho lý do đó.

Các khối khởi tạo tĩnh là một cấu trúc hơi kỳ lạ và chỉ nên được sử dụng khi chúng thực sự cung cấp giá trị gia tăng, chẳng hạn như khi bạn cần xử lý các trường hợp ngoại lệ.


7
Điểm hay đề cập đến Ngoại lệ là một trường hợp hiếm hoi khi sử dụng các khối tĩnh.
dùng949300

4
Intializing một HashMap là một usecase tốt khác.
RubberDuck

3
@RubberDuck Mặc dù các Map.ofphương thức của Java 9 sẽ giúp với điều đó.
cbojar

1
@cbojar Map.oftrả về một bản đồ bất biến, vì vậy nếu bạn thực sự cần HashMapbạn vẫn cần phải làm theo cách cũ. Hoặc một cái gì đó nhưnew HashMap(Map.of(...))
kapex

1
@Kapep Có, sử dụng nó để chuyển đến hàm tạo là cách tôi sẽ làm nếu tôi cần một bản đồ có thể thay đổi thay vì khối khởi tạo.
cbojar
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.