SlideShare a Scribd company logo
LẬP TRÌNH HƯỚNG
ĐỐI TƯỢNG
Bài 04. Tạo và sử dụng đối
tượng – Các kỹ thuật đi kèm
1
IT3100
Mục tiêu bài học
 Tìm hiểu cách tạo và sử dụng đối tượng
 Phương thức khởi tạo
 Khai báo và khởi tạo đối tượng
 Sử dụng đối tượng
 Tìm hiểu việc quản lý bộ nhớ và so sánh đối
tượng
 Tìm hiểu các kỹ thuật lập trình
 Chồng phương thức
 Sử dụng thành viên đối tượng, thành viên lớp
 Truyền tham số cho phương thức
 Giới thiệu một số lớp tiện ích trong Java
2
Nội dung
1. Khai báo và khởi tạo đối tượng
2. Sử dụng đối tượng
3. Quản lý bộ nhớ
4. Một số kỹ thuật đi kèm
5. Một số lớp tiện ích
3
1/ KHAI BÁO VÀ KHỞI TẠO
ĐỐI TƯỢNG
4
1. Khởi tạo và hủy bỏ đối tượng
 Đối tượng cần phải được khởi tạo trước khi sử
dụng
5
Student
- name
- address
- studentID
- dateOfBirth
Nguyễn Hoàng Nam
Hà Nội…
Nguyễn Thu Hương
Hải Phòng…
Trần Văn Bê
Nam Định…
1. Khởi tạo và hủy bỏ đối tượng
 Mỗi đối tượng khi tồn tại và hoạt động được
HĐH cấp phát một vùng nhớ để lưu lại các giá
trị của dữ liệu thành phần
 Khi tạo ra đối tượng HĐH sẽ gán giá trị khởi tạo
cho các dữ liệu thành phần
 Phải được thực hiện tự động trước khi người lập
trình có thể 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 khi kết thúc cần phải giải phóng hợp
lý tất cả các bộ nhớ đã cấp phát cho đối tượng.
 Java: JVM
 C++: Hàm hủy (destructor)
6
2. Phương thức khởi tạo
 Là phương thức đặc biệt được gọi tự động khi tạo
ra đối tượng
 Mục đích chính: Cấp phát vùng nhớ + Khởi tạo cho
các thuộc tính của đối tượng
 Mỗi lớp phải chứa ít nhất một constructor
 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ề
7
public Student(String nstr, String astr){
name = nstr;
address = astr;
}
Student
- name
- address
2. Phương thức khởi tạo
 Phương thức khởi tạo có thể dùng các chỉ định truy cập
• public
• private
• không có chỉ định
 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 được xem như là thành
viên của lớp.
8
2.1. Các kiểu PT khởi tạo
 PT khởi tạo không tham số
 PT khởi tạo có tham số
 PT khởi tạo ngầm định
 Khi không định nghĩa một phương thức khởi tạo cho
một lớp, JVM cung cấp một phương thức khởi tạo
ngầm định.
9
public Student(String nstr, String astr){
name = nstr;
address = astr;
}
public Student(){
name = “no name”;
address = “no address”;
}
3. Khai báo và khởi tạo đối tượng
 Đối tượng được tạo ra, thể hiện hóa (instantiate)
từ một mẫu chung (lớp).
 Các đối tượng phải được khai báo kiểu của đối
tượng trước khi sử dụng:
 Kiểu của đối tượng là lớp các đối tượng
 Ví dụ:
• String strName;
• BankAccount acc;
10
3. Khai báo và khởi tạo đối tượng
 Đối tượng cần được khởi tạo trước khi sử
dụng
 Sử dụng toán tử = để gán
 Sử dụng từ khóa new với constructor để khởi tạo
đối tượng:
• Từ khóa 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 khởi tạo mặc định là null
 Đối tượng được thao tác thông qua tham
chiếu (~ con trỏ).
 Ví dụ:
BankAccount acc1;
acc1 = new BankAccount();
11
3. Khai báo và khởi tạo đối tượng
 Có thể kết hợp vừa khai báo và khởi tạo đối
tượng
 Cú pháp:
Ten_lop ten_doi_tuong = new
Pthuc_khoi_tao(ds_tham_so);
12
3. Khai báo và khởi tạo đối tượng
 Mảng các đối tượng được khai báo giống như
mảng dữ liệu cơ bản
 Mảng các đối tượng được khởi tạo mặc định với
giá trị null.
 Ví dụ:
Employee emp1 = new Employee(123456);
Employee emp2;
emp2 = emp1;
Department dept[] = new Department[100];
Test[] t = {new Test(1),new Test(2)};
13
Ví dụ 1
class BankAccount{
private String owner;
private double balance;
}
public class Test{
public static void main(String args[]){
BankAccount acc1 = new BankAccount();
}
}
14
Ví dụ 2
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();
}
}
15
Ví dụ 3
public class BankAccount {
private String owner;
private double balance;
public BankAccount(String name) {
setOwner(name);
}
public void setOwner(String o) {
owner = o;
}
}
public class Test {
public static void main(String args[]){
BankAccount account1 = new BankAccount();
BankAccount account2 = new BankAccount("Hoang");
}
}
16
//Error
2/ SỬ DỤNG ĐỐI TƯỢNG
17
1. Sử dụng đối tượng
 Đối tượng cung cấp các hoạt động phức tạp hơn
các kiểu dữ liệu nguyên thủy
 Đối tượng đáp ứng lại các thông điệp
 Toán tử "." được sử dụng để gửi một thông điệp đến một
đối tượng
18
1. Sử dụng đối tượng (2)
 Để gọi thành viên (dữ liệu hoặc thuộc tính) của
lớp hoặc đối tượng, sử dụng toán tử “.”
 Nếu gọi phương thức ngay trong lớp thì toán tử “.”
không cần thiết.
19
Ví dụ
20
public class BankAccount{
private String owner;
private double balance;
public BankAccount(String name) {
setOwner(name);
// Là viết tắt của this.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(“”);
BankAccount acc2 = new BankAccount(“Hong”);
acc1.setOwner(“Hoa”);
System.out.println(acc1.getOwner()
+ “ ”+ acc2.getOwner());
}
}
2. Tự tham chiếu – this
 Cho phép truy cập vào đối tượng hiện tại của lớp.
 Quan trọng khi hàm/phương thức thành phần
thao tác trên hai hay nhiều đối tượng.
 Xóa đi sự nhập nhằng giữa một biến cục bộ, tham
số với thành phần dữ liệu của lớp
 Không dùng bên trong các khối lệnh static
21
Ví dụ
22
public class BankAccount{
private String owner;
private double balance;
public BankAccount() { }
public void setOwner(String owner){
this.owner = owner;
}
public String getOwner(){ return owner; }
}
public class Test{
public static void main(String args[]){
BankAccount acc1 = new BankAccount();
BankAccount acc2 = new BankAccount();
acc1.setOwner(“Hoa”);
acc2.setOwner(“Hong”);
System.out.println(acc1.getOwner() + “ ” +
acc2.getOwner());
}
3/ QUẢN LÝ BỘ NHỚ
23
1. Quản lý bộ nhớ
 Java không sử dụng con trỏ nên các địa chỉ bộ nhớ
không thể bị ghi đè lên một cách ngẫu nhiên hoặc
cố ý.
 Các vấn đề định vị và tái định vị bộ nhớ, quản lý
bộ nhớ do JVM kiểm soát, hoàn toàn trong suốt
với lập trình viên.
 Lập trình viên không cần quan tâm đến việc ghi
dấu các phần bộ nhớ đã cấp phát trong heap để
giải phóng sau này.
24
2. Bộ nhớ Heap
 s là biến tham chiếu,
lưu trên Stack
 Giá trị của s là địa
chỉ của vùng nhớ
Heap lưu trữ đối
tượng s tham chiếu
tới
 Bộ nhớ Heap sử
dụng để ghi thông tin
được tạo bởi toán tử
new.
25
String s = new String(“hello”);
Bộ nhớ Heap
Bộ nhớ Stack
s
2. Bộ nhớ Heap (2)
26
String s = new String(“hello”);
String t = s ;
Bộ nhớ Heap
Bộ nhớ Stack
t
s
int i = 201;
int j = i;
j
i
201
201
•Giá trị cục bộ trong bộ
nhớ Stack được sử
dụng như con trỏ tham
chiếu tới Heap
•Giá trị của dữ liệu
nguyên thủy được ghi
trực tiếp trong Stack
3. Bộ thu gom rác
(Garbage Collector)
 Một tiến trình chạy ngầm gọi đến bộ “thu gom
rác” để phục hồi lại phần bộ nhớ mà các đố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 được
gán null
 Bộ thu gom rác định kỳ quét qua danh sách
các đối tượng của JVM và phục hồi các tài
nguyên của các đối tượng không có tham
chiếu
27
3. Bộ thu gom rác (2)
 JVM quyết định khi nào thực hiện thu gom
rác:
 Thông thường sẽ thực thi khi thiếu bộ nhớ
 Tại thời điểm không dự đoán trước
 Không thể ngăn quá trình thực hiện của bộ
thu gom rác nhưng có thể yêu cầu thực hiện
sớm hơn:
System.gc(); hoặc Runtime.gc();
28
4. So sánh đối tượng
 Đối với các kiểu dữ liệu nguyên thủy, toán tử ==
kiểm tra xem chúng có giá trị bằng nhau hay
không
 Đối với các đối tượng, toán tử == kiểm tra xem hai
đối tượng có đồng nhất hay không, (có cùng tham
chiếu đến một đối tượng hay không)
29
Employee a = new Employee(1);
Employee b = new Employee(1);
if (a==b)... // false
Employee a = new Employee(1);
Employee b = a;
if (a==b)... // true
a và b cùng
tham chiếu tới 1
đối tượng
a và b tham chiếu
tới 2 đối tượng
khác nhau
4. So sánh đối tượng (2)
 Phương thức equals
 Đối với kiểu dữ liệu nguyên thủy: Không tồn tại
 Đối với các đối tượng: Bất kỳ đối tượng nào cũng có phương
thức này, dùng để so sánh giá trị của đối tượng
 Phương thức equals kế thừa từ lớp Object (nhắc lại trong
bài kế thừa)
 Cài đặt mặc định của phương thức equals là như toán tử
==. Cần cài đặt lại để so sánh 2 đối tượng dựa trên từng
thuộc tính
30
Ví dụ == và equals – Lớp Integer
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));
}
}
31
Lớp Integer (cung cấp trong Java SDK) đã cài đặt lại phương
thức equals của lớp Object, nên n1.equals(n2) trả về true
Sử dụng equals với lớp tự viết
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));
}
}
32
Lớp Value (LTV tự viết) chưa cài đặt lại phương thức equals của lớp
Object, nên v1.equals(v2) trả về false, giống như toán tử ==
5. Hủy bỏ đối tượng
 Trong C#, C++:
 Sử dụng phương thức hủy (destructor)
 Phương thức hủy là phương thức tự động được gọi
