1. Tạo đối tượng
Chà, chúng ta đã đến phần tạo đối tượng. Bạn đã gặp phải điều này trước đây, nhưng bây giờ chúng tôi sẽ phân tích chủ đề này chi tiết hơn. Nó thực sự rất dễ dàng để tạo ra các đối tượng.
Để tạo một đối tượng, bạn cần sử dụng toán tử new . Tạo một đối tượng trông giống như thế này:
new Class(arguments)
Sau khi tạo một đối tượng, chúng ta thường ngay lập tức lưu một tham chiếu đến nó trong một biến, biến này thường chia sẻ cùng loại với đối tượng đã tạo. Điều đó có nghĩa là khi tạo một đối tượng, bạn thường thấy mã như sau:
Class name = new Class(arguments)
Việc tạo một biến mới ở đâu và mã ở bên phải của dấu bằng là việc tạo một đối tượng mới có loại là .Class name
Class
Ví dụ:
Mã số | Ghi chú |
---|---|
|
Tạo một Object đối tượng |
|
Tạo một Cat đối tượng |
|
Tạo một Scanner đối tượng |
Các lập trình viên thường đặt tên các biến theo tên các lớp của chúng, nhưng với một chữ cái viết thường. Đối với một lập trình viên mới làm quen, mã như vậy có thể gây nhầm lẫn:
Mã số |
---|
|
|
|
Không có gì sai với mã này — đây là mã bình thường nhất, trong đó một biến được tạo và sau đó được khởi tạo ngay lập tức bởi một đối tượng cùng loại với nó.
Ở bên trái của dấu bằng, chúng ta có việc tạo một biến. Ở bên phải, việc tạo ra một đối tượng. Đó là nó.
2. Trình tạo
Bạn có thể đã thấy rằng một số đối số thường xuyên được chuyển khi tạo một đối tượng. Hơn nữa, các đối số được truyền cho một số đối tượng, nhưng không truyền cho các đối tượng khác. Làm thế nào để toàn bộ cơ chế này với các đối số hoạt động?
Mọi thứ ở đây cũng đơn giản: mỗi lớp có một phương thức (hoặc các phương thức) đặc biệt chịu trách nhiệm xử lý các đối số được truyền khi tạo một đối tượng. Các phương thức này được gọi là hàm tạo . Hoặc khi chúng ta đang nói về chỉ một: hàm tạo .
Việc phân biệt một phương thức khởi tạo với một phương thức thông thường rất dễ dàng. Phương pháp này có hai đặc điểm nổi bật:
- tên của hàm tạo giống với tên của lớp của nó (và bắt đầu bằng chữ in hoa)
- một hàm tạo không có kiểu trả về.
Nói chung, đây là những gì nó thường trông giống như:
modifiers Class(arguments)
{
Code
}
Ví dụ:
Mã số | Ghi chú |
---|---|
|
Point Point lớp xây dựng lớp |
|
Tạo một đối tượng của Point lớp. Hàm tạo của lớp sẽ được gọi. |
Chú ý hàm tạo trông như thế nào: nó không có kiểu trả về và tên của nó giống với tên lớp.
Và một điều nữa: hãy xem mã bên trong hàm tạo. Các tham số của hàm tạo có cùng tên với các trường của lớp: x và y. Đó là thông lệ tiêu chuẩn để tránh tạo ra các tên thông số mới. Các tên giống như tên của các trường của lớp. Xung đột tên được giải quyết bằng cách sử dụng từ khóa này.
3. Gọi hàm tạo
Khi sử dụng toán tử mới và một lệnh như " Lớp mới ( đối số )" để tạo một đối tượng mới, có hai điều xảy ra:
- Máy Java tạo một đối tượng có kiểu là Lớp
- Máy Java gọi hàm tạo của đối tượng và chuyển các đối số của bạn
Là một lập trình viên, bạn có thể quyết định những hàm tạo nào mà lớp của bạn nên có và những tham số nào mà những hàm tạo này nên có.
Giả sử bạn quyết định tạo một lớp để theo dõi mèo tại nơi trú ẩn của động vật. Sau đó, lớp học của bạn Cat
có thể trông như thế này:
|
|
|
Điều này được cho phép |
|
Nhưng điều này không được phép Mã này sẽ không biên dịch. |
|
Và điều này là không được phép. Mã này sẽ không biên dịch. |
Lớp Cat
chỉ có một hàm tạo với các tham số tên và tuổi. Bởi vì không có hàm tạo nào khác, bạn phải chuyển tên ( name
) và tuổi ( age
) của con mèo làm đối số khi tạo một đối tượng. Truyền đối số cho hàm tạo không phải là tùy chọn .
4. Nhiều hàm tạo
Nhưng nếu cần, bạn có thể thêm nhiều hàm tạo vào lớp. Không có giới hạn về số lượng hàm tạo hoặc tham số của chúng. Khi bạn tạo một đối tượng, trình biên dịch sẽ tự động chọn hàm tạo phù hợp với các tham số
Mã số | Ghi chú |
---|---|
|
|
|
Điều này được cho phép: hàm tạo đầu tiên sẽ được gọi |
|
Điều này được cho phép: hàm tạo thứ hai sẽ được gọi |
|
Nhưng điều này không được phép Mã này sẽ không biên dịch. |
Chúng tôi quyết định tính đến thực tế là tuổi của một con mèo có thể không được biết đến. Để xử lý trường hợp này, chúng tôi đã thêm hằng số đặc biệt UNKNOWN
cùng với hàm tạo chỉ có một tham số — tên của con mèo.
Lưu ý rằng chúng tôi vẫn khởi tạo cả hai biến bên trong cả hai hàm tạo. Chúng tôi thay thế các tham số không xác định/thiếu bằng hằng số UNKNOWN
.
Nếu không có giá trị nào được gán cho biến tuổi, thì nó sẽ có giá trị mặc định là 0. Xét cho cùng, một chú mèo con được tìm thấy trên đường phố cũng có thể là 0 tuổi. Điều đó có nghĩa là số 0 trong biến tuổi không nhất thiết có nghĩa là "không xác định tuổi".
5. Hàm tạo mặc định
Nếu bạn muốn các đối tượng của mình được khởi tạo mà không có bất kỳ tham số nào, thì lớp của bạn cần khai báo một hàm tạo không có đối số.
Hàm tạo không có tham số không nhất thiết là hàm tạo không có mã. Một hàm tạo như vậy có thể chứa mã khởi tạo các biến có giá trị bắt đầu:
Mã số | Ghi chú |
---|---|
|
|
|
Điều này được cho phép: hàm tạo đầu tiên sẽ được gọi |
|
Điều này được cho phép: hàm tạo thứ hai sẽ được gọi |
Nhà xây dựng mặc định
Có một điểm rất quan trọng mà bạn nên biết và ghi nhớ.
Nếu lớp của bạn không khai báo một hàm tạo nào , thì trình biên dịch sẽ thêm một hàm tạo mặc định, là hàm tạo không có đối số với công cụ sửa đổi công khai.
Nhưng nếu lớp của bạn khai báo dù chỉ một hàm tạo thì sẽ không có hàm tạo mặc định nào được thêm vào và bạn sẽ cần tự thêm hàm tạo đó nếu muốn.
Mã số | Ghi chú |
---|---|
|
|
|
Điều này được cho phép: hàm tạo mặc định sẽ được gọi |
GO TO FULL VERSION