You are on page 1of 12

1.

Lớp và đối tượng trong JAVA


 Các đối tượng được thao tác qua các tham chiếu (references) và phải được tạo
tường minh bởi toán tử new.
+ Các tham chiếu đối tượng đóng vai trò giống như các con trỏ.

Ở đây, GradeBook là 1 thể hiện (đối tượng) của lớp và được tham chiếu bởi
myGradeBook.
 Các phạm vi truy cập
+ Public : có thể truy cập ở bất cứ đâu và bởi bất kỳ ai.
+ Protected : chỉ có thể truy cập bởi lớp đó và các lớp con hoặc các lớp trong
cùng gói (package).
+ Default : chỉ có thể được truy cập bởi các lớp trong cùng gói.
+ Private : chỉ có thể truy cập bởi lớp đó.

 Nạp chồng phương thức (overloading) : có thể định nghĩa các phương thức trùng
tên nhưng phải khác danh sách tham số.

 Phương thức khởi tạo (Constructor) :


+ Tên trùng với tên lớp.
+ Không nhận giá trị trả lại.
+ Được gọi tự động mỗi khi đối tượng được tạo (bởi toán tử new). Nếu không
khai báo, hệ thống sẽ gọi phương thức khởi tạo mặc định – phương thức rỗng.
 Tính bao gói (encapsulation) : “không lộ các cấu trúc dữ liệu bên trong”.
+ Các đối tượng lưu giữ dữ liệu và mã lệnh : không lộ ra cho người dùng cuối.
 Lớp là khuôn mẫu (blueprint/template) được sử dụng để tạo đối tượng
 Mỗi đối tượng là 1 thể hiện của 1 lớp
 Tham chiếu không phải là đối tượng
 Biến thể hiện và biến cục bộ
2. Các kiểu dữ liệu
 Các kiểu dữ liệu nguyên thuỷ:
- Số : byte, int, long, float, double,… không có unsigned
- Logic : boolean (true/false)
- Ký tự : char
=> Dữ liệu nguyên thuỷ không phải là các đối tượng
- Có các lớp tương ứng gói kiểu nguyên thuỷ (wrapper classes) : Integer, Float, …

 Dữ liệu được lưu ở đâu?


- Registers : lập trình viên không thể can thiệp
- Stack : lưu các tham chiếu đối tượng
- Heap : lưu các đối tượng
- Vùng tĩnh (static storage) : dữ liệu dùng trong suốt quá trình chương trình thực
thi
- Vùng hằng (constant storage) : giá trị hằng thường được lưu trực tiếp trong
phần mã nguồn chương trình
- Vùng non-RAM : lưu các luồng
 Các tham chiếu :
- Lưu “địa chỉ” đối tượng trong bộ nhớ máy tính
- Được lưu trong vùng nhớ stack/static
 Toán tử New :
- cấp phát vùng nhớ động
- Được tạo trong bộ nhớ Heap
 Phép gán “=” :
- Sao chép nội dung của tham chiếu
- 2 tham chiếu sẽ tham chiếu đến cùng đối tượng
 Toán tử “==” và “!=” :
So sánh nội dung các biến :
- Giá trị của dữ liệu nguyên thuỷ
- Giá trị của các tham chiếu :
+ Chỉ kiểm tra xem có tham chiếu đến cùng đối tượng
+ Không so sánh nội dung các đối tượng
 Phương thức “equals” :
- Đuợc định nghĩa trước, sẵn sàng để dùng
- Do người dùng định nghĩa :
+ “equals” phải được định nghĩa, nếu không sẽ trả lại false
+ ghi đè / overriding
 Truyền tham số :
- Truyền giá trị
+ Giá trị tham số được đưa vào stack
+ Là cơ chế duy nhất được dùng trong Java, Java không hỗ trợ truyền
theo tham chiếu
- Hai loại tham số :
+ Dữ liệu nguyên thuỷ
++ tác động đến bản sao giá trị
+ Tham chiếu đối tượng
++ Tham chiếu (nơi lưu đối tượng) được sao chép
++ Không sao chép nội dung đối tượng
 Tham chiếu “this” :
- Trỏ đến chính đối tượng đó
- Công dụng của this :
+ Tham chiếu tường minh đến thuộc tính và phương thức của đối tượng
+ Truyền tham số và trả lại giá trị
+ Dùng để gọi phương thức khởi tạo : chỉ được gọi từ phương thức khởi
tạo khác và chỉ được gọi 1 lần (ở lệnh đầu tiên)