trước khi đối tượng được hủy
 Phương thức hủy thường dùng để dọn dẹp bộ nhớ,
thu hồi tài nguyên (VD đối tượng khi hoạt động cần
truy cập tới file/CSDL, cấp phát bộ nhớ động)
 Trong Java:
 Không có khái niệm phương thức hủy
 Sử dụng phương thức finalize()
33
6. Phương thức void finalize()
 Lớp nào cũng có phương thức finalize()
– được thực thi ngay lập tức trước khi gabage
collector giải phóng đối tượng
 Thường chỉ sử dụng cho các trường hợp đặc biệt
để “tự dọn dẹp” các tài nguyên sử dụng khi
đối tượng được gc giải phóng
 Ví dụ cần đóng các socket, CSDL... nên được xử lý trong
luồng chính trước khi các đối tượng bị ngắt bỏ tham chiếu.
 Có thể coi là phương thức hủy (destructor) của
lớp mặc dù Java không có khái niệm này.
34
4/MỘT SỐ KỸ THUẬT ĐI KÈM
35
1. Chồng phương thức
 Chồng phương thức (Method Overloading): Các
phương thức trong cùng một lớp có thể trùng tên
nhưng chữ ký phải khác nhau:
 Số lượng tham số khác nhau
 Nếu cùng số lượng tham số thì kiểu dữ liệu các tham số phải
khác nhau
 Mục đích:
 Tên trùng nhau để mô tả cùng bản chất công việc
 Thuận tiện cho lập trình vì không cần phải nhớ quá nhiều
tên phương thức mà chỉ cần nhớ một tên và lựa chọn các
tham số cho phù hợp.
36
1. Chồng phương thức (2)
 Ví dụ
37
class MyDate {
int year, month, day;
public boolean setMonth(int m) { …}
public boolean setMonth(String s) { …}
}
public class Test{
public static void main(String args[]){
MyDate d = new MyDate();
d.setMonth(9);
d.setMonth(”September”);
}
}
1. Chồng phương thức (3)
 Các phương thức chỉ được xem xét là chồng khi
chúng thuộc cùng một lớp
 Chỉ nên sử dụng kỹ thuật này với các phương thức
có cùng mục đích, chức năng; tránh lạm dụng
 Khi dịch, trình dịch căn cứ vào số lượng hoặc kiểu dữ
liệu của tham số để quyết định gọi phương thức nào
phù hợp.
 Nếu không chọn được hoặc chọn được nhiều hơn 1
phương thức thì sẽ báo lỗi.
38
Ví dụ 1
 Cho phương thức sau đây:
public double test(String a, int b)
 Hãy chọn ra các phương thức chồng cho phương thức
trên:
1. void test(String b, int a)
2. public double test(String a)
3. private int test(int b, String a)
4. private int test(String a, int b)
5. double test(double a, int b)
6. double test(int b)
7. public double test(String a, long b)
39
1.1. Chồng PT với kiểu nguyên thủy
void prt(String s) { System.out.println(s); }
void f1(char x) { prt("f1(char)"); }
void f1(byte x) { prt("f1(byte)"); }
void f1(short x){ prt("f1(short)"); }
void f1(int x) { prt("f1(int)"); }
void f1(long x) { prt("f1(long)"); }
void f1(float x) { prt("f1(float)"); }
void f1(double x) { prt("f1(double)"); }
40
•Kiểu nguyên thủy có thể được chuyển từ kiểu nhỏ
hơn sang kiểu lớn hơn => lưu ý !
Điều gì xảy ra nếu:
f1(5);
char x=‘a’; f1(x);
byte y=0; f1(y);
float z = 0; f1(z);
2. Chồng PT khởi tạo
 Trong nhiều tình huống khác nhau cần khởi tạo
đối tượng theo nhiều cách khác nhau
 Cần xây dựng các phương thức khởi tạo khác
nhau cho đối tượng theo nguyên lý chồng phương
thức (constructor overloading)
41
public class BankAccount{
private String owner;
private double balance;
public BankAccount(){owner = “noname”;}
public BankAccount(String o, double b){
owner = o; balance = b;
}
}
2. Chồng PT khởi tạo
 Gọi đến phương thức khởi tạo khác của lớp
 this(danh_sach_tham_so); //neu co tham so
42
public class Ship {
private double x=0.0, y=0.0
public String name;
public Ship(String name) {
this.name = name;
}
public Ship(String name, double x, double y) {
this(name); this.x = x; this.y = y;
}
//continue…
}
3. Thành viên lớp (static)
 Trong Java
 Các thành viên bình thường là thành viên thuộc về đối
tượng
 Thành viên thuộc về lớp được khai báo là static
 Cú pháp khai báo thành viên static:
chi_dinh_truy_cap static kieu_du_lieu
tenBien;
43
3. Thành viên lớp (static) (2)
 Các phương thức static chỉ có thể truy cập vào các
thuộc tính static và chỉ có thể gọi các phương thức
static trong cùng lớp.
 Thay đổi giá trị của một thành viên static trong một đối
tượng của lớp sẽ làm thay đổi giá trị của thành viên này
đối với tất cả các đối tượng khác của lớp đó.
44
Ví dụ
45
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();
System.out.println(obj2.iStatic + ”,” + obj2.iNonStatic);
obj2.iStatic = 12;
System.out.println(obj1.iStatic + ”,” + obj1.iNonStatic);
}
}
TestStatic.iStatic = 12;
3.1. Thành viên đối tượng vs lớp
Thành viên đối tượng
 Thuộc tính/phương thức chỉ
được truy cập thông qua đối
tượng
 Mỗi đối tượng có 1 bản sao
riêng của 1 thuộc tính đối
tượng
 Giá trị của 1 thuộc tính đối
tượng của các đối tượng khác
nhau là khác nhau
Thành viên lớp
 Thuộc tính/phương thức có
thể được truy cập thông qua
lớp
 Các đối tượng có chung 1
bản sao của 1 thuộc tính
lớp
 Giá trị của 1 thuộc tính lớp
của các đối tượng khác
nhau là giống nhau.
46
4. Truyền tham số cho phương thức
 Với tham số có kiểu dữ liệu tham trị (kiểu dữ liệu
nguyên thủy):
 Truyền giá trị/bản sao của các biến nguyên thủy truyền
vào
 Với tham số có kiểu dữ liệu tham chiếu (mảng và đối
tượng):
 Thực ra là truyền bản sao của tham chiếu gốc, chứ không
phải truyền tham chiếu gốc hoặc truyền đối tượng
(pass the references by value, not the original reference
or the object)
 Sau khi truyền cho phương thức, đối tượng có ít nhất 2
tham chiếu
47
Ví dụ 1
public class Student {
private int year; private String name;
public Student(String name, int year) {
this.year = year;
this.name = name;
}
public int getYear() { return year;}
public void setYear(int year) { this.year = year;}
}
public class Test {
public static void change(Student std){
std.setYear(2000);
}
public static void main(String[] args) {
Student std = new Student("Nam", 1990);
System.out.println(std.getYear());
change(std);
System.out.println(std.getYear());
}
}
48
std = new Student("Hung", 1995);
Ví dụ 2
49
public class Point {
private double x; private double y;
public Point() { }
public Point(double x, double y) {this.x = x; this.y = y;}
public void setX(double x) { this.x = x; }
public void setY(double y) { this.y = y; }
public void printPoint(){System.out.println("X: "+x+" Y: "+y);}
}
public class Test {
public static void tricky(Point arg1, Point arg2) {
arg1.setX(100); arg1.setY(100);
Point temp = arg1;
arg1 = arg2; arg2 = temp;
}
public static void main(String [] args) {
Point pnt1 = new Point(0,0);
Point pnt2 = new Point(0,0);
pnt1.printPoint(); pnt2.printPoint();
System.out.println(); tricky(pnt1, pnt2);
pnt1.printPoint(); pnt2.printPoint();
}
}
Ví dụ 2 (2)
 Chỉ có các tham chiếu
bản sao của đối tượng
được tráo đổi, chứ
không phải các tham
chiếu gốc của đối tượng
50
4.1 Truyền số lượng tham số tùy ý
 Được gọi là varargs. Cú pháp:
 ten_phuong_thuc(Kieu_dl... ten_tham_so)
 Ví dụ:
 Khai báo:
public PrintStream printf(String format,
Object... args)
 Sử dụng
• System.out.printf ("%s: %d, %sn",
name, idnum, address);
• System.out.printf ("%s: %d, %s, %s, %sn",
name, idnum, address, phone, email);
51
Ví dụ
public class Test {
public static int plus(int... arr) {
int result = 0;
for (int i : arr) {
result += i;
}
return result;
}
public static void main(String[] args) {
System.out.println(plus(1, 2, 3, 4, 5));
}
}
52
Tính tổng số lượng các số nguyên bất kỳ
5. Nested class (tham khảo thêm)
 Định nghĩa một class trong một class khác: Nếu 1 class hữu
ích chỉ cho 1 class khác  sẽ logic nếu nhúng class đó vào
class kia
 Nested class là 1 thành viên của lớp bao nó
 Nested class chia làm 2 loại: Static nested class và non-
