Khi bạn khai báo một biến là static, thì biến đó được gọi là biến tĩnh, hay biến static.
Sử dụng biến static giúp chương trình của bạn sử dụng bộ nhớ hiệu quả hơn (tiết kiệm bộ nhớ).
Vấn đề khi không sử dụng biến static
1 2 3 4 5 |
|
Giả sử có 1000 sinh viên trong trường đại học, bây giờ instance của các dữ liệu thành viên sẽ sự dụng bộ nhớ mỗi khi đối tượng được tạo. Tất cả sinh viên có rollno và name là thuộc tính riêng. Tuy nhiên, college là thuộc tính chung của tất cả đối tượng. Nếu chúng ta tạo nó là static, thì trường này sẽ chỉ sử dụng bộ nhớ một lần để lưu biến này.
Ghi chú: Thuộc tính static trong Java được chia sẻ tới tất cả đối tượng.
Ví dụ về biến static trong java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
|
Kết quả:
111 - Thông - Bưu Chính Viễn Thông 222 - Minh - Bưu Chính Viễn Thông
Trong ví dụ dưới đây, chúng ta tạo một biến instance có tên count mà được tăng lên trong constructor. Khi biến instance này lấy bộ nhớ tại thời điểm tạo đối tượng, mỗi đối tượng sẽ có bản sao của biến instance đó, nếu nó được tăng lên, nó sẽ không ảnh hướng đến các đối tượng khác. Vì thế mỗi đối tượng sẽ có giá trị 1 trong biến count.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|
Kết quả:
1 1 1
Như bạn đã thấy ở trên, biến static sẽ lấy bộ nhớ chỉ một lần, nếu bất cứ đối tượng nào thay đổi giá trị của biến static, nó sẽ vẫn ghi nhớ giá trị của nó.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|
Kết quả:
1 2 3
Nếu bạn áp dụng từ khóa static với bất cứ phương thức nào, thì phương thức đó được gọi là phương thức static.
Ví dụ về phương thức static trong Java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
|
Kết quả:
111 - Thông - Đại Học Công Nghệ 222 - Minh - Đại Học Công Nghệ 333 - Anh - Đại Học Công Nghệ
Có hai hạn chế chính đối với phương thức static. Đó là:
Ví dụ:
1 2 3 4 5 6 7 |
|
Kết quả:
Compile Time Error
Ví dụ về khối static trong Java
1 2 3 4 5 6 7 8 9 |
|
Kết quả:
Khối static: hello ! Main: hello !
Câu hỏi: Tại sao phương thức main trong Java là static?
Bởi vì không cần thiết phải tạo đối tượng để gọi phương thức static. Nếu nó là phương thức non-static, JVM đầu tiên tạo đối tượng và sau đó gọi phương thức main() mà có thể gây ra vấn đề về cấp phát bộ nhớ bộ nhớ phụ.
Câu hỏi: Chúng ta có thể thực thi một chương trình mà không có phương thức main()?
Có, một trong các cách đó là khối static trong phiên bản trước của JDK. Không phải là JDK 1.7
Ví dụ:
1 2 3 4 5 6 |
|
Kết quả: (TH < jdk7)
static block is invoked
Kết quả: (TH >= jdk7)
Error: Main method not found in class A3, please define the main method as: public static void main(String[] args)
Nguồn tin: viettuts