You are on page 1of 9

CHECKLIST

Lecture Checklist

Code 25e-BM/HR/HDCV/FSOFT
Version 1.0
Effective Date 1-Jul-2020
678174954.xlsx v1.7
Lecture Checklist
Project Code: YES
Reviewer(s): NO
Version of the work product: N/A
Review date:
Work product' size:
Effort spent on audit (person-hour):
#REF!
No Checked Items Assessment
1. OOPs Concepts
Phân biệt được lớp (class), đối tượng (object) trong Java?

Hiểu khái niệm và cách sử dụng hàm tạo (Constructor) trong Java

Hiểu về nạp chồng (overloading) Constructor?

Biết cách tạo mới một đối tượng (object/new instance) sử dụng
từ khóa new?

02e-CL/DE/HDCV/FSOFT Internal use 2/9


678174954.xlsx v1.7
Phân biệt được instance variable và static variable?

Có thể phân biệt instance methods và static methods?

Hiểu về Block static?

Hiểu về lớp Object trong Java?

02e-CL/DE/HDCV/FSOFT Internal use 3/9


678174954.xlsx v1.7
Ý nghĩa của phương thức finalize() trong class Object?

Phân biệt được bộ nhớ Stack và Heap?

10

Phân biệt sự khác nhau giữa Pass-by-refs với Pass-by-value?

11

* Comments

* Suggestion
[ ] - Pass
[ ] - Review again

02e-CL/DE/HDCV/FSOFT Internal use 4/9


678174954.xlsx v1.7

0
0
0

Notes Priority

- Class là một khuôn mẫu cho những object. Một class sẽ mô tả:
+ State (trạng thái) của đối tượng : thể hiện qua các instance varibale (hay còn gọi là attribute)
+ Behavior (hành động) của đổi tượng : thể hiện qua các methods của object.
- Object là một thể hiện cụ thể của một class (instance).
VD:
/*
* The class Animal description for an animal.
*/
class Animal{
// Biến name và gender gọi là state
String name;
String gender;

// Method eat() là behavior


public void eat(String food){
System.out.println(this.name +" eat " + food);
}
} Mandatory

class Demo{
public static void main(String[] args){
Animal animal = new Animal();
animal.name = "duck";
animal.gender = "femal";
animal.eat("rice");
}
}
=> Animal là class.
animal là object

- Constructor là một phương thức đặc biệt dùng để khởi tạo giá trị cho các thuộc tính. Nó sẽ được gọi đến khi tạo một đối
tượng (object/new instance) của lớp.
- Constructor sẽ không có kiểu dữ liệu trả về và có tên trùng với tên của class.
- Nếu một class không định nghĩa tường minh constructor, khi khởi tạo object sẽ mặc định gọi đến constructor default.
- Constructor default: là constructor mặc định, được tự động generate bởi trình biên dịch Java, không tham số và có access
modifier trùng với access modifier của class.

VD: Mandatory
public class Employee{
public Employee() { // Constructor default

}
}

- Constructor Overloading: cho phép có nhiều hơn một Constructor trong một lớp. Các constructor này bắt buộc phải có các
danh sách tham số truyền vào khác nhau.
VD:
class Employee{
private String name;

public Employee() { } // constructor không tham số Mandatory


public Employee(String name){ //constructor có một tham số
this.name = name;
}
}

VD:
class Employee{
private String name;

public Employee() { } // constructor không tham số


public Employee(String name){ //constructor có một tham số
this.name = name;
}
}
Mandatory
- Khai báo một object của Employee:
Employee employee;
- Thực hiện khởi tạo object Employee:
employee = new Empoyee(); // sử dụng hàm tạo không có tham số
hoặc
employee = new Employee("value of name"); // sử dụng hàm tạo có một tham số

02e-CL/DE/HDCV/FSOFT Internal use 5/9