static Inner class
 Inner Class lại chia làm 2 loại con:
• local inner class: Khai báo 1 inner class trong 1 method
• anonymous inner classes: Khai báo 1 inner Class trong 1 method nhưng
không đặt tên
53
5/ MỘT SỐ LỚP TIỆN ÍCH
54
1. Các package cơ bản
 java.lang
• Cung cấp các lớp cơ bản cho thiết kế ngôn ngữ lập trình
Java
• Bao gồm wrapper classes, String và StringBuffer,
Object, ...
• Import ngầm định vào tất cả các lớp
 java.util
• Bao gồm tập hợp framework, mô hình sự kiện, date
time, và nhiều tiện ích khác.
 java.io
• Cung cấp khả năng vào/ra hệ thống với các luồng dữ liệu
và hệ thống file.
55
1. Các package cơ bản (2)
 java.math
• Cung cấp các lớp thực thi các phép toán với số nguyên và các
phép toán thập phân
 java.sql
• Cung cấp các API cho phép truy nhập và xử lý dữ liệu được
lưu trữ trong một nguồn dữ liệu (thường sử dụng cơ sở dữ
liệu quan hệ)
 javax.swing
• Cung cấp các lớp và giao diện cho phép tạo ra các ứng dụng
đồ họa.
 …
56
2. Các lớp bao
 Mỗi kiểu dữ liệu nguyên thủy có một lớp tương
ứng gọi là lớp bao (Wrapper class) :
 Các lớp bao sẽ “gói” dữ liệu nguyên thủy và cung cấp các
phương thức thích hợp cho dữ liệu đó.
 Mỗi đối tượng của lớp bao đơn giản là lưu trữ một biến đơn
và đưa ra các phương thức để xử lý nó.
 Các lớp bao là một phần của Java API
57
2. Các lớp bao (2)
58
2. Các lớp bao (3)
 Các phương thức thường có trong lớp bao:
 Sử dụng toString() để chuyển các giá trị số thành xâu.
 Sử dụng <type>Value() để chuyển từ đối tượng của
lớp bao thành giá trị nguyên thủy của đối tượng tương ứng
 Sử dụng parse<type>() và valueOf() để chuyển
xâu thành các giá trị số.
59
Float objF = new Float(“4.67”);
float f = objF.floatValue();
int i = objF.intValue();
int i = Integer.parseInt(“123”);
double d = Double.parseDouble(“1.5”) ;
Double objF2 = Double.valueOf(“-36.12”);
long l = objF2.longValue();
2. Các lớp bao (4)
 Các thuộc tính hằng thường có trong lớp bao:
60
• Boolean
• boolean FALSE boolean TRUE
• Byte
• byte MIN_VALUE
• byte MAX_VALUE
• Character
• int MAX_RADIX
• char MAX_VALUE
• int MIN_RADIX
• char MIN_VALUE
• Double
• double MAX_VALUE
• double MIN_VALUE
• double NaN
• double NEGATIVE_INFINITY
• double POSITIVE_INFINITY
• Float
• float MAX_VALUE
• float MIN_VALUE
• float NaN
• float NEGATIVE_INFINITY
• float POSITIVE_INFINITY
• Integer
• int MIN_VALUE
• int MAX_VALUE
• Long
• long MIN_VALUE
• long MAX_VALUE
• Short
• short MIN_VALUE
• short MAX_VALUE
3. Lớp String
 Kiểu String là một lớp và không phải là kiểu dữ liệu
nguyên thủy
 Các kiểu dữ liệu cơ bản sử dụng trong lời gọi
println() được chuyển đổi tự động sang kiểu
String:
System.out.println("answer = " + 1 + 2 + 3);
System.out.println("answer = " + (1+2+3));
 Đối tượng String có thể khởi tạo theo nhiều cách:
String str1 = "Java is Hot";
String c = new String();
String d = new String("Another String");
String e = String.valueOf(1.23);
String f = null;
61
Ví dụ
String s1 = "Hello"; l
String s2 = "Hello";
String s3 = s1;
String s4 = new String("Hello");
String s5 = new String("Hello");
String s6 = String.valueOf("Hello");
62
s1==s2:
S1==s3:
s1==s4:
s1==s6:
s4==s5:
s4==s6:
3. Lớp String (2)
 Các phương thức của lớp String
63
String name = "Joe Smith";
name.toLowerCase(); // "joe smith"
name.toUpperCase(); // "JOE SMITH"
"Joe Smith ".trim(); // "Joe Smith"
"Joe Smith".indexOf('e'); // 2
"Joe Smith".length(); // 9
"Joe Smith".charAt(5); // 'm'
"Joe Smith".substring(5); // "mith"
"Joe Smith".substring(2,5); // "e S“
oneString.equals(anotherString) // so sánh 2 xâu
Kiểm tra tính tương đương, Trả về true hoặc false
oneString.equalsIgnoreCase(anotherString)
Kiểm tra KHÔNG xét đến ký tự hoa, thường
4. Lớp StringBuffer
 String là kiểu bất biến:
 Đối tượng không thay đổi giá trị sau khi được tạo ra 
Các xâu của lớp String được thiết kế để không thay
đổi giá trị.
 Khi các xâu được ghép nối với nhau một đối tượng mới
được tạo ra để lưu trữ kết quả  Ghép nối xâu thông
thường rất tốn kém về bộ nhớ.
 StringBuffer là kiểu biến đổi:
 Đối tượng có thể thay đổi giá trị sau khi được tạo ra
 Sử dụng StringBuffer khi:
• Dự đoán các ký tự trong xâu có thể thay đổi.
• Khi xử lý các xâu một cách linh động, ví dụ như đọc dữ liệu text
từ một tệp tin.
64
Ví dụ
65
StringBuffer buffer = new StringBuffer(15);
buffer.append("This is ") ;
buffer.append("String") ;
buffer.insert(7," a") ;
buffer.append('.');
System.out.println(buffer.length());
String output = buffer.toString() ;
System.out.println(output);
5. Lớp Math
 java.lang.Math cung cấp các thành phần
static:
 Các hằng toán học:
• Math.E
• Math.PI
 Các hàm toán học:
• max, min...
• abs, floor, ceil…
• sqrt, pow, log, exp…
• cos, sin, tan, acos, asin, atan…
• Random
 Hầu hết các hàm nhận tham số kiểu double và giá trị trả về
cũng có kiểu double
66
6. Lớp System
 java.lang.System chứa nhiều hàm tiện ích
hữu dụng
 Kiểm soát vào ra (I/O) chuẩn
• Các luồng vào in, ra out và err là các thuộc tính của lớp
System.
• Có thể thiết lập lại nhờ các hàm setIn(), setOut() và
setErr()
 arraycopy():Sao chép mảng hoặc tập con hiệu năng cao
 currentTimeMillis():Trả về thời gian hiện tại theo ms
 exit(): Kết thúc hoạt động của Java Virtual Machine
 gc(): Yêu cầu bộ thu gom rác hoạt động
 Các phương thức liên quan đến thuộc tính của hệ thống: Lấy
các thông tin như phiên bản của JRE, thư mục cài đặt Java...
67
Bài tập
Bài 1:
 Viết lớp Book
 Các thuộc tính: name, author, numberOfPage
 Viết phương thức khởi tạo
• Book(String name, String author, int nbrPage)
 Tự tạo phương thức getter, setter cho đủ dùng
 Đảm bảo đóng gói, che dấu dữ liệu
 Lớp Test
 Nhập số phần tử cho mảng Book
 Nhập lần lượt các Book
 In ra danh sách tên Book trong mảng và hiển thị tổng số
trang của các Book
 Đếm số Book hiện tại
68
Bài tập
Bài 2:
 Viết mã nguồn cho lớp NhanVien (chương 3)
 Viết phương thức khởi tạo với các tham số cần
thiết để khởi tạo cho các thuộc tính của lớp
NhanVien.
 Viết lớp TestNV trong đó tạo ra 2 đối tượng của
lớp NhanVien, thực hiện truyền thông điệp đến
các đối tượng vừa tạo để hiển thị thông tin, hiển
thị lương, tăng lương...
 Cài đặt phương thức, đầu vào là một mảng các đối
tượng lớp NhanVien, đầu ra là tổng lương của các
đối tượng này.
69
Bài tập
Bài 3:
 Sử dụng lớp System đếm thời gian phép cộng xâu
nhiều lần với String, và dùng phương thức append
với StringBuffer để so sánh hiệu năng.
70

More Related Content

What's hot

Bai08 10 java_fx
Bai08 10 java_fxBai08 10 java_fx
Bai08 10 java_fx
Nhuận Lê Văn
 
Bai07 da hinh
Bai07 da hinhBai07 da hinh
Bai07 da hinh
Nhuận Lê Văn
 
Lập Trình Hướng Đối Tượng trong Java ( Vietnamese )
Lập Trình Hướng Đối Tượng trong Java ( Vietnamese )Lập Trình Hướng Đối Tượng trong Java ( Vietnamese )
Lập Trình Hướng Đối Tượng trong Java ( Vietnamese )
Đông Lương
 
[Cntt] bài giảng lập trình java bkhcm
[Cntt] bài giảng lập trình java   bkhcm[Cntt] bài giảng lập trình java   bkhcm
[Cntt] bài giảng lập trình java bkhcm
Hong Phuoc Nguyen
 
Oop unit 02 java cơ bản
Oop unit 02 java cơ bảnOop unit 02 java cơ bản
Oop unit 02 java cơ bản
Tráng Hà Viết
 
Ky thuat l.trinh_java
Ky thuat l.trinh_javaKy thuat l.trinh_java
Ky thuat l.trinh_javaLam Man
 
Oop unit 04 các kỹ thuật xây dựng lớp
Oop unit 04 các kỹ thuật xây dựng lớpOop unit 04 các kỹ thuật xây dựng lớp
Oop unit 04 các kỹ thuật xây dựng lớp
Tráng Hà Viết
 
[Cntt] all java
[Cntt] all java[Cntt] all java
[Cntt] all java
Hong Phuoc Nguyen
 
