Văn bản được trích dẫn là:
"Tuy nhiên, dựa vào các giá trị mặc định như vậy, thường được coi là phong cách lập trình xấu."
Một cách hoài nghi: "thường được coi là như vậy" thường là một cách để nói rằng tác giả đã không cố gắng tìm một nguồn có thẩm quyền cho tuyên bố được trình bày.
Trong trường hợp này, khẳng định rõ ràng là nghi vấn. Bằng chứng: 5 trên 5 Hướng dẫn về Phong cách Java được lấy mẫu KHÔNG nói bất cứ điều gì về việc bạn nên hay nên dựa vào các giá trị mặc định:
. )
ĐỒNG Ý. Vì vậy, nó thực sự hỗ trợ khả năng đọc mã Java?
Đây là tranh cãi.
Một mặt, một lập trình viên Java mới làm quen với việc khởi tạo mặc định có thể gặp khó khăn về việc các số 0 hoặc null đến từ đâu. Nhưng nếu họ bận tâm tìm kiếm một khởi tạo rõ ràng và tìm thấy không có một khởi tạo nào, điều đó đủ để khiến họ đọc một hướng dẫn hoặc cuốn sách để tìm hiểu về khởi tạo mặc định. (Bạn sẽ hy vọng!)
Mặt khác, chúng ta thường không mong đợi các lập trình viên Java mới làm quen đang duy trì các cơ sở mã sản xuất. Đối với một lập trình viên Java có kinh nghiệm, việc khởi tạo dự phòng không cải thiện khả năng đọc. Đó là (tốt nhất) tiếng ồn.
Theo tôi, điều duy nhất đạt được khi khởi tạo dự phòng của một trường là báo hiệu cho người đọc mã tương lai của bạn rằng bạn đã nghĩ về giá trị ban đầu. (Như @GhostCat bày tỏ, việc khởi tạo mặc định không truyền đạt ý định.)
Nhưng ngược lại, nếu tôi là người đọc đó, tôi sẽ không nhất thiết tin tưởng vào suy nghĩ của tác giả mã. Vì vậy, giá trị của "tín hiệu" này cũng có vấn đề.
Còn độ tin cậy thì sao?
Trong Java, nó không có sự khác biệt. JLS quy định cụ thể mà khởi tạo mặc định không xảy ra đối với các lĩnh vực. Và ngược lại, đối với các biến cục bộ, đó là lỗi biên dịch khi cố gắng sử dụng một biến chưa được khởi tạo chắc chắn.
Nói tóm lại, hành vi thời gian chạy của một biến không được khởi tạo rõ ràng là hoàn toàn có thể dự đoán được.
Ngược lại trong các ngôn ngữ như C hoặc C ++, nơi các biến có thể không được khởi tạo, hành vi không được chỉ định và có thể dẫn đến sự cố và sự khác biệt trong hành vi trên các nền tảng khác nhau. Trường hợp luôn luôn khởi tạo các biến rõ ràng mạnh hơn ở đây.
Hiệu suất thì sao?
Nó sẽ không làm cho sự khác biệt. Trình biên dịch JIT có thể coi việc khởi tạo dự phòng và khởi tạo mặc định là như nhau.
private int count = 0;
là mã không làm gì cả, và mã không có gì là lộn xộn. Nó giống như nhập các lớp từ java.lang hoặc khai báo một lớp vớiextends Object
.