678174954.xlsx v1.7
- Một instance variable (hay còn gọi là attribute, non-static variable): là thuộc tính được cấp phát bộ nhớ và giá trị riêng cho
từng đối tượng của lớp đó.
- Một static variable: là thuộc tính chung cho tất cả các đối tượng của lớp, chỉ được cấp phát vùng nhớ một lần duy nhất
trong quá trình class chứa nó được load lên.
+ Nghĩa là, tất cả các instance của class sẽ dùng chung các static variable. [=> một instance thực hiện bất kể thay đổi nào
trên static variable thì các instance khác cũng nhận sự thay đổi đó].
- Static variable có thể gọi trực tiếp thông qua class mà không cần khởi tạo object theo cú pháp:
<ClassName>.<variableName>; // với điều kiện thuộc tính của thể truy cập được từ bên ngoài lớp
**Note: Một local variables (tức là, biến nằm trong phương thức) không thể là static, nếu cố tình viết sẽ gặp compile time
error: “illegal start of expression”.

VD:
class Student {
static String className; // thuộc tính chung của tất cả các object
String name; // thuộc tính có giá trị riêng cho từng object
}

public class Test {


public static void main(String args[]) { Mandatory
Student student1 = new Student();
student1.name = "Huong";
student1.className = "Java";

Student student2 = new Student();


student2.name = "Tung";
student2.className = "Java";

System.out.println(student1.name + " learns " + student1.className); // Tung learns Java


System.out.println(student2.name + " learns " + student2.className); // Huong learns Java

// Thực hiện thay đổi giá trị của biến className trong student1 thành FrontEnd.
student1.className = "FrontEnd";

// Vì className là static nên giá trị trong student2 cũng thay đổi theo --> biến dùng chung cho tất cả các đối tượng
System.out.println(student1.name + " learns " + student1.className); // Tung learns Java
System.out.println(student2.name + " learns " + student2.className); // Huong learns Java
- Instance method (hay còn gọi là phương thức non-static): là phương thức của đối tượng. Khi gọi một instance method
phải sử dụng cú pháp <objectName>.<methodName>;
- Static method (hay còn gọi là class method): nó thuộc về class chứ không thuộc riêng một object nào. Nó có thể gọi trực
tiếp thông qua tên lớp theo cú pháp: <ClassName>.<methodName>;
+ Một static method có thể gọi đến các static variables và các static method khác.
+ Một static method thông thể gọi đến các non-static variables và các non-static method.
+ Trong chương trình, có một static method duy nhất sẽ được tìm gọi một cách tự động bởi JVM là: method public static
void main(String arrgs[]).
**Note: Một static method sẽ không thể kế thừa (@Overrided) ở các subclass.

VD:
class StaticMethod { Mandatory
static String value1 = "FPT";
String value2 = "FSoft";

public static void print() { //Static method


System.out.println(value1); // OK
System.out.println(value2); // Compile time error : Cannot make a static reference to the non-static field success.
}
}

- Một static block là một đoạn code được viết trong một lớp, nó sẽ được thực thi khi lớp được load lên lần đầu tiên trong
JVM. Hầu hết các static block được sử dụng để khởi tạo các static variable do vậy nó còn được gọi là block initialize.
- Có thể sử dụng static block để khởi tạo cho các hằng số. (VD: static final String CAMPUS)
- Static block sẽ được thực thi một lần duy nhất trước cả các constructor và không có tên hay kiểu trả về và không sử dụng
được các từ khóa như this hay supper.

VD:
public class StaticBlock {
static final String CAMPUS;
static {
System.out.println("This is the static block");
CAMPUS = "FPT"; //Khởi tạo một biến là static final
}

StaticBlock() {
System.out.print("This is the constructor!");
}
Mandatory
public static void main(String args[]){
StaticBlock block1 = new StaticBlock();
StaticBlock block2 = new StaticBlock();

System.out.println("Campus: "+ block1.CAMPUS);


}
}
=> Kết quả:
This is the static block This is the constructor!
This is the constructor!

Campus: FPT
=> Static block chỉ được thực thi một lần duy nhất.

- Class Object là một class được cung cấp bởi Java.


- Mọi class được định nghĩa ra đều mặc định kế thừa từ Object (kể cả không viết extends).
- Mọi method trong class Object đều được kế thừa và có thể ghi đè (override - sẽ học ở bài sau) trong bất kỳ class nào. Ví dụ Mandatory
như các phương thức thường gặp như: hashCode(), equals(), toString();

02e-CL/DE/HDCV/FSOFT Internal use 6/9


678174954.xlsx v1.7
- finalize(): là phương thức sẽ được thực thi khi gọi garbage collector (gọi phương thức gc()) để thu gom rác: System.gc();
- Một lớp con ghi đè method finalize() để xử lý tài nguyên hệ thống hoặc để thực hiện việc dọn dẹp khác.
Mandatory

- Stack là một vùng nhớ được sử dụng để lưu trữ các tham số và các biến local của phương thức mỗi khi một phương thức
được gọi ra. Các tham số và các biến local của một phương thức tạo thành một bản ghi kích hoạt, còn được gọi là một stack
frame.
- Stack:
+ Lưu trữ các biến nguyên thủy xác định trong methods và các reference đến các object trong heap.
+ Kích thước bị giới hạn và nhỏ hơn heap.
- Heap là một vùng nhớ trong bộ nhớ được sử dụng để lưu trữ các đối tượng khi từ khóa new được gọi ra, các biến static và
các biến toàn cục (instance variable). Mandatory
- Heap :
+ Là một dynamic memory
+ Lưu trữ các object được khởi tạo.
+ Được dọn dẹp tự động bởi Garbage Collector.
+ Kích thước lớn.

- Pass-by: là một khái niệm để thể hiện cho việc truyền tham số khi gọi phương thức trong lập trình.
- Pass-by-value: là truyền tham trị khi gọi phương thức, tức là biến được truyền vào cho phương thức là các biến có kiểu dữ
liệu nguyên thủy.
+ Khi biến được khai báo, sau đó truyền vào cho phương thức, bản chất của thao tác này là copy một biến mới trong Stack
và truyền biến copy vào cho phương thức.
+ Khi thực hiện bất kì thay đổi nào trong phương thức thì những thay đổi đó xảy ra đối với biến copy chứ không phải biến
ban đầu, vậy nên kết thúc phương thức, biến ở ngoài hàm sẽ không bị ảnh hưởng/không bị thay đổi giá trị.
- Pass-by-reference: là truyền tham chiếu khi gọi phương thức, tức là biến được truyền vào cho phương thức có kiểu dữ
liệu đối tượng.
+ Khi đối tượng được khai báo và truyền vào cho phương thức được gọi, thao tác copy cũng xảy ra như trên nhưng nó chỉ
copy reference của đối tượng trong Stack mà không copy dữ liệu object trong heap (tức là vẫn trỏ đến cùng object).
+ Khi thực hiện thay đổi giá trị của đối tượng trong phương thức thì sau khi thực thi xong, biến bên ngoài cũng bị thay đổi giá
trị (vì cùng tham chiếu đến object trong heap).
+ Nhưng nếu thay đổi tham chiếu của đối tượng đến object khác thì tham chiếu này là của biến copy, biến bên ngoài phương
thức không bị ảnh hưởng.
VD:
class Employee {
String name;
float salary; Mandatory
}
public class ChangingValue{

static void passByReference(Employee employee ){ employee.name = "Huong Le"; }

static void passByValue(float value){ value = 2000; }

public static void main(String[] args){


Employee employee = new Employee();
employee.name = "Huong";
employee.salary = 1500;

passByReference(employee);
passByValue(employee.salary);

System.out.println("Name: " + employee.name);


System.out.println("Salary: " + employee.salary);
}

02e-CL/DE/HDCV/FSOFT Internal use 7/9


678174954.xlsx v1.7

RECORD OF CHANGE
No Effective Date Version Change Description Reason Reviewer
1 N/A 1.0 Newly issue Apply for Lab/Assignment DieuNT1
2 1-Jul-20 1.0 Update Update for Release DieuNT1
3
4
5
6
7
8

02e-CL/DE/HDCV/FSOFT Internal use 8/9


678174954.xlsx v1.7

Approver
VinhNV
VinhNV

02e-CL/DE/HDCV/FSOFT Internal use 9/9

You might also like