[Cntt] bài giảng java khtn hcm
[Cntt] bài giảng java   khtn hcm[Cntt] bài giảng java   khtn hcm
[Cntt] bài giảng java khtn hcm
Hong Phuoc Nguyen
 
Oop unit 13 tổng quan về uml
Oop unit 13 tổng quan về umlOop unit 13 tổng quan về uml
Oop unit 13 tổng quan về uml
Tráng Hà Viết
 
Oop unit 03 xây dựng lớp
Oop unit 03 xây dựng lớpOop unit 03 xây dựng lớp
Oop unit 03 xây dựng lớp
Tráng Hà Viết
 
Oop unit 07 các kỹ thuật kế thừa
Oop unit 07 các kỹ thuật kế thừaOop unit 07 các kỹ thuật kế thừa
Oop unit 07 các kỹ thuật kế thừa
Tráng Hà Viết
 
Oop unit 09 lập trình tổng quát
Oop unit 09 lập trình tổng quátOop unit 09 lập trình tổng quát
Oop unit 09 lập trình tổng quát
Tráng Hà Viết
 
Oop unit 05 một số kỹ thuật java nâng cao
Oop unit 05 một số kỹ thuật java nâng caoOop unit 05 một số kỹ thuật java nâng cao
Oop unit 05 một số kỹ thuật java nâng cao
Tráng Hà Viết
 
Oop unit 01 tổng quan lập trình hướng đối tượng
Oop unit 01 tổng quan lập trình hướng đối tượngOop unit 01 tổng quan lập trình hướng đối tượng
Oop unit 01 tổng quan lập trình hướng đối tượng
Tráng Hà Viết
 
Oop unit 06 kế thừa
Oop unit 06 kế thừaOop unit 06 kế thừa
Oop unit 06 kế thừa
Tráng Hà Viết
 
Bài 2: Lập trình hướng đối tượng (OOP) - Giáo trình FPT
Bài 2: Lập trình hướng đối tượng (OOP) - Giáo trình FPTBài 2: Lập trình hướng đối tượng (OOP) - Giáo trình FPT
Bài 2: Lập trình hướng đối tượng (OOP) - Giáo trình FPT
MasterCode.vn
 
Oop unit 10 ngoại lệ
Oop unit 10 ngoại lệOop unit 10 ngoại lệ
Oop unit 10 ngoại lệ
Tráng Hà Viết
 

What's hot (20)

Bai08 10 java_fx
Bai08 10 java_fxBai08 10 java_fx
Bai08 10 java_fx
 
Bai07 da hinh
Bai07 da hinhBai07 da hinh
Bai07 da hinh
 
Lập Trình Hướng Đối Tượng trong Java ( Vietnamese )
Lập Trình Hướng Đối Tượng trong Java ( Vietnamese )Lập Trình Hướng Đối Tượng trong Java ( Vietnamese )
Lập Trình Hướng Đối Tượng trong Java ( Vietnamese )
 
On thitotnghiep
On thitotnghiepOn thitotnghiep
On thitotnghiep
 
[Cntt] bài giảng lập trình java bkhcm
[Cntt] bài giảng lập trình java   bkhcm[Cntt] bài giảng lập trình java   bkhcm
[Cntt] bài giảng lập trình java bkhcm
 
Oop unit 02 java cơ bản
Oop unit 02 java cơ bảnOop unit 02 java cơ bản
Oop unit 02 java cơ bản
 
Ky thuat l.trinh_java
Ky thuat l.trinh_javaKy thuat l.trinh_java
Ky thuat l.trinh_java
 
Oop unit 04 các kỹ thuật xây dựng lớp
Oop unit 04 các kỹ thuật xây dựng lớpOop unit 04 các kỹ thuật xây dựng lớp
Oop unit 04 các kỹ thuật xây dựng lớp
 
[Cntt] all java
[Cntt] all java[Cntt] all java
[Cntt] all java
 
[Cntt] bài giảng java khtn hcm
[Cntt] bài giảng java   khtn hcm[Cntt] bài giảng java   khtn hcm
[Cntt] bài giảng java khtn hcm
 
Oop unit 13 tổng quan về uml
Oop unit 13 tổng quan về umlOop unit 13 tổng quan về uml
Oop unit 13 tổng quan về uml
 
Oop unit 03 xây dựng lớp
Oop unit 03 xây dựng lớpOop unit 03 xây dựng lớp
Oop unit 03 xây dựng lớp
 
Java Tieng Viet
Java Tieng VietJava Tieng Viet
Java Tieng Viet
 
Oop unit 07 các kỹ thuật kế thừa
Oop unit 07 các kỹ thuật kế thừaOop unit 07 các kỹ thuật kế thừa
Oop unit 07 các kỹ thuật kế thừa
 
Oop unit 09 lập trình tổng quát
Oop unit 09 lập trình tổng quátOop unit 09 lập trình tổng quát
Oop unit 09 lập trình tổng quát
 
Oop unit 05 một số kỹ thuật java nâng cao
Oop unit 05 một số kỹ thuật java nâng caoOop unit 05 một số kỹ thuật java nâng cao
Oop unit 05 một số kỹ thuật java nâng cao
 
Oop unit 01 tổng quan lập trình hướng đối tượng
Oop unit 01 tổng quan lập trình hướng đối tượngOop unit 01 tổng quan lập trình hướng đối tượng
Oop unit 01 tổng quan lập trình hướng đối tượng
 
Oop unit 06 kế thừa
Oop unit 06 kế thừaOop unit 06 kế thừa
Oop unit 06 kế thừa
 
Bài 2: Lập trình hướng đối tượng (OOP) - Giáo trình FPT
Bài 2: Lập trình hướng đối tượng (OOP) - Giáo trình FPTBài 2: Lập trình hướng đối tượng (OOP) - Giáo trình FPT
Bài 2: Lập trình hướng đối tượng (OOP) - Giáo trình FPT
 
Oop unit 10 ngoại lệ
Oop unit 10 ngoại lệOop unit 10 ngoại lệ
Oop unit 10 ngoại lệ
 

Similar to Bai04 tao vasudungdoituong

Ctdl C01
Ctdl C01Ctdl C01
Ctdl C01giang
 
Bài 2: Lập trình hướng đối tượng & Collection - Lập trình winform - Giáo trìn...
Bài 2: Lập trình hướng đối tượng & Collection - Lập trình winform - Giáo trìn...Bài 2: Lập trình hướng đối tượng & Collection - Lập trình winform - Giáo trìn...
Bài 2: Lập trình hướng đối tượng & Collection - Lập trình winform - Giáo trìn...
MasterCode.vn
 
Pplthdt c02 lop_doi_tuong_v13.09a
Pplthdt c02 lop_doi_tuong_v13.09aPplthdt c02 lop_doi_tuong_v13.09a
Pplthdt c02 lop_doi_tuong_v13.09aPix Nhox
 
Lap trinh java hieu qua
Lap trinh java hieu quaLap trinh java hieu qua
Lap trinh java hieu qua
Lê Anh
 
Ket tap, ke thua
Ket tap, ke thuaKet tap, ke thua
Ket tap, ke thua
Tuan Do
 
OOP_02_Java can ban.pdf
OOP_02_Java can ban.pdfOOP_02_Java can ban.pdf
OOP_02_Java can ban.pdf
ssuserd01a5c
 
Những điểm mới trong c# 3.0
Những điểm mới trong c# 3.0Những điểm mới trong c# 3.0
Những điểm mới trong c# 3.0Trần Thiên Đại
 
Lappj trình hướng đối tượng
Lappj trình hướng đối tượngLappj trình hướng đối tượng
Lappj trình hướng đối tượng
Hưởng Nguyễn
 
Pplthdt c04 thuoc_tinhdoituong_phuongthuc_v13.09a
Pplthdt c04 thuoc_tinhdoituong_phuongthuc_v13.09aPplthdt c04 thuoc_tinhdoituong_phuongthuc_v13.09a
Pplthdt c04 thuoc_tinhdoituong_phuongthuc_v13.09aPix Nhox
 
1. Java cơ bản.pdf
1. Java cơ bản.pdf1. Java cơ bản.pdf
1. Java cơ bản.pdf
luutrutailieu1707
 
Java ease learning(1)
Java ease learning(1)Java ease learning(1)
Java ease learning(1)Nguyen Xuan
 
Chapter 3
Chapter 3Chapter 3
Chapter 3
Hưng Trang Sĩ
 
Jniについて
JniについてJniについて
Jniについて
Chu Chu
 
7 stl c++
7   stl c++7   stl c++
7 stl c++qnv95
 
Hdth01 ltudql2-lap tinhduongdoituong-vb
Hdth01 ltudql2-lap tinhduongdoituong-vbHdth01 ltudql2-lap tinhduongdoituong-vb
Hdth01 ltudql2-lap tinhduongdoituong-vbDũng Đinh
 
bt-mon-lap-trinh-huong-doi-tuong.pdf
bt-mon-lap-trinh-huong-doi-tuong.pdfbt-mon-lap-trinh-huong-doi-tuong.pdf
bt-mon-lap-trinh-huong-doi-tuong.pdf
HiNht6
 

Similar to Bai04 tao vasudungdoituong (20)

Ctdl C01
Ctdl C01Ctdl C01
Ctdl C01
 
Bài 2: Lập trình hướng đối tượng & Collection - Lập trình winform - Giáo trìn...
Bài 2: Lập trình hướng đối tượng & Collection - Lập trình winform - Giáo trìn...Bài 2: Lập trình hướng đối tượng & Collection - Lập trình winform - Giáo trìn...
Bài 2: Lập trình hướng đối tượng & Collection - Lập trình winform - Giáo trìn...
 
Pplthdt c02 lop_doi_tuong_v13.09a
Pplthdt c02 lop_doi_tuong_v13.09aPplthdt c02 lop_doi_tuong_v13.09a
Pplthdt c02 lop_doi_tuong_v13.09a
 
Lap trinh java hieu qua
Lap trinh java hieu quaLap trinh java hieu qua
Lap trinh java hieu qua
 
Ket tap, ke thua
Ket tap, ke thuaKet tap, ke thua
Ket tap, ke thua
 
