
Chuong 05 - Tao va su dung doi tuong
Bé m«n C«ng nghÖ phÇn mÒm KHOA CÔNG NGHỆ THÔNG TIN TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG VỚI JAVA
Chương 05. Tạo và sử dụng đối tượng
Nguyễn Thị Thu Trang [email protected]
Mục tiêu bài học
Phương thức khởi tạo, chồng phương thức khởi tạo Khai báo và khởi tạo đối tượng Sử dụng đối tượng Quản lý bộ nhớ
Department of Software Engineering
Nội dung
1. Phương thức khởi tạo
2. Chồng phương thức khởi tạo
3. Sử dụng đối tượng
4. Quản lý bộ nhớ trong Java
5. So sánh đối tượng
Department of Software Engineering
1
1. Phương thức khởi tạo (Constructor)
Dữ liệu nên được
Lỗi khởi tạo là một trong các lỗi phổ biến Phương thức khởi tạo Là phương thức đặc biệt
Nhằm mục đích chính là
Department of Software Engineering
1. Phương thức khởi tạo (2)
Mỗi lớp phải
Có nhiệm vụ tạo ra Tên Constructor Ví dụ:
Department of Software Engineering
1. Phương thức khởi tạo (3)
Sử dụng từ khóa new với constructor để tạo ra các đối tượng mới cho lớp: Cú pháp:
Ví dụ:
Department of Software Engineering
2
1. Phương thức khởi tạo (4)
Phương thức khởi tạo không có giá trị trả về, nhưng khi sử dụng với từ khóa new
Department of Software Engineering
1. Phương thức khởi tạo (5)
Phương thức khởi tạo có thể dùng các chỉ định truy cập
Một phương thức khởi tạo không thể dùng các từ khóa abstract, static, final, native, synchronized. Các phương thức khởi tạo không được xem như là thành viên của lớp.
Department of Software Engineering
1. Phương thức khởi tạo (6)
Phương thức khởi tạo mặc định (default constructor) Là phương thức khởi tạo nếu ta không định nghĩa một hàm khởi tạo trong lớp. Phương thức khởi tạo mặc định do Java cung cấp
Khi đã định nghĩa một phương thức khởi tạo, nên
Department of Software Engineering
3
Ví dụ 1
Phương thức khởi tạo mặc định do Java cung cấp: public class BankAccount{ private String owner; private double balance; } ...
Department of Software Engineering
Ví dụ 2
Phương thức khởi tạo tự viết: public class BackAccount{ private String owner; private double balance;
} ... BankAccount account2 = new BankAccount();
Department of Software Engineering
Nội dung
1. Phương thức khởi tạo
2. Chồng phương thức khởi tạo
3. Sử dụng đối tượng
4. Quản lý bộ nhớ trong Java
5. So sánh đối tượng
Department of Software Engineering
4
2. Chồng phương thức khởi tạo
Trong nhiều tình huống khác nhau ta cần khởi tạo đối tượng theo nhiều cách khác nhau Cần xây dựng các hàm khởi tạo khác nhau cho đối tượng. Các phương thức khởi tạo
Việc chồng phương thức khởi tạo giúp
Department of Software Engineering
Ví dụ 1
public class BankAccount{ private String owner; private double balance;
public void setOwner(String o){ owner = o; } ... } ...
Department of Software Engineering
Ví dụ 2
public class BankAccount{ private String owner; private double balance;
} public class Test{ public static void main(String args[]){ BankAccount unknown_acc = new BankAccount();
} }
Department of Software Engineering
5
Nội dung
1. Phương thức khởi tạo
2. Chồng phương thức khởi tạo
3. Sử dụng đối tượng
4. Quản lý bộ nhớ trong Java
5. So sánh đối tượng
Department of Software Engineering
3.1. Khai báo và khởi tạo đối tượng
Đối tượng được
Các đối tượng phải được
Kiểu của đối tượng là lớp các đối tượng Ví dụ:
Department of Software Engineering
3.1. Khai báo và khởi tạo đối tượng (2)
Đối tượng nên được khởi tạo trước khi sử dụng Sử dụng toán tử Sử dụng toán tử Toán tử new dùng để tạo ra một đối tượng mới
Một đối tượng có thể khởi tạo Đối tượng được thao tác thông qua Tham chiếu đóng vai trò gần giống như Ví dụ: BankAccount acc1;
Department of Software Engineering
6
3.1. Khai báo và khởi tạo đối tượng (3)
Mảng các đối tượng được khai báo giống như mảng dữ liệu cơ bản Mảng các đối tượng được khởi tạo mặc định với giá trị null. Ví dụ: Employee emp1 = new Employee(123456); Employee emp2; emp2 = emp1; Department dept[] = new Department[100]; Test[] t = {new Test(1),new Test(2)};
Department of Software Engineering
3.2. Sử dụng đối tượng
Đối tượng cung cấp các hoạt động phức tạp hơn các kiểu dữ liệu nguyên thủy Đối tượng đáp ứng lại các thông điệp được sử dụng để gửi một thông điệp đến một đối tượng
Department of Software Engineering
3.2. Sử dụng đối tượng (2)
Để gọi thành viên (dữ liệu hoặc thuộc tính) của lớp hoặc đối tượng, sử dụng toán tử "." Nếu gọi phương thức ngay trong lớp thì toán tử "." không cần thiết.
Department of Software Engineering
7
Ví dụ
public class BankAccount{ private String owner; private double balance; public BankAccount(String name){ setOwner(name); } public void setOwner(String o){ owner = o; } public String getOwner(){ return owner; } ... } public class Test{ public static void main(String args[]){ BankAccount acc1 = new BankAccount();
BankAccount acc2 = new BankAccount("Hong");
}
Department of Software Engineering
3.3. Thành phần static
Nếu muốn sử dụng mà không muốn tạo ra đối tượng của lớp đó Khai báo là static Thành phần tĩnh Thay đổi giá trị của một thành phần tĩnh trong một đối tượng của lớp
Các thành phần tĩnh có thể được truy nhập mà không cần
Department of Software Engineering
3.4. Thành phần hằng
Một thuộc tính không thể thay đổi giá trị trong quá trình sử dụng. Cú pháp khai báo hằng:
Ví dụ: public static final int VAL_THREE = 39; private final int[] A = { 1, 2, 3, 4, 5, 6 };
Department of Software Engineering
8
3.4. Thành phần final (2)
Thông thường các hằng số liên quan đến lớp được khai báo là static final nhằm giúp truy cập dễ dàng Một quy ước chung là chỉ sử dụng các ký tự hoa trong tên hằng
Department of Software Engineering
Nội dung
1. Phương thức khởi tạo
2. Chồng phương thức khởi tạo
3. Sử dụng đối tượng
4. Quản lý bộ nhớ trong Java
5. So sánh đối tượng
Department of Software Engineering
4. Quản lý bộ nhớ trong Java
Java không sử dụng con trỏ nên các địa chỉ bộ nhớ không thể bị
Không xảy ra các vấn đề cố hữu đối với người dùng như định vị và tái định vị bộ nhớ, quản lý bộ nhớ do JVM kiểm soát. Lập trình viên sẽ không cần quan tâm đến việc ghi dấu các phần bộ nhớ đã cấp phát trong heap để giải phóng sau này.
Department of Software Engineering
9
4.1. Bộ nhớ Heap và Stack
String s = new String("hello");
Bộ nhớ
Giá trị cục bộ trong bộ nhớ
Giá trị của dữ liệu nguyên thủy được
Department of Software Engineering
4.1. Bộ nhớ Heap và Stack (2)
String s = new String("hello"); String t = s;
Department of Software Engineering
4.1. Bộ nhớ Heap và Stack (3)
String s = new String("hello"); String t = s; int i = 201; int j = i;
Department of Software Engineering
10
4.2. Bộ thu gom rác (Garbage Collector)
Một tiến trình chạy ngầm gọi đến bộ "thu gom rác" để phục hồi lại phần bộ nhớ mà các đối tượng không tham chiếu đến (tái định vị bộ nhớ)
phục hồi các tài nguyên của các đối tượng không có tham chiếu.
Department of Software Engineering
4.2. Bộ thu gom rác (2)
JVM quyết định khi nào thực hiện việc thu gom rác: Thông thường sẽ thực thi khi thiếu bộ nhớ Tại thời điểm không dự đoán trước Không có thể ngăn quá trình thực hiện của bộ thu gom rác nhưng có thể yêu cầu thực hiện sớm hơn: System.gc(); hoặc Runtime.gc();
Department of Software Engineering
4.2. Bộ thu gom rác (3)
Phương thức finalize()
Phương thức này thường chỉ sử dụng cho các trường hợp đặc biệt (ví dụ như xóa các vùng nhớ) do tính không dự đoán trước của bộ thu gom rác Các vấn đề như mở sockets, files, ... nên được xử lý trong luồng chương trình chính trước khi các đối tượng được ngắt bỏ tham chiếu. Có thể coi là hàm hủy (destructor) của lớp mặc dù Java không có khái niệm này.
Department of Software Engineering
11
Nội dung
1. Phương thức khởi tạo
2. Chồng phương thức khởi tạo
3. Sử dụng đối tượng
4. Quản lý bộ nhớ trong Java
5. So sánh đối tượng
Department of Software Engineering
5.1. Toán tử quan hệ ==
Đối với các kiểu dữ liệu nguyên thủy, toán tử == kiểm tra xem chúng có
Ví dụ:
int a = 1; int b = 1; if (a==b)...
Department of Software Engineering
5.1. Toán tử quan hệ == (2)
Đối với các đối tượng, toán tử == kiểm tra xem hai đối tượng
Ví dụ: Employee a = new Employee(1); Employee b = new Employee(1); if (a==b)...
Employee a = new Employee(1); Employee b = a; if (a==b)...
Department of Software Engineering
12
5.2. Phương thức equals
Đối với kiểu dữ liệu nguyên thủy
Đối với các đối tượng: Bất kỳ đối tượng nào cũng So sánh
Department of Software Engineering
Ví dụ 1 (== và !=)
public class Equivalence { public static void main(String[] args) {
System.out.println( ); System.out.println( ); } }
Department of Software Engineering
Ví dụ 2 (equals)
public class EqualsMethod { public static void main(String[] args) {
System.out.println( ); }
Department of Software Engineering
13
Ví dụ 3 (equals)
class Value { int I ; } public class EqualsMethod2 { public static void main(String[] args) {
System.out.println( ); } }
Department of Software Engineering
14
Bạn đang đọc truyện trên: Truyen247.Pro