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[r]
(1)LẬP TRÌNH JAVA
LẬP TRÌNH JAVA
Bài 6
Bài 6: Tạo và sử dụng đối : Tạo và sử dụng đối tượng
(2)Nội dung Nội dung
6.1 Phương thức khởi tạo
6.2 Chồng phương thức khởi tạo 6.3 Sử dụng đối tượng
(3)Mục tiêu Mục tiêu
Kết thúc bài học bạn có thể nắm được:
Giải thích phương thức khởi tạo, chồng
phương thức khởi tạo
Biết cách khai báo và khởi tạo đối tượng, sử dụng
đối tượng
(4)6.1- Phương thức khởi tạo 6.1- Phương thức khởi tạo
Dữ liệu cần khởi tạo trước sử
dụng
Lỗi khởi tạo lỗi phổ biến
Phương thức khởi tạo
Là phương thức đặc biệt gọi tự động
sau tạo đối tượng
Nhằm mục đích khởi tạo cho
(5)6.1- Phương thức khởi tạo 6.1- Phương thức khởi tạo
Mỗi lớp phải chứa phương
thức khởi tạo
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ả
Mỗi lần đối tượng khai báo, phương thức khởi tạo lớp gọi đến nhằm tạo đối tượng
Ví dụ:
(6)6.1- Phương thức khởi tạo 6.1- Phương thức khởi tạo
Sử dụng từ khóa new với constructor để
tạo đối tượng cho lớp:
Cú pháp:
Ten_lop ten_doi_tuong = new thuc_khoi_tao(ds_ts);
Ví dụ:
(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; }
(8)6.1- Phương thức khởi tạo 6.1- Phương thức khởi tạo
Phương thức khởi tạo khơng có giá trị
trả về, sử dụng với từ khóa
(9)6.1- Phương thức khởi tạo 6.1- Phương thức khởi tạo
Phương thức khởi tạo có thể dùng
định truy cập
public private
Khơng có (mặc định – phạm vi package)
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 xem
(10)6.1- Phương thức khởi tạo 6.1- Phương thức khởi tạo
Phương thức khởi tạo mặc định (default
constructor)
Là phương thức khởi tạo không tham số
Java cung cấp sẵn phương khởi tạo mặc định ta không định nghĩa phương khởi tạo lớp
Phương thức khởi tạo mặc định Java cung cấp có định truy cập giống lớp
Khi định nghĩa phương thức khởi tạo có
(11)6.1- Phương thức khởi tạo 6.1- Phương thức khởi tạo
Phương thức khởi tạo mặc định Java cung
cấp:
class BankAccount{
private String owner;
private double balance; }
public class Test{
public static void main(String args[]) {
(12)6.1- Phương thức khởi tạo 6.1- Phương thức khởi tạo
Phương thức khởi tạo tự viết: public class BackAccount{
private String owner; private double balance; public BankAccount(){
owner = ”noname”; }
}
public class Test{
(13)6.1- Phương thức khởi tạo 6.1- Phương thức khởi tạo
Từ khóa this
Dùng this để:
thay cho đối tượng
gọi constructor khác đố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;
(14)Nội dung Nội dung
6.1 Phương thức khởi tạo
6.2 Chồng phương thức khởi tạo 6.3 Sử dụng đối tượng
(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
Trong nhiều tình khác ta cần khởi
tạo đối tượng theo nhiều cách khác
Cần xây dựng phương thức khởi tạo
khác cho đối tượng
Các phương thức khởi tạo với tham số khác
nhau theo nguyên lý chồng phương thức
Việc chồng phương thức khởi tạo giúp
(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
Ví dụ:
public class BankAccount{ private String owner; private double balance;
public BankAccount(String name){ setOwner(name);
}
public void setOwner(String o){ owner = o;
} … }
(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
Ví dụ:
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 =
(18)Nội dung Nội dung
6.1 Phương thức khởi tạo
6.2 Chồng phương thức khởi tạo 6.3 Sử dụng đối tượng
(19)6.3- Sử dụng đối tượng 6.3- Sử dụng đối tượng
Khai báo khởi tạo đối tượng
Đối tượng tạo ra, thể hóa
(instantiate) từ mẫu chung (lớp)
Các đối tượng phải khai báo kiểu đối
tượng trước sử dụng:
Kiểu đối tượng lớp đối tượng Ví dụ:
(20)6.3- Sử dụng đối tượng 6.3- Sử dụng đối tượng
Khai báo khởi tạo đối tượng
Đối tượng nên khởi tạo trước sử dụng
Sử dụng toán tử = để gán
Sử dụng toán tử new để khởi tạo đối tượng:
Toán tử new dùng để tạo đối tượng Tự động gọi phương thức khởi tạo tương ứng Một đối tượng khởi tạo null
Đối tượng thao tác thông qua tham chiếu
Tham chiếu đóng vai trị gần giống trỏ
(21)6.3- Sử dụng đối tượng 6.3- Sử dụng đối tượng
Khai báo khởi tạo đối tượng
Mảng đối tượng khai báo giống
mảng liệu
Mảng đối tượng khởi tạo mặc định với
giá trị null.
Ví dụ:
Employee emp1 = new Employee(123456); Employee emp2;
(22)6.3- Sử dụng đối tượng 6.3- Sử dụng đối tượng
Sử dụng đối tượng
Đối tượng cung cấp hoạt động phức tạp
hơn kiểu liệu nguyên thủy
Đối tượng đáp ứng lại thông điệp
(23)6.3- Sử dụng đối tượng 6.3- Sử dụng đối tượng
Sử dụng đối tượng
Để gọi thành viên (dữ liệu thuộc tính)
lớp đối tượng, sử dụng toán tử “.”
Nếu gọi phương thức lớp toán tử
(24)6.3- Sử dụng đối tượng 6.3- Sử dụng đối tượng
Sử dụng đối tượng
Truyền tham số cho phương thức:
Truyền giá trị với kiểu liệu
Các giá trị nguyên thủy thay đổi truyền
như tham số
Truyền tham chiếu đối tượng cho kiểu liệu
(25)6.3- Sử dụng đối tượng 6.3- Sử dụng đối tượng
Sử dụng đối tượng
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”);
(26)6.3- Sử dụng đối tượng 6.3- Sử dụng đối tượng
Thành viên static
Nếu muốn sử dụng mà không muốn tạo đối
tượng lớp Khai báo static
Thành viên static thuộc lớp
Thay đổi giá trị thành viên static đối
tượng lớp thay đổi giá trị thành viên tất đối tượng khác lớp
Các thành viên tĩnh truy cập mà khơng cần
(27)6.3- Sử dụng đối tượng 6.3- Sử dụng đối tượng
Thành viên static class TestStatic{
public static int iStatic; public int iNonStatic;
}
public class TestS {
public static void main(String[] args) { TestStatic obj1 = new TestStatic();
obj1.iStatic = 10; obj1.iNonStatic = 11;
System.out.println(obj1.iStatic+”,”+obj1.iNonStatic); TestStatic obj2 = new TestStatic();
(28)6.3- Sử dụng đối tượng 6.3- Sử dụng đối tượng
Thành viên hằng
Một thuộc tính khơng thể thay đổi giá trị
quá trình sử dụng
Cú pháp khai báo hằng:
chi_dinh_truy_cap final kieu_du_lieu TEN_HANG = gia_tri;
Ví dụ:
public static final int VAL_THREE = 39;
(29)6.3- Sử dụng đối tượng 6.3- Sử dụng đối tượng
Thành viên hằng
Thông thường số liên quan đến lớp
được khai báo static final nhằm giúp
truy cập dễ dàng
Một quy ước chung sử dụng ký tự
(30)6.3- Sử dụng đối tượng 6.3- Sử dụng đối tượng
Mảng đối tượng
Khai báo tạo mảng đối tượng:
Circle[] circleArray = new Circle[10];
Khởi tạo:
for(int i=0; i<circleArray.length; i++){ circleArray[i] = new Circle();
(31)6.3- Sử dụng đối tượng 6.3- Sử dụng đối tượng
Mảng đối tượng
Circle[] circleArray = new Circle[10];
Một mảng đối tượng thực chất mảng biến
tham chiếu Do gọi circleArray[1].findArea() gọi mức tham chiếu: circleArray tham chiếu toàn mảng, circleArray[1] tham chiếu tới đối
tượng Circle
reference circleArray[0] Circle object
…
circleArray
circleArray[1]
(32)Nội dung Nội dung
6.1 Phương thức khởi tạo
6.2 Chồng phương thức khởi tạo 6.3 Sử dụng đối tượng
(33)6.4- Quản lý bộ nhớ Java 6.4- Quản lý bộ nhớ Java
Java không sử dụng trỏ nên địa
nhớ bị ghi đè lên cách ngẫu nhiên cố ý
Không xảy vấn đề cố hữu người
dùng định vị tái định vị nhớ, quản lý nhớ JVM kiểm sốt
Lập trình viên không cần quan tâm đến việc ghi
(34)6.4- Quản lý bộ nhớ Java 6.4- Quản lý bộ nhớ Java
Bộ nhớ Heap Stack
Bộ nhớ Heap sử dụng để ghi thơng tin tạo tốn tử new
String s = new String(“hello”);
Giá trị cục nhớ Stack sử dụng trỏ tham chiếu tới nhớ Heap
(35)6.4- Quản lý bộ nhớ Java 6.4- Quản lý bộ nhớ Java
Bộ nhớ Heap Stack
(36)6.4- Quản lý bộ nhớ Java 6.4- Quản lý bộ nhớ Java
Bộ nhớ Heap Stack
String s = new String(“hello”); String t = s;
(37)6.4- Quản lý bộ nhớ Java 6.4- Quản lý bộ nhớ Java
Bộ thu gom rác
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
(38)6.4- Quản lý bộ nhớ Java 6.4- Quản lý bộ nhớ Java
Bộ thu gom rác
JVM định thực việc thu gom
rác:
Thông thường thực thi thiếu nhớ Tại thời điểm khơng dự đốn trước
Khơng thể ngăn trình thực thu
gom rác yêu cầu thực sớm hơn:
(39)6.4- Quản lý bộ nhớ Java 6.4- Quản lý bộ nhớ Java
Bộ thu gom rác
Phương thức finalize()
Sẽ thực thi trước trình thu gom xảy
Phương thức thường sử dụng cho
trường hợp đặc biệt (ví dụ xóa vùng nhớ) tính khơng dự đốn trước thu gom rác
Các vấn đề mở sockets, files, nên xử lý luồng chương trình trước đối
tượng ngắt bỏ tham chiếu
(40)Nội dung Nội dung
6.1 Phương thức khởi tạo
6.2 Chồng phương thức khởi tạo 6.3 Sử dụng đối tượng
(41)6.5- So sánh đối tượng 6.5- So sánh đối tượng
Toán tử quan hệ ==
Đối với kiểu liệu nguyên thủy, tốn tử == kiểm tra xem chúng có giá trị hay khơng
Ví dụ:
int a = 1; int b = 1;
(42)6.5- So sánh đối tượng 6.5- So sánh đối tượng
Toán tử quan hệ ==
Đố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ụ:
Employee a = new Employee(1); Employee b = new Employee(1); if (a==b) // false
Employee a = new Employee(1); Employee b = a;
(43)6.5- So sánh đối tượng 6.5- So sánh đối tượng
Phương thức equals
Đố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
(44)6.5- So sánh đối tượng 6.5- So sánh đối tượng
Phương thức equals
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 != n2); }
(45)6.5- So sánh đối tượng 6.5- So sánh đối tượng
Phương thức equals
public class EqualsMethod {
public static void main(String[] args) { Integer n1 = new Integer(47);
Integer n2 = new Integer(47);
(46)6.5- So sánh đối tượng 6.5- So sánh đối tượng
Phương thức equals
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)); }