3. Static – Final – Package


 Phương thức và thuộc tính có thể được khai báo là thành phần tĩnh (static)
- Độc lập với đối tượng
- Có thể được truy cập không qua đối tượng bằng cách sử dụng tên lớp
 Thuộc tính tĩnh :
- Thuộc về lớp
- Được chia sẻ giữa các đối tượng của lớp
 Phương thức tĩnh
- Không thể truy cập các thành phần thông thường khác (non-static)
- Không thể gọi các phương thức non-static
 Nếu phương thức tĩnh gọi đến 1 phương thức hoặc thuộc tính thông qua tên lớp
-> phương thức hoặc thuộc tính đó phải là tĩnh. Còn nếu thông qua đối tượng thì
phương thức, thuộc tính đó tùy ý non static / static
 Các lớp đối tượng được chia thành các gói :
- Nếu không khai báo thì các lớp thuộc gói default
- Các lớp trong cùng 1 tệp mã nguồn luôn thuộc cùng 1 gói
 Tồn tại mức truy cập gói (package)
- Mức pakage là mặc định (nếu không khai báo tường minh là public hay private)
- Các đối tượng của các lớp thuộc cùng gói có thể truy cập đến thành phần non-
private của nhau
- Chỉ có thể tạo (new) đối tượng của lớp được khai báo là public của gói khác
 Final variables :
- Constants - hằng
- Chúng ta không thể thay đổi giá trị của final variable 1 khi nó đã được khởi tạo
- Khởi tạo tại thời điểm khai báo biến hoặc không khởi tạo trong thời điểm khai
báo biến nhưng phải khởi tạo trong phương thức khởi tạo của lớp.
 Final Methods
- Không thể bị cài đè
- Lớp con có thể gọi đến final method của lớp cha nhưng không thể cài đè nó (sẽ
bị chạy lỗi)
 Final classes
- Không thể được kế thừa

4. Thừa kế (Inheritance)
 Vì sao cần sử dụng lại? : giảm chi phí sản xuất, đảm bảo chất lượng tốt
 Sử dụng lại thông qua quan hệ has – a (composition)
Ví dụ :
class Employee{

int id;

String name;

Address address; //Address la mot lop

...

Lớp Employee có 1 address là tham chiếu thực thể -> mối quan hệ là Employee
HAS – A address.
 Sử dụng lại thông qua quan hệ is – a (inheritance)
Khi bạn kế thừa từ 1 class hiện có
Ví dụ :

