Thứ Sáu, 4 tháng 5, 2012

Từ khóa “static” [Java]


Từ khóa "static" có thể được sử dụng trong 3 trường hợp:
1) static variables (biến)  2) static methods 3) static blocks of code (1 đoạn code ).

Thường thì, khi bạn tạo ra một class, bạn chỉ chỉ ra object thuộc class đó trông như thế nào, có những hành vi gì. Bạn chưa thật sự có bất cứ thứ gì cho đến khi bạn tạo ra một instance của class đó. Chỉ khi đó thì vùng lưu trữ cho data mới được tạo và method mới có hiệu lực.
Tuy nhiên, có hạn chế khi: 1. bạn chỉ muốn có một vùng lưu trữ  cho một loại dữ liệu thôi, không phụ thuộc vào số object được tạo ra, 2. bạn muốn có những method không gắn liền với object cụ thể nào cả, method mà có thể gọi ngay khi chưa tạo ra object nào cả. Để khắc phục hạn chế này, hãy sử dụng từ khóa static
Để làm cho một field hay method trở thành static, chỉ đơn giản đặt từ khóa static lên trước khai báo của nó.
Ví dụ:

class StaticTest {
  static int i = 47;
}
Bây giờ, nếu bạn tạo ra 2 object s1, s2 thuộc class trên thì nó vẫn chia sẻ chung một vùng lưu trữ  i. Tức là s1.i và s2.i là cùng 1 giá trị.
Để chỉ một biến static, có thể thông qua object như thông thường hoặc thông qua chính class.
Với static method cũng như vậy. Ví dụ:

class StaticFun {
  static void incr() { StaticTest.i++; }
}
Ta có thể gọi hàm incr() từ object thuộc class StaticFun, hoặc từ chính class StaticFun.
Điểm khác nhau: static, khi áp dụng với field thì sẽ thay đổi hoàn toàn cách lưu trữ data, một bên là chỉ một vùng cho mỗi class, một bên là một vùng cho mỗi non-static object. Còn khi áp dụng với method, tác dụng lớn nhất của nó là có thể gọi method mà không cần phải tạo object, điều này rất quan trọng ví dụ như khi định nghĩa main() method.



Nguồn : http://hoangviet182.wordpress.com/2009/02/20/javat%E1%BB%AB-khoa-static/
http://www.javatutorialhub.com/wiki/All_about_%22static%22