Bài học theo mô-đun (1/2)
Lớp và đối tượng
Java là ngôn ngữ tập trung vào Lập trình hướng đối tượng (OOP). Trong OOP, chúng tôi mô hình hóa thế giới thực bằng cách sử dụng các đối tượng. Một đối tượng có trạng thái (dữ liệu) và hành vi (hành động).
Lớp và đối tượng
- Lớp: Là một bản thiết kế (hoặc mẫu) xác định các thuộc tính và hành vi của một loại đối tượng.
- Đối tượng: Đây là một thể hiện cụ thể được tạo từ một lớp.
Ví dụ: nếu Car là lớp thì ô tô của bạn trong gara là đối tượng thực tế.
Trường phiên bản và hàm tạo
Dữ liệu bên trong một lớp được gọi là trường phiên bản (hoặc thuộc tính). Để khởi tạo trạng thái của một đối tượng tại thời điểm tạo ra nó, chúng ta sử dụng một phương thức đặc biệt gọi là hàm tạo.
Hàm khởi tạo có cùng tên với lớp và không có kiểu trả về (thậm chí không có void).
class Dog {
// Instance fields
String name;
int age;
// Constructor
public Dog(String name, int age) {
this.name = name; // 'this' refers to the current object's field
this.age = age;
}
}Tạo một đối tượng với new
Để tạo một đối tượng trong bộ nhớ, chúng ta sử dụng từ khóa new theo sau là hàm tạo lớp:
public class Main {
public static void main(String[] args) {
// Creating a Dog object
Dog myDog = new Dog("Fido", 3);
// Accessing fields
System.out.println(myDog.name + " is " + myDog.age + " years old.");
}
}Tài liệu tham khảo this
Từ khóa this trong Java đề cập đến đối tượng hiện tại mà hàm tạo hoặc phương thức đang được thực thi trên đó. Nó chủ yếu được sử dụng để tránh sự mơ hồ khi các tham số của hàm tạo có cùng tên với các trường đối tượng của đối tượng (tạo bóng biến):
class User {
String username;
public User(String username) {
this.username = username; // this.username is the instance field, username is the parameter
}
}Phân bổ bộ nhớ: Stack vs Heap
Hiểu cách Java phân bổ bộ nhớ là điều cần thiết:
- Ngăn xếp: Đây là vùng bộ nhớ nhanh và có tổ chức, nơi lưu trữ các biến nguyên thủy và tham chiếu đối tượng (địa chỉ bộ nhớ) cục bộ của các phương thức.
- Heap: Đó là vùng bộ nhớ động và lớn hơn, nơi các đối tượng thực tế được phân bổ (sử dụng từ khóa
new).
Khi chúng tôi khai báo Dog myDog = new Dog("Fido", 3);:
- Tham chiếu
myDogđược tạo trên Ngăn xếp. - Đối tượng
Dogthực tế cùng với dữ liệu của nó được tạo trên Heap. - Biến
myDogtrỏ đến vị trí của đối tượng trên Heap.
Hãy tự mình thử
Hoàn thành lớp Person bằng cách thêm tên trường và hàm tạo thích hợp. Sau đó, trong phương thức chính, tạo một đối tượng Person có tên p với tên Alice.
Hiển thị gợi ý
Viết `String name;` bên trong lớp, khai báo hàm tạo `public Person(String name) { this.name = name; }` và khởi tạo nó bằng `new Person('Alice')`.
Giải pháp khả dụng sau 3 lần thử
Tạo một lớp Sách với các trường tiêu đề (Chuỗi) và các trang (int), một hàm tạo hoàn chỉnh và khởi tạo trong phương thức chính một cuốn sách có tên b với tiêu đề Moby Dick và 600 trang.
Hiển thị gợi ý
Hãy nhớ xác định cả hai trường trong Sách, ánh xạ chúng trong hàm tạo bằng cách sử dụng `this.title = title;` và `this.pages = pages;` và sử dụng `new Book('Moby Dick', 600)`.
Giải pháp khả dụng sau 3 lần thử
Tạo một lớp Sản phẩm với tên trường (Chuỗi) và giá (gấp đôi) và một hàm tạo khởi tạo cả hai trường. Trong phương thức main tạo một đối tượng Product tên p với tên Laptop và giá 999,99.
Hiển thị gợi ý
Khai báo các trường `String name;` và `double price;` trong Sản phẩm, gán chúng trong hàm tạo với `this.name = name;` và `this.price = price;`, và cuối cùng tạo đối tượng trong phương thức chính.
Giải pháp khả dụng sau 3 lần thử