 Kế thừa :
- Sử dụng lại thông qua quan hệ “is – a”
- Thừa hưởng lại các thuộc tính, phương thức đã có
- Chi tiết hoá cho phù hợp với đối tượng mới
+ Thêm thuộc tính, phương thức mới
+ Hiệu chỉnh, cài đặt chi tiết phương thức được thừa kế
- Lớp cơ sở : lớp cha, lớp dẫn xuất : lớp con
- Lớp dẫn xuất không kế thừa các phương thức khởi tạo nhưng khi khởi tạo đối
tượng con thì Java sẽ tự động gọi đến constructor cha và có thể gọi constructor
của lớp cơ sở thông qua từ khoá super
- Nếu lớp cơ sở có phương thức khởi tạo mặc định (phương thức khởi tạo
không tham số) : có thể gọi hoặc không gọi constructor của lớp cơ sở
- Nếu lớp cơ sở không có constructor mặc định (phương thức khởi tạo không
tham số) : bắt buộc phải gọi constructor của lớp cơ sở 1 cách tường minh
- Định nghĩa lại (overriding)
+ Phạm vi truy cập : phương thức được định nghĩa lại có phạm vi truy cập
không chặt hơn phạm vi truy cập của lớp cơ sở
+ Kiểu giá trị trả lại như nhau trong phương thức được định nghĩa lại
+ Phương thức private : không được kế thừa ở lớp dẫn xuất, không được
coi là “định nghĩa lại”

5. Đa hình
 Kiểu đối tượng tham chiếu trỏ tới
- Thông thường
Dog d = new Dog()
- Đa hình cho phép tham chiếu có thể trỏ đến đối tượng là dẫn xuất của kiểu dữ
liệu được khai báo cho tham chiếu đó
Animal d = new Dog()

Tham chiếu d sẽ trỏ đến đối tượng có những thuộc tính và phương thức của
Animal với những phương thức được override trong Dog
 upCasting : biến tham chiếu của lớp cha tham chiếu tới đối tượng của lớp con
Ví dụ : Animal d = new Dog()
 downCasting : ngược lại
Ví dụ :
Animal animal = new Cat();
Cat cat = (Cat) animal;
Chỉ down casting trên những tham chiếu đối tượng đã up casting
 Toán tử instanceof : được sử dụng để kiểm tra xem 1 đối tượng có phải là thể
hiện của 1 kiểu dữ liệu cụ thể không
 Lớp trừu tượng (abstract class) : Có thể tạo ra các lớp cơ sở (khuôn mẫu) để các
lớp dẫn xuất kế thừa mà không tạo ra các đối tượng thực của lớp.
Khai báo lớp trừu tượng – abstract class :
- Không thể tạo ra đối tượng nhưng các tham chiếu đối tượng thuộc các kiểu
lớp trừu tượng thì được cho phép.
- Xây dựng lớp khuôn mẫu với các thuộc tính và hành vi mà các lớp dẫn xuất bắt
buộc phải có
- Có phương thức thường và phương thức trừu tượng
 Phương thức trừu tượng : để thống nhất giao diện, có thể khai các phương thức
trừu tượng (abstract method) tại các lớp cơ sở và cài đặt chi tiết tại các lớp dẫn
xuất.
- Bắt buộc phải định nghĩa lại tại lớp dẫn xuất.
- Khai báo trong lớp trừu tượng.
 Lớp cụ thể (concrete class) : là các lớp đủ đặc trưng để có thể tạo thực thể.
 Giao diện (Interface)
- Là mức trừu tượng cao
- bao gồm :
+ Phương thức trừu tượng – abstract method
+ Hằng số : mặc định là public static final
+ Mặc định là public
+ Không được có phương thức khởi tạo

6. Lỗi và Ngoại lệ
 Ngoại lệ : các trường hợp hoạt động không bình thường
- ArrayIndexOutOfBoundsException : truy cập mảng với chỉ số không hợp lệ
- NullPointerException : dùng tham chiếu Null để truy cập biến thực thể,…
- InputMismatchException : nhập vào kiểu dữ liệu không hợp lệ

 Ném ngoại lệ (throw an exception)

 Try và catch
Cú pháp :
Try {
// mã thông thường, ném ngoại lệ
}
Catch (TypeOfException e) {
// mã xử lý ngoại lệ
}
- Một khối catch có thể bắt :
+ Ngoại lệ của kiểu được mô tả : catch (IOException ioe) {…} có thể bắt
ngoại lệ của kiểu IOException
+ Khối catch dành cho ngoại lệ lớp cha có thể bắt được ngoại lệ lớp con
Catch (IOException ioe) {…} cũng có thể bắt được ngoại lệ của kiểu
FileNotFoundException, EOFException,…
- Ngoại lệ không được bắt : không có khối catch nào bắt được nó, điều khiển
quay về nơi gọi phương thức hiện tại hoặc chương trình dừng do lỗi run-time
 Finally block :
- Có thể có hoặc không đi kèm với try/catch
- Nếu có, khối finally được đặt sau khối catch cuối cùng
- Bất kể ngoại lệ có xảy ra, có được bắt hay không thì khối finally cũng được thực
hiện, ngoại trừ chương trình dừng sớm bằng phương thức System.exit

7. Lớp tổng quát


 Kế thừa :
-Lớp con phải chỉ định rõ kiểu tổng quát của lớp tổng quát
Ví dụ :
Public class ContactEntry extends Pair<String, Integer> {
}
- Hoặc chỉ định rõ 1 phần trong các kiểu tổng quát
Ví dụ :
Public class ContactEntry<V> extends Pair<String, V> {
}
- Giữ nguyên tất cả các kiểu tổng quát
Ví dụ :
Public class ContactEntry<K, V> extends Pair<K, V> {
}
- Thêm tham số tổng quát
Ví dụ :
Public class ContactEntry<K, V, T> extends Pair<K, V> {
}

8. Design Pattern
 Singleton

- Thuộc nhóm Creational Design


- Chức năng : Singleton đảm bảo chỉ duy nhất 1 new instance được tạo ra và nó
sẽ cung cấp cho bạn 1 method truy cập đến thực thể đó

 Adapter Pattern
- Thuộc nhóm Structural
- Chức năng : làm cho 2 giao diện không liên quan đến nhau có thể làm việc cùng
nhau

You might also like