Chapter 16. Definite Assignment
Chương 16 của Java Language Specification (JLS) là về Definite Assignment (Gán giá trị xác định)
1️⃣ Gán giá trị xác định là gì?
Trong Java, trước khi sử dụng một biến cục bộ (local variable), trình biên dịch bắt buộc biến đó phải được gán giá trị một cách rõ ràng (definite assignment). Điều này giúp tránh lỗi sử dụng biến chưa khởi tạo.
📌 Ví dụ hợp lệ:
📌 Ví dụ lỗi (biến chưa được gán giá trị):
2️⃣ Gán giá trị xác định với biến instance và static
Biến instance (thuộc về đối tượng) và biến static (thuộc về lớp) luôn được gán giá trị mặc định.
Biến cục bộ (local variable) không có giá trị mặc định → Bắt buộc phải gán giá trị trước khi dùng.
📌 Ví dụ hợp lệ với biến instance & static:
📌 Ví dụ lỗi với biến cục bộ:
3️⃣ Gán giá trị xác định trong các biểu thức điều kiện
if-else
if-else
Trình biên dịch Java kiểm tra tất cả các nhánh của if-else
để đảm bảo biến được gán trước khi dùng.
📌 Ví dụ hợp lệ:
📌 Ví dụ lỗi (một nhánh không gán giá trị):
💡 Cách khắc phục: Gán giá trị mặc định ban đầu.
4️⃣ Gán giá trị xác định trong vòng lặp
Vòng lặp while
và for
while
và for
Nếu biến được gán trong một vòng lặp, Java phải đảm bảo vòng lặp luôn chạy ít nhất một lần trước khi biến được sử dụng.
📌 Ví dụ lỗi (có thể không chạy while
):
💡 Cách khắc phục: Gán giá trị mặc định hoặc kiểm soát logic vòng lặp.
5️⃣ Gán giá trị xác định với final
final
Khi một biến cục bộ được khai báo là final
, nó phải được gán một lần duy nhất trước khi sử dụng.
📌 Ví dụ hợp lệ:
📌 6. Tổng kết
✅ Java bắt buộc biến cục bộ phải được gán giá trị trước khi sử dụng để tránh lỗi runtime.
✅ Biến instance và static luôn có giá trị mặc định, nhưng biến cục bộ thì không.
✅ Trình biên dịch Java kiểm tra tất cả các nhánh if-else
và vòng lặp để đảm bảo biến được gán trước khi dùng.
✅ Biến final
phải được gán một lần duy nhất và trước khi sử dụng.
Last updated