Chuong5 (2)
Chuong5 (2)Chuong5 (2)
Chuong5 (2)
 
OOP_02_Java can ban.pdf
OOP_02_Java can ban.pdfOOP_02_Java can ban.pdf
OOP_02_Java can ban.pdf
 
Những điểm mới trong c# 3.0
Những điểm mới trong c# 3.0Những điểm mới trong c# 3.0
Những điểm mới trong c# 3.0
 
Lappj trình hướng đối tượng
Lappj trình hướng đối tượngLappj trình hướng đối tượng
Lappj trình hướng đối tượng
 
Pplthdt c04 thuoc_tinhdoituong_phuongthuc_v13.09a
Pplthdt c04 thuoc_tinhdoituong_phuongthuc_v13.09aPplthdt c04 thuoc_tinhdoituong_phuongthuc_v13.09a
Pplthdt c04 thuoc_tinhdoituong_phuongthuc_v13.09a
 
1. Java cơ bản.pdf
1. Java cơ bản.pdf1. Java cơ bản.pdf
1. Java cơ bản.pdf
 
Java ease learning(1)
Java ease learning(1)Java ease learning(1)
Java ease learning(1)
 
KPDL.pptx
KPDL.pptxKPDL.pptx
KPDL.pptx
 
Chapter 3
Chapter 3Chapter 3
Chapter 3
 
Chuong8 (2)
Chuong8 (2)Chuong8 (2)
Chuong8 (2)
 
Jniについて
JniについてJniについて
Jniについて
 
7 stl c++
7   stl c++7   stl c++
7 stl c++
 
Hdth01 ltudql2-lap tinhduongdoituong-vb
Hdth01 ltudql2-lap tinhduongdoituong-vbHdth01 ltudql2-lap tinhduongdoituong-vb
Hdth01 ltudql2-lap tinhduongdoituong-vb
 
bt-mon-lap-trinh-huong-doi-tuong.pdf
bt-mon-lap-trinh-huong-doi-tuong.pdfbt-mon-lap-trinh-huong-doi-tuong.pdf
bt-mon-lap-trinh-huong-doi-tuong.pdf
 
7 stl c++
7   stl c++7   stl c++
7 stl c++
 

Recently uploaded

AV6 - PIE CHART WRITING skill in english
AV6 - PIE CHART WRITING skill in englishAV6 - PIE CHART WRITING skill in english
AV6 - PIE CHART WRITING skill in english
Qucbo964093
 
Khoá luận tốt nghiệp ngành Truyền thông đa phương tiện Xây dựng kế hoạch truy...
Khoá luận tốt nghiệp ngành Truyền thông đa phương tiện Xây dựng kế hoạch truy...Khoá luận tốt nghiệp ngành Truyền thông đa phương tiện Xây dựng kế hoạch truy...
Khoá luận tốt nghiệp ngành Truyền thông đa phương tiện Xây dựng kế hoạch truy...
https://www.facebook.com/garmentspace
 
CHUYÊN ĐỀ BỒI DƯỠNG HỌC SINH GIỎI KHOA HỌC TỰ NHIÊN 9 CHƯƠNG TRÌNH MỚI - PHẦN...
CHUYÊN ĐỀ BỒI DƯỠNG HỌC SINH GIỎI KHOA HỌC TỰ NHIÊN 9 CHƯƠNG TRÌNH MỚI - PHẦN...CHUYÊN ĐỀ BỒI DƯỠNG HỌC SINH GIỎI KHOA HỌC TỰ NHIÊN 9 CHƯƠNG TRÌNH MỚI - PHẦN...
CHUYÊN ĐỀ BỒI DƯỠNG HỌC SINH GIỎI KHOA HỌC TỰ NHIÊN 9 CHƯƠNG TRÌNH MỚI - PHẦN...
Nguyen Thanh Tu Collection
 
Ảnh hưởng của nhân sinh quan Phật giáo đến đời sống tinh thần Việt Nam hiện nay
Ảnh hưởng của nhân sinh quan Phật giáo đến đời sống tinh thần Việt Nam hiện nayẢnh hưởng của nhân sinh quan Phật giáo đến đời sống tinh thần Việt Nam hiện nay
Ảnh hưởng của nhân sinh quan Phật giáo đến đời sống tinh thần Việt Nam hiện nay
chinhkt50
 
Dẫn luận ngôn ngữ - Tu vung ngu nghia.pptx
Dẫn luận ngôn ngữ - Tu vung ngu nghia.pptxDẫn luận ngôn ngữ - Tu vung ngu nghia.pptx
Dẫn luận ngôn ngữ - Tu vung ngu nghia.pptx
nvlinhchi1612
 
Chương III (Nội dung vẽ sơ đồ tư duy chương 3)
Chương III (Nội dung vẽ sơ đồ tư duy chương 3)Chương III (Nội dung vẽ sơ đồ tư duy chương 3)
Chương III (Nội dung vẽ sơ đồ tư duy chương 3)
duykhoacao
 
GIÁO TRÌNH 2-TÀI LIỆU SỬA CHỮA BOARD MONO TỦ LẠNH MÁY GIẶT ĐIỀU HÒA.pdf
GIÁO TRÌNH 2-TÀI LIỆU SỬA CHỮA BOARD MONO TỦ LẠNH MÁY GIẶT ĐIỀU HÒA.pdfGIÁO TRÌNH 2-TÀI LIỆU SỬA CHỮA BOARD MONO TỦ LẠNH MÁY GIẶT ĐIỀU HÒA.pdf
GIÁO TRÌNH 2-TÀI LIỆU SỬA CHỮA BOARD MONO TỦ LẠNH MÁY GIẶT ĐIỀU HÒA.pdf
Điện Lạnh Bách Khoa Hà Nội
 
BAI TAP ON HE LOP 2 LEN 3 MON TIENG VIET.pdf
BAI TAP ON HE LOP 2 LEN 3 MON TIENG VIET.pdfBAI TAP ON HE LOP 2 LEN 3 MON TIENG VIET.pdf
BAI TAP ON HE LOP 2 LEN 3 MON TIENG VIET.pdf
phamthuhoai20102005
 
98 BÀI LUYỆN NGHE TUYỂN SINH VÀO LỚP 10 TIẾNG ANH DẠNG TRẮC NGHIỆM 4 CÂU TRẢ ...
98 BÀI LUYỆN NGHE TUYỂN SINH VÀO LỚP 10 TIẾNG ANH DẠNG TRẮC NGHIỆM 4 CÂU TRẢ ...98 BÀI LUYỆN NGHE TUYỂN SINH VÀO LỚP 10 TIẾNG ANH DẠNG TRẮC NGHIỆM 4 CÂU TRẢ ...
98 BÀI LUYỆN NGHE TUYỂN SINH VÀO LỚP 10 TIẾNG ANH DẠNG TRẮC NGHIỆM 4 CÂU TRẢ ...
Nguyen Thanh Tu Collection
 
30 - ĐỀ THI HSG - HÓA HỌC 9 - NĂM HỌC 2021 - 2022.pdf
30 - ĐỀ THI HSG - HÓA HỌC 9 - NĂM HỌC 2021 - 2022.pdf30 - ĐỀ THI HSG - HÓA HỌC 9 - NĂM HỌC 2021 - 2022.pdf
30 - ĐỀ THI HSG - HÓA HỌC 9 - NĂM HỌC 2021 - 2022.pdf
ngocnguyensp1
 

Recently uploaded (10)

AV6 - PIE CHART WRITING skill in english
AV6 - PIE CHART WRITING skill in englishAV6 - PIE CHART WRITING skill in english
AV6 - PIE CHART WRITING skill in english
 
Khoá luận tốt nghiệp ngành Truyền thông đa phương tiện Xây dựng kế hoạch truy...
Khoá luận tốt nghiệp ngành Truyền thông đa phương tiện Xây dựng kế hoạch truy...Khoá luận tốt nghiệp ngành Truyền thông đa phương tiện Xây dựng kế hoạch truy...
Khoá luận tốt nghiệp ngành Truyền thông đa phương tiện Xây dựng kế hoạch truy...
 
CHUYÊN ĐỀ BỒI DƯỠNG HỌC SINH GIỎI KHOA HỌC TỰ NHIÊN 9 CHƯƠNG TRÌNH MỚI - PHẦN...
CHUYÊN ĐỀ BỒI DƯỠNG HỌC SINH GIỎI KHOA HỌC TỰ NHIÊN 9 CHƯƠNG TRÌNH MỚI - PHẦN...CHUYÊN ĐỀ BỒI DƯỠNG HỌC SINH GIỎI KHOA HỌC TỰ NHIÊN 9 CHƯƠNG TRÌNH MỚI - PHẦN...
CHUYÊN ĐỀ BỒI DƯỠNG HỌC SINH GIỎI KHOA HỌC TỰ NHIÊN 9 CHƯƠNG TRÌNH MỚI - PHẦN...
 
Ảnh hưởng của nhân sinh quan Phật giáo đến đời sống tinh thần Việt Nam hiện nay
Ảnh hưởng của nhân sinh quan Phật giáo đến đời sống tinh thần Việt Nam hiện nayẢnh hưởng của nhân sinh quan Phật giáo đến đời sống tinh thần Việt Nam hiện nay
Ảnh hưởng của nhân sinh quan Phật giáo đến đời sống tinh thần Việt Nam hiện nay
 
Dẫn luận ngôn ngữ - Tu vung ngu nghia.pptx
Dẫn luận ngôn ngữ - Tu vung ngu nghia.pptxDẫn luận ngôn ngữ - Tu vung ngu nghia.pptx
Dẫn luận ngôn ngữ - Tu vung ngu nghia.pptx
 
Chương III (Nội dung vẽ sơ đồ tư duy chương 3)
Chương III (Nội dung vẽ sơ đồ tư duy chương 3)Chương III (Nội dung vẽ sơ đồ tư duy chương 3)
Chương III (Nội dung vẽ sơ đồ tư duy chương 3)
 
