Cách sử dụng từ khóa static trong Java

Chào mừng các bạn đã trở lại với thachleblog. Bài viết hôm nay mình sẽ giới thiệu về cách sử dụng static trong Java. Tuy chỉ là 1 “keyword” nhưng cũng khá nhiều vấn đề hay ho đấy, nào, chúng ta cùng bắt đầu nhé.

Static trong Java có thể được sử dụng dưới dạng:

  • Static variable
  • Static method
  • Static block
  • Static nested class

1. Static variable

Hay còn được gọi là class variable là những variable được khai báo static. Static variable sẽ được “gọi” trực tiếp bằng class mà không cần khởi tạo object để truy cập.

Khi nào dùng static variable?

  • Khi ta có các thuộc tính là đặc điểm chung của tất cả các object, ví dụ ta cần quản lý danh sách sinh viên trong 1 trường, class sinh viên có các thuộc tính là tên, mssv, tên trường thì tên trường là đặc điểm chung:
    Class student:
  1. package thach.le.staticvariable;
  2. public class Student {
  3. private static String schoolName = "UIT";
  4. private String name;
  5. private String id;
  6. public Student(String name, String id) {
  7. this.name = name;
  8. this.id = id;
  9. }
  10. public static String getSchoolName() {
  11. return schoolName;
  12. }
  13. public String getName() {
  14. return name;
  15. }
  16. public String getId() {
  17. return id;
  18. }}

Main class:

  1. package thach.le.staticvariable;
  2. public class Test {
  3. public static void main(String[] args) {
  4. Student student1 = new Student("Than", "10520201");
  5. System.out.println("Student1 info: \nName: " + student1.getName() + "\nSchool: " + Student.getSchoolName());
  6. }
  7. }

Việc khai báo thuộc tính shoolName là static sẽ giúp việc khởi tạo giá trị cho schoolName chỉ thực hiện 1 lần, do đó sẽ tiết kiệm bộ nhớ.
– Static với từ khóa final, khi ta cần các constant để dùng chung, ví dụ PI trong class Math.
public static final double PI = 3.141592653589793D;

2. Static method

Tương tự như static variable, static method được “gọi” trực tiếp bằng class .. Sử dụng static method khi ta cần các method được dùng chung.

Ví dụ các static method được khai báo để dùng chung trong class Math:

public static double sin(double arg)
public static long round(double arg)

Đặc điểm static method:
– Không thể truy cập non – static variable và gọi trực tiếp non – static method
– Không thể sử dụng this và super keyword

3. Static block

Biểu thức trong static block được thực thi ngay khi class được load vào JVM. Static block thường được sử dụng để khởi tạo giá trị cho static variable trong các trường hợp khởi tạo giá trị phức tạp.

  1. private static final HashMap<String, String> MAP = new HashMap<String, String>();
  2. static {
  3. MAP.put("banana", "honey");
  4. MAP.put("peanut butter", "jelly");
  5. MAP.put("rice", "beans");
  6. }

4. Static nested class

Nested class là các class được khai báo bên trong các class khác. Static nested class là nested class với từ khóa static. Trong các trường hợp nested class không cần access đến instance class bên ngoài, luôn luôn dùng static nested class. Sử dụng static nested class tương tự như variable và method, gọi thông qua class.

Tham khảo thêm Effective Java, 2nd Edition Item 22: Favor static member classes over nonstatic

Kết

Vừa rồi là phần trình bày của mình về từ khóa static, mong rằng qua phần trình bày của mình sẽ giúp các bạn hiểu rõ hơn về cách dùng static variable, static method, static block, static nested class trong Java. Rất mong nhận được ý kiến đóng góp của các bạn.

Xin cảm ơn.

Tham khảo thêm:
http://www.javatpoint.com/static-keyword-in-java
https://docs.oracle.com/javase/tutorial/java/javaOO/classvars.html