Java 8 – Đối tượng


Được đăng vào ngày 25/04/2017 | 0 bình luận

Một chương trình viết bằng Java sẽ tạo ra các đối tượng có thể gọi các phương thức. Thông qua việc thao tác với các đối tượng này, chương trình có thể thực hiện nhiều công việc khác nhau như hiển thị giao diện, chạy hoạt hình, gửi và nhận thông tin qua mạng. Khi đã xong việc thì các tài nguyên này sẽ được tái chế để sử dụng bởi các đối tượng khác.

Tạo đối tượng

Chúng ta đã biết lớp chính là một bản thiết kế để tạo ra các đối tượng, để tạo mới một đối tượng thì chúng ta sử dụng toán tử new:

Point center = new Point(23, 94);
Rectangle rect1 = new Rectangle(center, 100, 200);

Một câu lệnh tạo đối tượng gồm có 2 phần:

  • Khai báo: là tên lớp/kiểu dữ liệu và tên đối tượng, ở đoạn code trên thì phần khai báo là Point centerRectangle rect1.
  • Khởi tạo: là toán tử new, theo sau là phương thức khởi tạo của lớp đó.

Việc khai báo đối tượng cũng giống như việc khai báo biến thông thường vậy, chúng ta cũng có thể gọi một đối tượng là một biến có kiểu dữ liệu là lớp của nó. Tuy vậy việc khai báo biến với kiểu dữ liệu thông thường và khai báo đối tượng cũng có hơi khác nhau, biến thông thường khi được khai báo nhưng không được khởi tạo (không có phần sau dấu =) thì vẫn có một giá trị mặc định nào đó, chẳng hạn như int thì là 0, String thì là ""… nhưng đối tượng đối tượng thì chúng lại không có một giá trị mặc định nào cả. Việc khai báo một đối tượng mà không khởi tạo sẽ không thực sự tạo ra một đối tượng, chúng ta phải khởi tạo cho chúng thì mới có thể sử dụng được.

Khi chúng ta sử dụng toán tử new để khởi tạo một đối tượng, thì hệ điều hành sẽ cấp phát bộ nhớ cho đối tượng đó và gửi về địa chỉ bộ nhớ cho đối tượng đó.

Theo sau toán tử new là phương thức khởi tạo của lớp đó, và địa chỉ bộ nhớ của đối tượng đó, nếu muốn biết chúng ta có thể in ra như thường:

Point center = new Point(50, 50);
System.out.println(center);

Và kết quả sẽ tương tự như thế này:

Point@15db9742

Sử dụng đối tượng

Khi đã tạo đối tượng thì chúng ta có thể làm một số thứ với nó, chúng ta có thể sử dụng giá trị trong thuộc tính của chúng, hoặc gọi các phương thức để thực hiện một công việc nào đó.

Chúng ta có thể trích xuất (tức đọc) dữ liệu từ các trường trong đối tượng thông qua tên của chúng:

class Rectangle {
    private int width = 1280;
    private int height = 720;
    public void display() {
        System.out.println("Width and height are: " + width + ", " + height);
    }
}
Width and height are: 1280, 720

Nếu chúng ta truy xuất các trường của đối tượng ở bên ngoài thì chúng ta phải ghi rõ ra tên đối tượng, theo sau là dấu chấm rồi tới tên trường:

class Rectangle {
    public int width = 1280;
    public int height = 720;
}

class DisplayRectangle {
    void display() {
        Rectangle rect = new Rectangle();
        System.out.println("Width and height are: " + rect.width + ", " + rect.height);
    }
}

Và tất nhiên là các trường phải có phạm vi truy xuất là public.

Để gọi một phương thức của đối tượng thì chúng ta cũng làm giống như truy xuất trường, là ghi tên đối tượng, tiếp theo là dấu chấm rồi tới tên phương thức, và danh sách các tham số nếu có:

class Rectangle {
    private int width = 1280;
    private int height = 720;
    public void area() {
      return width * height;
    }
}

class RectangleArea {
    private Rectangle rect1;
    public static void main(String[] args) {
        System.out.println("Rectangle area: " + rect1.area());
    }
}
Rectangle are: 921600

Trình dọn rác – Garbage collector

Một số ngôn ngữ lập trình hướng đối tượng yêu cầu chúng ta phải theo dõi quá trình tồn tại của các đối tượng, phải xóa các đối tượng sau khi dùng xong vì sẽ có trường hợp chúng ta thoát chương trình nhưng các đối tượng vẫn còn tồn tại và sẽ gây ra lãng phí bộ nhớ.

Tuy nhiên việc theo dõi thủ công này rất mệt mỏi và dễ sinh lỗi, do đó Java có sẵn trình thu dọn tài nguyên, và sẽ xóa toàn bộ các đối tượng khi chương trình kết thúc, chúng ta không cần phải quan tâm đến việc thu dọn rác đó nữa.

Được đăng vào ngày 25/04/2017