Vì đó là biến cục bộ. Đây là lý do tại sao không có gì được gán cho nó:
Biến cục bộ hơi khác; trình biên dịch không bao giờ gán giá trị mặc định cho biến cục bộ chưa được khởi tạo. Nếu bạn không thể khởi tạo biến cục bộ của mình ở nơi nó được khai báo, hãy đảm bảo rằng gán cho nó một giá trị trước khi bạn cố gắng sử dụng nó. Việc truy cập biến số địa phương chưa được khởi tạo sẽ dẫn đến lỗi biên dịch.
Chỉnh sửa: Tại sao Java tăng lỗi biên dịch này? Nếu chúng ta nhìn vào các tập tin IdentifierExpression.java
lớp, chúng ta sẽ thấy khối này:
...
if (field.isLocal()) {
LocalMember local = (LocalMember)field;
if (local.scopeNumber < ctx.frameNumber && !local.isFinal()) {
env.error(where, "invalid.uplevel", id);
}
if (!vset.testVar(local.number)) {
env.error(where, "var.not.initialized", id);
vset.addVar(local.number);
}
local.readcount++;
}
...
Như đã trình bày (if (!vset.testVar(local.number)) {
), kiểm tra JDK (với testVar
) nếu biến được gán (Vset
's source code nơi chúng tôi có thể tìm thấy testVar
đang). Nếu không, nó làm tăng các lỗi var.not.initialized
từ một properties file:
...
javac.err.var.not.initialized=\
Variable {0} may not have been initialized.
...
Source
chỉnh sửa: có tác dụng, nhưng việc quảng cáo địa phương thành trường để tránh khởi tạo có thể không phải là ví dụ hợp lý :-) – fvu
@fvu, đó là một ví dụ, vì vậy nó phục vụ một số mục đích. : D – user1329572