GIÁO TRÌNH 2-TÀI LIỆU SỬA CHỮA BOARD MONO TỦ LẠNH MÁY GIẶT ĐIỀU HÒA.pdf
GIÁO TRÌNH 2-TÀI LIỆU SỬA CHỮA BOARD MONO TỦ LẠNH MÁY GIẶT ĐIỀU HÒA.pdfGIÁO TRÌNH 2-TÀI LIỆU SỬA CHỮA BOARD MONO TỦ LẠNH MÁY GIẶT ĐIỀU HÒA.pdf
GIÁO TRÌNH 2-TÀI LIỆU SỬA CHỮA BOARD MONO TỦ LẠNH MÁY GIẶT ĐIỀU HÒA.pdf
 
BAI TAP ON HE LOP 2 LEN 3 MON TIENG VIET.pdf
BAI TAP ON HE LOP 2 LEN 3 MON TIENG VIET.pdfBAI TAP ON HE LOP 2 LEN 3 MON TIENG VIET.pdf
BAI TAP ON HE LOP 2 LEN 3 MON TIENG VIET.pdf
 
98 BÀI LUYỆN NGHE TUYỂN SINH VÀO LỚP 10 TIẾNG ANH DẠNG TRẮC NGHIỆM 4 CÂU TRẢ ...
98 BÀI LUYỆN NGHE TUYỂN SINH VÀO LỚP 10 TIẾNG ANH DẠNG TRẮC NGHIỆM 4 CÂU TRẢ ...98 BÀI LUYỆN NGHE TUYỂN SINH VÀO LỚP 10 TIẾNG ANH DẠNG TRẮC NGHIỆM 4 CÂU TRẢ ...
98 BÀI LUYỆN NGHE TUYỂN SINH VÀO LỚP 10 TIẾNG ANH DẠNG TRẮC NGHIỆM 4 CÂU TRẢ ...
 
30 - ĐỀ THI HSG - HÓA HỌC 9 - NĂM HỌC 2021 - 2022.pdf
30 - ĐỀ THI HSG - HÓA HỌC 9 - NĂM HỌC 2021 - 2022.pdf30 - ĐỀ THI HSG - HÓA HỌC 9 - NĂM HỌC 2021 - 2022.pdf
30 - ĐỀ THI HSG - HÓA HỌC 9 - NĂM HỌC 2021 - 2022.pdf
 

