Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 49 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
49
Dung lượng
633,29 KB
Nội dung
om th a n co ng c Bộ môn Công nghệ Phần mềm Viện CNTT & TT Trường Đại học Bách Khoa Hà Nội cu u du on g LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG Bài 04 Khởi tạo sử dụng đối tượng CuuDuongThanCong.com https://fb.com/tailieudientucntt Nội dung om c du on g u cu th a n ng Phương thức khởi tạo Các loại phương thức khởi tạo Khai báo khởi tạo đối tượng Sử dụng đối tượng Quản lý nhớ so sánh đối tượng Hủy bỏ đối tượng Ví dụ tập co CuuDuongThanCong.com https://fb.com/tailieudientucntt Bài giảng E-learning om Phương thức khởi tạo, khai báo sử dụng đối tượng ◼ ◼ ◼ ◼ c https://www.youtube.com/watch?v=450maTzSIvA https://www.youtube.com/watch?v=1rLHJJqx98Q Equals == ◼ https://www.youtube.com/watch?v=qQe69w1YF54 Java finalize method cu ◼ th a n Quản lý nhớ: Stack Heap du on g ◼ ng ◼ https://www.youtube.com/watch?v=rw_bPkesNH0 https://www.youtube.com/watch?v=MTCXgdBLrlw https://www.youtube.com/watch?v=XznNdY3Bfvg co ◼ u ◼ ◼ https://www.youtube.com/watch?v=j3fRK7T1pQo CuuDuongThanCong.com https://fb.com/tailieudientucntt Nội dung om c du on g u cu th a n ng Phương thức khởi tạo Các loại phương thức khởi tạo Khai báo khởi tạo đối tượng Sử dụng đối tượng Quản lý nhớ so sánh đối tượng Hủy bỏ đối tượng Ví dụ tập co CuuDuongThanCong.com https://fb.com/tailieudientucntt Phương thức khởi tạo ◼ ng Với kiểu liệu đơn giản, sử dụng toán tử = Với đối tượng → Cần dùng phương thức khởi tạo u cu Student - name - address - studentID - dateOfBirth du on g th a ◼ Lỗi khởi tạo lỗi phổ biến co ◼ c om Dữ liệu cần khởi tạo trước sử dụng n ◼ Nguyễn Thu Hương Nguyễn Hồng Nam Hải Phịng… … Hà Nội… CuuDuongThanCong.com https://fb.com/tailieudientucntt Khởi tạo hủy bỏ đối tượng om Mỗi đối tượng tồn hoạt động hệ điều hành cấp phát vùng nhớ để lưu lại giá trị liệu thành phần Khi tạo đối tượng HĐH gán giá trị khởi tạo cho liệu thành phần ◼ Phải thực tự động trước người lập trình tác động lên đối tượng ◼ Sử dụng hàm/phương thức khởi tạo Ngược lại kết thúc cần phải giải phóng hợp lý tất nhớ cấp phát cho đối tượng ◼ Java: JVM ◼ C++: Hàm hủy (destructor) co u cu ◼ du on g th a n ◼ ng c ◼ CuuDuongThanCong.com https://fb.com/tailieudientucntt Phương thức khởi tạo c om Là phương thức đặc biệt gọi tự động tạo đối tượng Mục đích chính: Khởi tạo cho thuộc tính đối tượng du on g u cu Student - name - address - studentID - dateOfBirth th a n ◼ co ng ◼ Nguyễn Thu Hương Nguyễn Hồng Nam Hải Phịng… … Hà Nội… CuuDuongThanCong.com https://fb.com/tailieudientucntt Phương thức khởi tạo ◼ ◼ Ví dụ: ng co n ◼ Có nhiệm vụ tạo thể lớp Tên constructor trùng với tên lớp Constructor khơng có kiểu liệu trả th a ◼ c om Mỗi lớp phải chứa constructor du on g ◼ cu u public BankAccount(String o, double b){ owner = o; balance = b; } CuuDuongThanCong.com https://fb.com/tailieudientucntt Phương thức khởi tạo om Phương thức khởi tạo dùng định truy cập c ◼ ◼ ng du on g Một phương thức khởi tạo dùng từ khóa abstract, static, final, native, synchronized Các phương thức khởi tạo không xem thành viên lớp ◼ cu u ◼ th a n ◼ public private Khơng có (mặc định – phạm vi package) co ◼ CuuDuongThanCong.com https://fb.com/tailieudientucntt Nội dung om c du on g u cu th a n ng Phương thức khởi tạo Các loại phương thức khởi tạo Khai báo khởi tạo đối tượng Sử dụng đối tượng Quản lý nhớ so sánh đối tượng Hủy bỏ đối tượng Ví dụ tập co 10 CuuDuongThanCong.com https://fb.com/tailieudientucntt Bộ thu gom rác (Garbage Collector) c om Một tiến trình chạy ngầm gọi đến “thu gom rác” để phục hồi lại phần nhớ mà đối tượng không tham chiếu đến (tái định vị) Các đối tượng khơng có tham chiếu đến gán null Bộ thu gom rác định kỳ quét qua danh sách đối tượng JVM phục hồi tài nguyên đối tượng khơng có tham chiếu th a du on g u ◼ cu ◼ n co ng ◼ 35 CuuDuongThanCong.com https://fb.com/tailieudientucntt Bộ thu gom rác (2) co du on g Không thể ngăn trình thực thu gom rác yêu cầu thực sớm hơn: u ◼ n ◼ Thông thường thực thi thiếu nhớ Tại thời điểm khơng dự đốn trước th a ◼ ng c om JVM định thực thu gom rác: System.gc(); Runtime.gc(); cu ◼ 36 CuuDuongThanCong.com https://fb.com/tailieudientucntt So sánh đối tượng c om Đối với kiểu liệu nguyên thủy, toán tử == kiểm tra xem chúng có giá trị hay khơng Ví dụ: th a du on g u int a = 1; int b = 1; if (a==b) // true cu ◼ n co ng ◼ 37 CuuDuongThanCong.com https://fb.com/tailieudientucntt So sánh đối tượng (2) c om Đối với đối tượng, toán tử == kiểm tra xem hai đối tượng có đồng hay khơng, (có tham chiếu đến đối tượng hay khơng) Ví dụ: du on g ◼ th a n co ng ◼ cu u a b tham chiếu Employee a = new Employee(1); Employee b = new Employee(1); tới đối tượng if (a==b) // false khác a b tham chiếu tới đối tượng Employee a = new Employee(1); Employee b = a; if (a==b) // true 38 CuuDuongThanCong.com https://fb.com/tailieudientucntt So sánh đối tượng (3) c ng u ◼ du on g th a n ◼ Đối với kiểu liệu nguyên thủy: Không tồn Đối với đối tượng: Bất kỳ đối tượng có phương thức này, dùng để so sánh giá trị đối tượng Phương thức equals kế thừa từ lớp Object (nhắc lại kế thừa) Cài đặt mặc định phương thức equals toán tử == Cần cài đặt lại để so sánh đối tượng dựa thuộc tính co ◼ om Phương thức equals ◼ cu ◼ 39 CuuDuongThanCong.com https://fb.com/tailieudientucntt cu u du on g th a n co ng c public class Equivalence { public static void main(String[] args) { Integer n1 = new Integer(47); Integer n2 = new Integer(47); System.out.println(n1 == n2); System.out.println(n1.equals(n2)); } } om Ví dụ == equals – Lớp Integer Lớp Integer (lớp cung cấp Java SDK) cài đặt lại phương thức equals lớp Object, nên n1.equals(n2) trả true CuuDuongThanCong.com https://fb.com/tailieudientucntt 40 .c cu u du on g th a n co ng class Value { int i; } public class EqualsMethod2 { public static void main(String[] args) { Value v1 = new Value(); Value v2 = new Value(); v1.i = v2.i = 100; System.out.println(v1.equals(v2)); } } om Ví dụ sử dụng equals với lớp tự viết Lớp Value (LTV tự viết) chưa cài đặt lại phương thức equals lớp Object, nên v1.equals(v2) trả false, giống toán tử == CuuDuongThanCong.com https://fb.com/tailieudientucntt 41 Nội dung om c du on g u cu th a n ng Phương thức khởi tạo Các loại phương thức khởi tạo Khai báo khởi tạo đối tượng Sử dụng đối tượng Quản lý nhớ so sánh đối tượng Hủy bỏ đối tượng Ví dụ tập co 42 CuuDuongThanCong.com https://fb.com/tailieudientucntt Hủy bỏ đối tượng c u Trong Java: ◼ ◼ Khơng có khái niệm phương thức hủy Sử dụng phương thức finalize() cu ◼ du on g ◼ th a n ◼ Sử dụng phương thức hủy (destructor) Phương thức hủy phương thức tự động gọi trước đối tượng hủy Phương thức hủy thường dùng để dọn dẹp nhớ, thu hồi tài nguyên (VD đối tượng hoạt động cần truy cập tới file/CSDL, cấp phát nhớ động) ng ◼ om Trong C#, C++: co ◼ 43 CuuDuongThanCong.com https://fb.com/tailieudientucntt Phương thức void finalize() om c co ◼ Lớp có phương thức finalize() – thực thi trình thu gom xảy Thường sử dụng cho trường hợp đặc biệt để “tự dọn dẹp” tài nguyên sử dụng đối tượng gc giải phóng ng ◼ n u du on g Có thể coi phương thức hủy (destructor) lớp Java khơng có khái niệm cu ◼ Ví dụ cần đóng socket, file, nên xử lý luồng trước đối tượng bị ngắt bỏ tham chiếu th a ◼ 44 CuuDuongThanCong.com https://fb.com/tailieudientucntt Nội dung om c du on g u cu th a n ng Phương thức khởi tạo Các loại phương thức khởi tạo Khai báo khởi tạo đối tượng Sử dụng đối tượng Quản lý nhớ so sánh đối tượng Hủy bỏ đối tượng Ví dụ tập co 45 CuuDuongThanCong.com https://fb.com/tailieudientucntt Bài tập ◼ ◼ ◼ ◼ c Tự tạo phương thức getter, setter cho đủ dùng Đảm bảo đóng gói, che dấu liệu Lớp Test ◼ ng Student(String name, int year) th a ◼ co ◼ n ◼ du on g ◼ name year phương thức khởi dựng Nhập số phần tử cho mảng Student (trong lớp học) Nhập Student In danh sách tên Student lớp hiển thị tổng số tuổi Student u ◼ om Viết lớp Student cu ◼ 46 CuuDuongThanCong.com https://fb.com/tailieudientucntt om Student.java du on g th a n public Student(int year, String name) { this.year = year; this.name = name; } co ng c package example; public class Student { private int year; private String name; cu u public int getYear() { return year; } public String getName() { return name; } 47 } CuuDuongThanCong.com https://fb.com/tailieudientucntt .c du on g th a n co ng package example; import java.util.Scanner; public class Test { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int N = scanner.nextInt(); Student[] cls = new Student[N]; for (Student s: cls){ String name = scanner.next(); int year = scanner.nextInt(); s = new Student(year, name); } om Test.java cu u int total = 0; System.out.println("Danh sach lop: "); for (int i=0; i