28/07/14
Bộ Môn CNPM - ĐHBK Hà Nội
2
Mc tiêu
Mc tiêu
!"#$%"&$%$'"()*$
+,"-$"$./"0"1$2"34$"5
/"0"1$2"3
!$6$"2"7%62"34
89$$6$:..;9,<=%>"?
28/07/14
Bộ Môn CNPM - ĐHBK Hà Nội
3
Ni dung
Ni dung
@A"0"1$2"3
@BC"5/"0"1$2"3
@DE
@FG9,<=%>"?H77
@IE6"
28/07/14
Bộ Môn CNPM - ĐHBK Hà Nội
4
6.1- Phương thức khởi tạo
6.1- Phương thức khởi tạo
JK<L9$M$2"3H?$2"
Lỗi khởi tạo là một trong các lỗi phổ
biến
"0"1$2"3
Là phương thức đặc biệt được gọi tự
động sau khi tạo ra đối tượng.
Nhằm mục đích chính là khởi tạo cho
các thuộc tính của đối tượng.
28/07/14
Bộ Môn CNPM - ĐHBK Hà Nội
5
6.1- Phương thức khởi tạo
6.1- Phương thức khởi tạo
NO<?//",$"17-":*>/"0"1$2"3
Có nhiệm vụ tạo ra một thể hiện mới của
lớp.
Tên của constructor trùng với tên của
lớp
Constructor không có kiểu dữ liệu trả
về
Mỗi lần một đối tượng được khai báo,
phương thức khởi tạo của lớp được gọi
đến nhằm tạo ra một đối tượng mới.
-
public BankAccount(){
owner = “noname”;
}
28/07/14
Bộ Môn CNPM - ĐHBK Hà Nội
6
6.1- Phương thức khởi tạo
6.1- Phương thức khởi tạo
EP2"'7new?$H9$H(H7$6$
*?$"<?/
Cú pháp:
Ten_lop ten_doi_tuong = new thuc_khoi_tao(ds_ts);
Ví dụ:
BankAccount account = new BankAccount();
28/07/14
Bộ Môn CNPM - ĐHBK Hà Nội
7
6.1- Phương thức khởi tạo
6.1- Phương thức khởi tạo
Circle(double r) {
radius = r;
}
Circle() {
radius = 1.0;
}
myCircle = new Circle(5.0);
28/07/14
Bộ Môn CNPM - ĐHBK Hà Nội
8
6.1- Phương thức khởi tạo
6.1- Phương thức khởi tạo
"0"1$2"32"Q$'6HRH,.4"2"
?P2"'7ST'H,.*>"7*$"!9!
*?@
28/07/14
Bộ Môn CNPM - ĐHBK Hà Nội
9
6.1- Phương thức khởi tạo
6.1- Phương thức khởi tạo
"0"1$2"3$'"(U$6$$"V
R"H9W$X/
public
private
Không có (mặc định – phạm vi package).
N>/"0"1$2"32"Q"(U
$6$P2"'7abstract4static4final4native4
synchronized@
C6$/"0"1$2"32"Q$
YS*"<thành viên của lớp.
28/07/14
Bộ Môn CNPM - ĐHBK Hà Nội
10
6.1- Phương thức khởi tạo
6.1- Phương thức khởi tạo
"0"1$2"3*Z$R"[S\79<
$H9$H]
Là phương thức khởi tạo không tham số
Java cung cấp sẵn một phương khởi tạo
mặc định nếu ta không định nghĩa một
phương khởi tạo trong lớp.
Phương thức khởi tạo mặc định do Java
cung cấp có chỉ định truy cập giống
như lớp của nó.
Khi đã định nghĩa một phương thức khởi
tạo có tham số, nên cung cấp thêm một
phương thức khởi tạo mặc định khác.
28/07/14
Bộ Môn CNPM - ĐHBK Hà Nội
11
6.1- Phương thức khởi tạo
6.1- Phương thức khởi tạo
"0"1$2"3*Z$R"77
$9$:/
class BankAccount{
private String owner;
private double balance;
}
public class Test{
public static void main(String args[])
{
BankAccount acc1 = new BankAccount();
}
}
28/07/14
Bộ Môn CNPM - ĐHBK Hà Nội
12
6.1- Phương thức khởi tạo
6.1- Phương thức khởi tạo
"0"1$2"3^!
public class BackAccount{
private String owner;
private double balance;
public BankAccount(){
owner = ”noname”;
}
}
public class Test{
public static void main(String args[]){
BankAccount acc1 = new BankAccount();
}
}
28/07/14
Bộ Môn CNPM - ĐHBK Hà Nội
13
6.1- Phương thức khởi tạo
6.1- Phương thức khởi tạo
P2"'7this
Dùng this để:
thay thế cho đối tượng hiện tại.
gọi các constructor khác của đối
tượng.
class Foo {
int i = 5;
void setI(int i){
this.i = i
}
}
public class Circle{
private double rd;
public Circle(double r){
this.rd = r;
}
}
28/07/14
Bộ Môn CNPM - ĐHBK Hà Nội
14
Ni dung
Ni dung
@A"0"1$2"3
@BC"5/"0"1$2"3
@DE
@FG9,<=%>"?H77
@IE6"
28/07/14
Bộ Môn CNPM - ĐHBK Hà Nội
15
6.2- Chồng phương thức khởi
6.2- Chồng phương thức khởi
tạo
tạo
H".9_""92"6$"797$M
2"3"S".9$6$"2"6$
"79
CMY`W^$6$/"0"1$2"3
2"6$"79$"@
C6$/"0"1$2"3?$6$"7*
2"6$"79"S9W8<=$"5/"0
"1$
L$$"5/"0"1$2"3#/
$"#7$'".9$6$"<^7$"&(2"3
@
28/07/14
Bộ Môn CNPM - ĐHBK Hà Nội
16
6.2- Chồng phương thức khởi
6.2- Chồng phương thức khởi
tạo
tạo
-
public class BankAccount{
private String owner;
private double balance;
public BankAccount(String name){
setOwner(name);
}
public void setOwner(String o){
owner = o;
}
…
}
…
BankAccount account1 = new BankAccount(); //Error
BankAccount account2 = new BankAccount(“Hoang”);
28/07/14
Bộ Môn CNPM - ĐHBK Hà Nội
17
6.2- Chồng phương thức khởi
6.2- Chồng phương thức khởi
tạo
tạo
-
public class BankAccount{
private String owner;
private double balance;
public BankAccount(){owner = “noname”;}
public BankAccount(String o, double b){
owner = o;
balance = b;
}
}
public class Test{
public static void main(String args[]){
BankAccount unknown_acc = new BankAccount();
BankAccount known_acc =
new BankAccount(“Thuy”, 100);
}
}
28/07/14
Bộ Môn CNPM - ĐHBK Hà Nội
18
Ni dung
Ni dung
@A"0"1$2"3
@BC"5/"0"1$2"3
@DE
@FG9,<=%>"?H77
@IE6"
28/07/14
Bộ Môn CNPM - ĐHBK Hà Nội
19
6.3- Sử dng đối tượng
6.3- Sử dng đối tượng
"7%62"3
a$H74"("L"'7
[77S]P*>*b9$"9[<?/]@
C6$/",$2"7%6kiểu $c7
H?$2"
Kiểu của đối tượng là lớp các đối
tượng
Ví dụ:
String strName;
BankAccount acc;
28/07/14
Bộ Môn CNPM - ĐHBK Hà Nội
20
6.3- Sử dng đối tượng
6.3- Sử dng đối tượng
"7%62"3
a8$2"3H?$2"
Sử dụng toán tử = để gán
Sử dụng toán tử new để khởi tạo một đối
tượng:
Toán tử new dùng để tạo ra một đối tượng mới
Tự động gọi phương thức khởi tạo tương ứng
Một đối tượng có thể khởi tạo null
a$"76$"Q;97tham chiếu
Tham chiếu đóng vai trò gần giống như một con
trỏ.
-
BankAccount acc1;
acc1 = new BankAccount();
28/07/14
Bộ Môn CNPM - ĐHBK Hà Nội
21
6.3- Sử dng đối tượng
6.3- Sử dng đối tượng
"7%62"3
N,$6$$2"7%6
"*,K<L9$0%,
N,$6$$2"3*Z$
R"?6HRnull@
-
Employee emp1 = new Employee(123456);
Employee emp2;
emp2 = emp1;
Department dept[] = new Department[100];
Test[] t = {new Test(1),new Test(2)};
28/07/14
Bộ Môn CNPM - ĐHBK Hà Nội
22
6.3- Sử dng đối tượng
6.3- Sử dng đối tượng
E
a$9$:/$6$">/"1$
/"0$6$2(9K<L99W8"cW
a6/1<$6$"QL/
Toán tử "." được sử dụng để gửi một
thông điệp đến một đối tượng
28/07/14
Bộ Môn CNPM - ĐHBK Hà Nội
23
6.3- Sử dng đối tượng
6.3- Sử dng đối tượng
E
a(&""8[K<L9"Z$"9>$-"]
$c7<?/"Z$46d@e
!9&/"0"1$7WH<?/"_
6d@e2"Q$M"!
28/07/14
Bộ Môn CNPM - ĐHBK Hà Nội
24
6.3- Sử dng đối tượng
6.3- Sử dng đối tượng
E
Truyền tham số cho phương thức:
Truyền giá trị với các kiểu dữ liệu
cơ bản
Các giá trị nguyên thủy không thể thay đổi khi truyền
như một tham số
Truyền tham chiếu đối tượng cho các
kiểu dữ liệu tham chiếu
28/07/14
Bộ Môn CNPM - ĐHBK Hà Nội
25
6.3- Sử dng đối tượng
6.3- Sử dng đối tượng
E
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();
acc1.setOwner(“Hoa”);
BankAccount acc2 = new BankAccount(“Hong”);
System.out.println(acc1.getOwner()
+ acc2.getOwner());
}