Bai04 tao vasudungdoituong

  • 1. LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG Bài 04. Tạo và sử dụng đối tượng – Các kỹ thuật đi kèm 1 IT3100
  • 2. Mục tiêu bài học  Tìm hiểu cách tạo và sử dụng đối tượng  Phương thức khởi tạo  Khai báo và khởi tạo đối tượng  Sử dụng đối tượng  Tìm hiểu việc quản lý bộ nhớ và so sánh đối tượng  Tìm hiểu các kỹ thuật lập trình  Chồng phương thức  Sử dụng thành viên đối tượng, thành viên lớp  Truyền tham số cho phương thức  Giới thiệu một số lớp tiện ích trong Java 2
  • 3. Nội dung 1. Khai báo và khởi tạo đối tượng 2. Sử dụng đối tượng 3. Quản lý bộ nhớ 4. Một số kỹ thuật đi kèm 5. Một số lớp tiện ích 3
  • 4. 1/ KHAI BÁO VÀ KHỞI TẠO ĐỐI TƯỢNG 4
  • 5. 1. Khởi tạo và hủy bỏ đối tượng  Đối tượng cần phải được khởi tạo trước khi sử dụng 5 Student - name - address - studentID - dateOfBirth Nguyễn Hoàng Nam Hà Nội… Nguyễn Thu Hương Hải Phòng… Trần Văn Bê Nam Định…
  • 6. 1. Khởi tạo và hủy bỏ đối tượng  Mỗi đối tượng khi tồn tại và hoạt động được HĐH cấp phát một vùng nhớ để lưu lại các giá trị của dữ liệu thành phần  Khi tạo ra đối tượng HĐH sẽ gán giá trị khởi tạo cho các dữ liệu thành phần  Phải được thực hiện tự động trước khi người lập trình có thể 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 khi kết thúc cần phải giải phóng hợp lý tất cả các bộ nhớ đã cấp phát cho đối tượng.  Java: JVM  C++: Hàm hủy (destructor) 6
  • 7. 2. Phương thức khởi tạo  Là phương thức đặc biệt được gọi tự động khi tạo ra đối tượng  Mục đích chính: Cấp phát vùng nhớ + Khởi tạo cho các thuộc tính của đối tượng  Mỗi lớp phải chứa ít nhất một constructor  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ề 7 public Student(String nstr, String astr){ name = nstr; address = astr; } Student - name - address
  • 8. 2. Phương thức khởi tạo  Phương thức khởi tạo có thể dùng các chỉ định truy cập • public • private • không có chỉ định  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 được xem như là thành viên của lớp. 8
  • 9. 2.1. Các kiểu PT khởi tạo  PT khởi tạo không tham số  PT khởi tạo có tham số  PT khởi tạo ngầm định  Khi không định nghĩa một phương thức khởi tạo cho một lớp, JVM cung cấp một phương thức khởi tạo ngầm định. 9 public Student(String nstr, String astr){ name = nstr; address = astr; } public Student(){ name = “no name”; address = “no address”; }
  • 10. 3. Khai báo và khởi tạo đối tượng  Đối tượng được tạo ra, thể hiện hóa (instantiate) từ một mẫu chung (lớp).  Các đối tượng phải được khai báo kiểu của đối tượng trước khi sử dụng:  Kiểu của đối tượng là lớp các đối tượng  Ví dụ: • String strName; • BankAccount acc; 10
  • 11. 3. Khai báo và khởi tạo đối tượng  Đối tượng cần được khởi tạo trước khi sử dụng  Sử dụng toán tử = để gán  Sử dụng từ khóa new với constructor để khởi tạo đối tượng: • Từ khóa 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 khởi tạo mặc định là null  Đối tượng được thao tác thông qua tham chiếu (~ con trỏ).  Ví dụ: BankAccount acc1; acc1 = new BankAccount(); 11
  • 12. 3. Khai báo và khởi tạo đối tượng  Có thể kết hợp vừa khai báo và khởi tạo đối tượng  Cú pháp: Ten_lop ten_doi_tuong = new Pthuc_khoi_tao(ds_tham_so); 12
  • 13. 3. Khai báo và khởi tạo đối tượng  Mảng các đối tượng được khai báo giống như mảng dữ liệu cơ bản  Mảng các đối tượng được khởi tạo mặc định với giá trị null.  Ví dụ: Employee emp1 = new Employee(123456); Employee emp2; emp2 = emp1; Department dept[] = new Department[100]; Test[] t = {new Test(1),new Test(2)}; 13
  • 14. Ví dụ 1 class BankAccount{ private String owner; private double balance; } public class Test{ public static void main(String args[]){ BankAccount acc1 = new BankAccount(); } } 14
  • 15. Ví dụ 2 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(); } } 15
  • 16. Ví dụ 3 public class BankAccount { private String owner; private double balance; public BankAccount(String name) { setOwner(name); } public void setOwner(String o) { owner = o; } } public class Test { public static void main(String args[]){ BankAccount account1 = new BankAccount(); BankAccount account2 = new BankAccount("Hoang"); } } 16 //Error
  • 17. 2/ SỬ DỤNG ĐỐI TƯỢNG 17
  • 18. 1. Sử dụng đối tượng  Đối tượng cung cấp các hoạt động phức tạp hơn các kiểu dữ liệu nguyên thủy  Đối tượng đáp ứng lại các thông điệp  Toán tử "." được sử dụng để gửi một thông điệp đến một đối tượng 18
  • 19. 1. Sử dụng đối tượng (2)  Để gọi thành viên (dữ liệu hoặc thuộc tính) của lớp hoặc đối tượng, sử dụng toán tử “.”  Nếu gọi phương thức ngay trong lớp thì toán tử “.” không cần thiết. 19
  • 20. Ví dụ 20 public class BankAccount{ private String owner; private double balance; public BankAccount(String name) { setOwner(name); // Là viết tắt của this.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(“”); BankAccount acc2 = new BankAccount(“Hong”); acc1.setOwner(“Hoa”); System.out.println(acc1.getOwner() + “ ”+ acc2.getOwner()); } }
  • 21. 2. Tự tham chiếu – this  Cho phép truy cập vào đối tượng hiện tại của lớp.  Quan trọng khi hàm/phương thức thành phần thao tác trên hai hay nhiều đối tượng.  Xóa đi sự nhập nhằng giữa một biến cục bộ, tham số với thành phần dữ liệu của lớp  Không dùng bên trong các khối lệnh static 21
  • 22. Ví dụ 22 public class BankAccount{ private String owner; private double balance; public BankAccount() { } public void setOwner(String owner){ this.owner = owner; } public String getOwner(){ return owner; } } public class Test{ public static void main(String args[]){ BankAccount acc1 = new BankAccount(); BankAccount acc2 = new BankAccount(); acc1.setOwner(“Hoa”); acc2.setOwner(“Hong”); System.out.println(acc1.getOwner() + “ ” + acc2.getOwner()); }
  • 23. 3/ QUẢN LÝ BỘ NHỚ 23
  • 24. 1. Quản lý bộ nhớ  Java không sử dụng con trỏ nên các địa chỉ bộ nhớ không thể bị ghi đè lên một cách ngẫu nhiên hoặc cố ý.  Các vấn đề định vị và tái định vị bộ nhớ, quản lý bộ nhớ do JVM kiểm soát, hoàn toàn trong suốt với lập trình viên.  Lập trình viên không cần quan tâm đến việc ghi dấu các phần bộ nhớ đã cấp phát trong heap để giải phóng sau này. 24
  • 25. 2. Bộ nhớ Heap  s là biến tham chiếu, lưu trên Stack  Giá trị của s là địa chỉ của vùng nhớ Heap lưu trữ đối tượng s tham chiếu tới  Bộ nhớ Heap sử dụng để ghi thông tin được tạo bởi toán tử new. 25 String s = new String(“hello”); Bộ nhớ Heap Bộ nhớ Stack s
  • 26. 2. Bộ nhớ Heap (2) 26 String s = new String(“hello”); String t = s ; Bộ nhớ Heap Bộ nhớ Stack t s int i = 201; int j = i; j i 201 201 •Giá trị cục bộ trong bộ nhớ Stack được sử dụng như con trỏ tham chiếu tới Heap •Giá trị của dữ liệu nguyên thủy được ghi trực tiếp trong Stack
  • 27. 3. Bộ thu gom rác (Garbage Collector)  Một tiến trình chạy ngầm gọi đến bộ “thu gom rác” để phục hồi lại phần bộ nhớ mà các đố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 được gán null  Bộ thu gom rác định kỳ quét qua danh sách các đối tượng của JVM và phục hồi các tài nguyên của các đối tượng không có tham chiếu 27
  • 28. 3. Bộ thu gom rác (2)  JVM quyết định khi nào thực hiện thu gom rác:  Thông thường sẽ thực thi khi thiếu bộ nhớ  Tại thời điểm không dự đoán trước  Không thể ngăn quá trình thực hiện của bộ thu gom rác nhưng có thể yêu cầu thực hiện sớm hơn: System.gc(); hoặc Runtime.gc(); 28
  • 29. 4. So sánh đối tượng  Đối với các kiểu dữ liệu nguyên thủy, toán tử == kiểm tra xem chúng có giá trị bằng nhau hay không  Đối với các đối tượng, toán tử == kiểm tra xem hai đối tượng có đồng nhất hay không, (có cùng tham chiếu đến một đối tượng hay không) 29 Employee a = new Employee(1); Employee b = new Employee(1); if (a==b)... // false Employee a = new Employee(1); Employee b = a; if (a==b)... // true a và b cùng tham chiếu tới 1 đối tượng a và b tham chiếu tới 2 đối tượng khác nhau
  • 30. 4. So sánh đối tượng (2)  Phương thức equals  Đối với kiểu dữ liệu nguyên thủy: Không tồn tại  Đối với các đối tượng: Bất kỳ đối tượng nào cũng có phương thức này, dùng để so sánh giá trị của đối tượng  Phương thức equals kế thừa từ lớp Object (nhắc lại trong bài kế thừa)  Cài đặt mặc định của phương thức equals là như toán tử ==. Cần cài đặt lại để so sánh 2 đối tượng dựa trên từng thuộc tính 30
  • 31. Ví dụ == và equals – Lớp Integer 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)); } } 31 Lớp Integer (cung cấp trong Java SDK) đã cài đặt lại phương thức equals của lớp Object, nên n1.equals(n2) trả về true
  • 32. Sử dụng equals với lớp tự viết 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)); } } 32 Lớp Value (LTV tự viết) chưa cài đặt lại phương thức equals của lớp Object, nên v1.equals(v2) trả về false, giống như toán tử ==
  • 33. 5. Hủy bỏ đối tượng  Trong C#, C++:  Sử dụng phương thức hủy (destructor)  Phương thức hủy là phương thức tự động được gọi trước khi đối tượng được hủy  Phương thức hủy thường dùng để dọn dẹp bộ nhớ, thu hồi tài nguyên (VD đối tượng khi hoạt động cần truy cập tới file/CSDL, cấp phát bộ nhớ động)  Trong Java:  Không có khái niệm phương thức hủy  Sử dụng phương thức finalize() 33
  • 34. 6. Phương thức void finalize()  Lớp nào cũng có phương thức finalize() – được thực thi ngay lập tức trước khi gabage collector giải phóng đối tượng  Thường chỉ sử dụng cho các trường hợp đặc biệt để “tự dọn dẹp” các tài nguyên sử dụng khi đối tượng được gc giải phóng  Ví dụ cần đóng các socket, CSDL... nên được xử lý trong luồng chính trước khi các đối tượng bị ngắt bỏ tham chiếu.  Có thể coi là phương thức hủy (destructor) của lớp mặc dù Java không có khái niệm này. 34
  • 35. 4/MỘT SỐ KỸ THUẬT ĐI KÈM 35
  • 36. 1. Chồng phương thức  Chồng phương thức (Method Overloading): Các phương thức trong cùng một lớp có thể trùng tên nhưng chữ ký phải khác nhau:  Số lượng tham số khác nhau  Nếu cùng số lượng tham số thì kiểu dữ liệu các tham số phải khác nhau  Mục đích:  Tên trùng nhau để mô tả cùng bản chất công việc  Thuận tiện cho lập trình vì không cần phải nhớ quá nhiều tên phương thức mà chỉ cần nhớ một tên và lựa chọn các tham số cho phù hợp. 36
  • 37. 1. Chồng phương thức (2)  Ví dụ 37 class MyDate { int year, month, day; public boolean setMonth(int m) { …} public boolean setMonth(String s) { …} } public class Test{ public static void main(String args[]){ MyDate d = new MyDate(); d.setMonth(9); d.setMonth(”September”); } }
  • 38. 1. Chồng phương thức (3)  Các phương thức chỉ được xem xét là chồng khi chúng thuộc cùng một lớp  Chỉ nên sử dụng kỹ thuật này với các phương thức có cùng mục đích, chức năng; tránh lạm dụng  Khi dịch, trình dịch căn cứ vào số lượng hoặc kiểu dữ liệu của tham số để quyết định gọi phương thức nào phù hợp.  Nếu không chọn được hoặc chọn được nhiều hơn 1 phương thức thì sẽ báo lỗi. 38
  • 39. Ví dụ 1  Cho phương thức sau đây: public double test(String a, int b)  Hãy chọn ra các phương thức chồng cho phương thức trên: 1. void test(String b, int a) 2. public double test(String a) 3. private int test(int b, String a) 4. private int test(String a, int b) 5. double test(double a, int b) 6. double test(int b) 7. public double test(String a, long b) 39
  • 40. 1.1. Chồng PT với kiểu nguyên thủy void prt(String s) { System.out.println(s); } void f1(char x) { prt("f1(char)"); } void f1(byte x) { prt("f1(byte)"); } void f1(short x){ prt("f1(short)"); } void f1(int x) { prt("f1(int)"); } void f1(long x) { prt("f1(long)"); } void f1(float x) { prt("f1(float)"); } void f1(double x) { prt("f1(double)"); } 40 •Kiểu nguyên thủy có thể được chuyển từ kiểu nhỏ hơn sang kiểu lớn hơn => lưu ý ! Điều gì xảy ra nếu: f1(5); char x=‘a’; f1(x); byte y=0; f1(y); float z = 0; f1(z);
  • 41. 2. Chồng PT khởi tạo  Trong nhiều tình huống khác nhau cần khởi tạo đối tượng theo nhiều cách khác nhau  Cần xây dựng các phương thức khởi tạo khác nhau cho đối tượng theo nguyên lý chồng phương thức (constructor overloading) 41 public class BankAccount{ private String owner; private double balance; public BankAccount(){owner = “noname”;} public BankAccount(String o, double b){ owner = o; balance = b; } }
  • 42. 2. Chồng PT khởi tạo  Gọi đến phương thức khởi tạo khác của lớp  this(danh_sach_tham_so); //neu co tham so 42 public class Ship { private double x=0.0, y=0.0 public String name; public Ship(String name) { this.name = name; } public Ship(String name, double x, double y) { this(name); this.x = x; this.y = y; } //continue… }
  • 43. 3. Thành viên lớp (static)  Trong Java  Các thành viên bình thường là thành viên thuộc về đối tượng  Thành viên thuộc về lớp được khai báo là static  Cú pháp khai báo thành viên static: chi_dinh_truy_cap static kieu_du_lieu tenBien; 43
  • 44. 3. Thành viên lớp (static) (2)  Các phương thức static chỉ có thể truy cập vào các thuộc tính static và chỉ có thể gọi các phương thức static trong cùng lớp.  Thay đổi giá trị của một thành viên static trong một đối tượng của lớp sẽ làm thay đổi giá trị của thành viên này đối với tất cả các đối tượng khác của lớp đó. 44
  • 45. Ví dụ 45 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(); System.out.println(obj2.iStatic + ”,” + obj2.iNonStatic); obj2.iStatic = 12; System.out.println(obj1.iStatic + ”,” + obj1.iNonStatic); } } TestStatic.iStatic = 12;
  • 46. 3.1. Thành viên đối tượng vs lớp Thành viên đối tượng  Thuộc tính/phương thức chỉ được truy cập thông qua đối tượng  Mỗi đối tượng có 1 bản sao riêng của 1 thuộc tính đối tượng  Giá trị của 1 thuộc tính đối tượng của các đối tượng khác nhau là khác nhau Thành viên lớp  Thuộc tính/phương thức có thể được truy cập thông qua lớp  Các đối tượng có chung 1 bản sao của 1 thuộc tính lớp  Giá trị của 1 thuộc tính lớp của các đối tượng khác nhau là giống nhau. 46
  • 47. 4. Truyền tham số cho phương thức  Với tham số có kiểu dữ liệu tham trị (kiểu dữ liệu nguyên thủy):  Truyền giá trị/bản sao của các biến nguyên thủy truyền vào  Với tham số có kiểu dữ liệu tham chiếu (mảng và đối tượng):  Thực ra là truyền bản sao của tham chiếu gốc, chứ không phải truyền tham chiếu gốc hoặc truyền đối tượng (pass the references by value, not the original reference or the object)  Sau khi truyền cho phương thức, đối tượng có ít nhất 2 tham chiếu 47
  • 48. Ví dụ 1 public class Student { private int year; private String name; public Student(String name, int year) { this.year = year; this.name = name; } public int getYear() { return year;} public void setYear(int year) { this.year = year;} } public class Test { public static void change(Student std){ std.setYear(2000); } public static void main(String[] args) { Student std = new Student("Nam", 1990); System.out.println(std.getYear()); change(std); System.out.println(std.getYear()); } } 48 std = new Student("Hung", 1995);
  • 49. Ví dụ 2 49 public class Point { private double x; private double y; public Point() { } public Point(double x, double y) {this.x = x; this.y = y;} public void setX(double x) { this.x = x; } public void setY(double y) { this.y = y; } public void printPoint(){System.out.println("X: "+x+" Y: "+y);} } public class Test { public static void tricky(Point arg1, Point arg2) { arg1.setX(100); arg1.setY(100); Point temp = arg1; arg1 = arg2; arg2 = temp; } public static void main(String [] args) { Point pnt1 = new Point(0,0); Point pnt2 = new Point(0,0); pnt1.printPoint(); pnt2.printPoint(); System.out.println(); tricky(pnt1, pnt2); pnt1.printPoint(); pnt2.printPoint(); } }
  • 50. Ví dụ 2 (2)  Chỉ có các tham chiếu bản sao của đối tượng được tráo đổi, chứ không phải các tham chiếu gốc của đối tượng 50
  • 51. 4.1 Truyền số lượng tham số tùy ý  Được gọi là varargs. Cú pháp:  ten_phuong_thuc(Kieu_dl... ten_tham_so)  Ví dụ:  Khai báo: public PrintStream printf(String format, Object... args)  Sử dụng • System.out.printf ("%s: %d, %sn", name, idnum, address); • System.out.printf ("%s: %d, %s, %s, %sn", name, idnum, address, phone, email); 51
  • 52. Ví dụ public class Test { public static int plus(int... arr) { int result = 0; for (int i : arr) { result += i; } return result; } public static void main(String[] args) { System.out.println(plus(1, 2, 3, 4, 5)); } } 52 Tính tổng số lượng các số nguyên bất kỳ
  • 53. 5. Nested class (tham khảo thêm)  Định nghĩa một class trong một class khác: Nếu 1 class hữu ích chỉ cho 1 class khác  sẽ logic nếu nhúng class đó vào class kia  Nested class là 1 thành viên của lớp bao nó  Nested class chia làm 2 loại: Static nested class và non- static Inner class  Inner Class lại chia làm 2 loại con: • local inner class: Khai báo 1 inner class trong 1 method • anonymous inner classes: Khai báo 1 inner Class trong 1 method nhưng không đặt tên 53
  • 54. 5/ MỘT SỐ LỚP TIỆN ÍCH 54
  • 55. 1. Các package cơ bản  java.lang • Cung cấp các lớp cơ bản cho thiết kế ngôn ngữ lập trình Java • Bao gồm wrapper classes, String và StringBuffer, Object, ... • Import ngầm định vào tất cả các lớp  java.util • Bao gồm tập hợp framework, mô hình sự kiện, date time, và nhiều tiện ích khác.  java.io • Cung cấp khả năng vào/ra hệ thống với các luồng dữ liệu và hệ thống file. 55
  • 56. 1. Các package cơ bản (2)  java.math • Cung cấp các lớp thực thi các phép toán với số nguyên và các phép toán thập phân  java.sql • Cung cấp các API cho phép truy nhập và xử lý dữ liệu được lưu trữ trong một nguồn dữ liệu (thường sử dụng cơ sở dữ liệu quan hệ)  javax.swing • Cung cấp các lớp và giao diện cho phép tạo ra các ứng dụng đồ họa.  … 56
  • 57. 2. Các lớp bao  Mỗi kiểu dữ liệu nguyên thủy có một lớp tương ứng gọi là lớp bao (Wrapper class) :  Các lớp bao sẽ “gói” dữ liệu nguyên thủy và cung cấp các phương thức thích hợp cho dữ liệu đó.  Mỗi đối tượng của lớp bao đơn giản là lưu trữ một biến đơn và đưa ra các phương thức để xử lý nó.  Các lớp bao là một phần của Java API 57
  • 58. 2. Các lớp bao (2) 58
  • 59. 2. Các lớp bao (3)  Các phương thức thường có trong lớp bao:  Sử dụng toString() để chuyển các giá trị số thành xâu.  Sử dụng <type>Value() để chuyển từ đối tượng của lớp bao thành giá trị nguyên thủy của đối tượng tương ứng  Sử dụng parse<type>() và valueOf() để chuyển xâu thành các giá trị số. 59 Float objF = new Float(“4.67”); float f = objF.floatValue(); int i = objF.intValue(); int i = Integer.parseInt(“123”); double d = Double.parseDouble(“1.5”) ; Double objF2 = Double.valueOf(“-36.12”); long l = objF2.longValue();
  • 60. 2. Các lớp bao (4)  Các thuộc tính hằng thường có trong lớp bao: 60 • Boolean • boolean FALSE boolean TRUE • Byte • byte MIN_VALUE • byte MAX_VALUE • Character • int MAX_RADIX • char MAX_VALUE • int MIN_RADIX • char MIN_VALUE • Double • double MAX_VALUE • double MIN_VALUE • double NaN • double NEGATIVE_INFINITY • double POSITIVE_INFINITY • Float • float MAX_VALUE • float MIN_VALUE • float NaN • float NEGATIVE_INFINITY • float POSITIVE_INFINITY • Integer • int MIN_VALUE • int MAX_VALUE • Long • long MIN_VALUE • long MAX_VALUE • Short • short MIN_VALUE • short MAX_VALUE
  • 61. 3. Lớp String  Kiểu String là một lớp và không phải là kiểu dữ liệu nguyên thủy  Các kiểu dữ liệu cơ bản sử dụng trong lời gọi println() được chuyển đổi tự động sang kiểu String: System.out.println("answer = " + 1 + 2 + 3); System.out.println("answer = " + (1+2+3));  Đối tượng String có thể khởi tạo theo nhiều cách: String str1 = "Java is Hot"; String c = new String(); String d = new String("Another String"); String e = String.valueOf(1.23); String f = null; 61
  • 62. Ví dụ String s1 = "Hello"; l String s2 = "Hello"; String s3 = s1; String s4 = new String("Hello"); String s5 = new String("Hello"); String s6 = String.valueOf("Hello"); 62 s1==s2: S1==s3: s1==s4: s1==s6: s4==s5: s4==s6:
  • 63. 3. Lớp String (2)  Các phương thức của lớp String 63 String name = "Joe Smith"; name.toLowerCase(); // "joe smith" name.toUpperCase(); // "JOE SMITH" "Joe Smith ".trim(); // "Joe Smith" "Joe Smith".indexOf('e'); // 2 "Joe Smith".length(); // 9 "Joe Smith".charAt(5); // 'm' "Joe Smith".substring(5); // "mith" "Joe Smith".substring(2,5); // "e S“ oneString.equals(anotherString) // so sánh 2 xâu Kiểm tra tính tương đương, Trả về true hoặc false oneString.equalsIgnoreCase(anotherString) Kiểm tra KHÔNG xét đến ký tự hoa, thường
  • 64. 4. Lớp StringBuffer  String là kiểu bất biến:  Đối tượng không thay đổi giá trị sau khi được tạo ra  Các xâu của lớp String được thiết kế để không thay đổi giá trị.  Khi các xâu được ghép nối với nhau một đối tượng mới được tạo ra để lưu trữ kết quả  Ghép nối xâu thông thường rất tốn kém về bộ nhớ.  StringBuffer là kiểu biến đổi:  Đối tượng có thể thay đổi giá trị sau khi được tạo ra  Sử dụng StringBuffer khi: • Dự đoán các ký tự trong xâu có thể thay đổi. • Khi xử lý các xâu một cách linh động, ví dụ như đọc dữ liệu text từ một tệp tin. 64
  • 65. Ví dụ 65 StringBuffer buffer = new StringBuffer(15); buffer.append("This is ") ; buffer.append("String") ; buffer.insert(7," a") ; buffer.append('.'); System.out.println(buffer.length()); String output = buffer.toString() ; System.out.println(output);
  • 66. 5. Lớp Math  java.lang.Math cung cấp các thành phần static:  Các hằng toán học: • Math.E • Math.PI  Các hàm toán học: • max, min... • abs, floor, ceil… • sqrt, pow, log, exp… • cos, sin, tan, acos, asin, atan… • Random  Hầu hết các hàm nhận tham số kiểu double và giá trị trả về cũng có kiểu double 66
  • 67. 6. Lớp System  java.lang.System chứa nhiều hàm tiện ích hữu dụng  Kiểm soát vào ra (I/O) chuẩn • Các luồng vào in, ra out và err là các thuộc tính của lớp System. • Có thể thiết lập lại nhờ các hàm setIn(), setOut() và setErr()  arraycopy():Sao chép mảng hoặc tập con hiệu năng cao  currentTimeMillis():Trả về thời gian hiện tại theo ms  exit(): Kết thúc hoạt động của Java Virtual Machine  gc(): Yêu cầu bộ thu gom rác hoạt động  Các phương thức liên quan đến thuộc tính của hệ thống: Lấy các thông tin như phiên bản của JRE, thư mục cài đặt Java... 67
  • 68. Bài tập Bài 1:  Viết lớp Book  Các thuộc tính: name, author, numberOfPage  Viết phương thức khởi tạo • Book(String name, String author, int nbrPage)  Tự tạo phương thức getter, setter cho đủ dùng  Đảm bảo đóng gói, che dấu dữ liệu  Lớp Test  Nhập số phần tử cho mảng Book  Nhập lần lượt các Book  In ra danh sách tên Book trong mảng và hiển thị tổng số trang của các Book  Đếm số Book hiện tại 68
  • 69. Bài tập Bài 2:  Viết mã nguồn cho lớp NhanVien (chương 3)  Viết phương thức khởi tạo với các tham số cần thiết để khởi tạo cho các thuộc tính của lớp NhanVien.  Viết lớp TestNV trong đó tạo ra 2 đối tượng của lớp NhanVien, thực hiện truyền thông điệp đến các đối tượng vừa tạo để hiển thị thông tin, hiển thị lương, tăng lương...  Cài đặt phương thức, đầu vào là một mảng các đối tượng lớp NhanVien, đầu ra là tổng lương của các đối tượng này. 69
  • 70. Bài tập Bài 3:  Sử dụng lớp System đếm thời gian phép cộng xâu nhiều lần với String, và dùng phương thức append với StringBuffer để so sánh hiệu năng. 70