Từ Xem các phương thức biến tĩnh trong Java :
- Nó là một biến thuộc về lớp chứ không phải đối tượng (cá thể)
- Các biến tĩnh chỉ được khởi tạo một lần khi bắt đầu thực thi. Các biến này sẽ được khởi tạo trước, trước khi khởi tạo bất kỳ biến phiên bản nào
- Một bản sao duy nhất sẽ được chia sẻ bởi tất cả các phiên bản của lớp
- Một biến tĩnh có thể được truy cập trực tiếp bằng tên lớp và không cần bất kỳ đối tượng nào.
Các biến phiên bản và lớp (tĩnh) được tự động khởi tạo thành các giá trị mặc định tiêu chuẩn nếu bạn không cố ý khởi tạo chúng. Mặc dù các biến cục bộ không được khởi tạo tự động, nhưng bạn không thể biên dịch một chương trình không khởi tạo được biến cục bộ hoặc gán giá trị cho biến cục bộ đó trước khi nó được sử dụng.
Những gì trình biên dịch thực sự làm là tạo nội bộ một quy trình khởi tạo lớp duy nhất kết hợp tất cả các trình khởi tạo biến tĩnh và tất cả các khối mã khởi tạo tĩnh, theo thứ tự xuất hiện trong khai báo lớp. Thủ tục khởi tạo đơn này được chạy tự động, một lần duy nhất, khi lớp được tải lần đầu tiên.
Trong trường hợp các lớp bên trong , chúng không thể có các trường tĩnh
Một lớp bên trong là một lớp lồng nhau không được khai báo rõ ràng hoặc ngầm định static
.
...
Các lớp bên trong có thể không khai báo bộ khởi tạo tĩnh (§8.7) hoặc giao diện thành viên ...
Các lớp bên trong có thể không khai báo các thành viên tĩnh, trừ khi chúng là các biến hằng số ...
Xem JLS 8.1.3 Các lớp bên trong và các trường hợp bao bọc
final
Các trường trong Java có thể được khởi tạo tách biệt với nơi khai báo của chúng, tuy nhiên điều này không thể áp dụng cho static final
các trường. Xem ví dụ bên dưới.
final class Demo
{
private final int x;
private static final int z;
static
{
z = 10;
}
public Demo(int x)
{
this.x=x;
}
}
Điều này là do chỉ có một bản sao của các static
biến được liên kết với kiểu, chứ không phải là một bản sao được liên kết với từng thể hiện của kiểu như với các biến thể hiện và nếu chúng ta cố gắng khởi tạo z
kiểu static final
trong hàm tạo, nó sẽ cố gắng khởi động lại trường static final
kiểu z
bởi vì hàm tạo được chạy trên mỗi phần khởi tạo của lớp không được xảy ra với các final
trường tĩnh .