You are on page 1of 506

WORKING HARD & SMART TODAY FOR A BETTER

TOMORROW

Bài Học

Giới thiệu
Ngôn ngữ lập trình java
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Nội dung bài học

❖Lịch sử ra đờ i
❖Cá c đặ c trưng điểm mạ nh củ a Java
❖Tạ i sao nên lậ p trình Java
❖JVM - Java Virtual Machine
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Lịch sử ra đời

❑ Ngôn ngữ lập trình Java do hãng Sun


Microsystem xây dựng và phát triển năm
1995

❑ Java được kế thừa trực tiếp từ ngôn ngữ C và


C++

❑ Java là ngôn ngữ lập trình hướng đối tượng


và độc lập nền tảng với tiêu chí “Write Once,
Run Anywher”
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Lịch sử ra đời
Release Year
JDK Beta 1994
JDK 1.0 1996
JDK 1.1 1997
J2SE 1.2 1998
J2SE 1.3 2000
J2SE 1.4 2002
J2SE 5.0 2005
Java SE 6 2006
Java SE 7 2011
Java SE 8 2014
JDK 9, 21 tháng 9 năm 2017
JDK 10, 20 tháng 3 năm 2018
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Các đặc trưng điểm mạnh của Java

❑ Hướng đối tượng


❑ Độc lập kiến trúc, nền tảng
❑ Đa nhiệm
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Tại sao nên lập trình Java

❑ Viết một lần sài mọi nền tảng


❑ Cộng đồng hỗ trợ Java khổng lồ
❑ Nhu cầu tuyển dụng rất nhiều
❑ Ngôn ngữ lập trình cho Android đã nổi tiếng
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Ứng dụng Java

❑ Ứng dụng android


❑ Ứng dụng máy chủ cho dịch vụ tài chính
❑ Nhu cầu tuyển dụng rất nhiều
❑ Ngôn ngữ lập trình cho Android đã nổi tiếng
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
JVM - Java Virtual Machine

❑ Nạp tập tin .class

❑ Quản lý bộ nhớ

❑ Thực hiện thu gom rác


Source code Native code

Java Compiler JIT Compiler

Bytecodes Java Virtual Machine


WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW

Bài Học

Các công cụ lập trình với java


WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Nội dung bài học

❖Notepad
❖Eclipse
❖Netbean
❖Android Studio
Phần mềm học JAVA

Bộ cài đặt JDK (Java Development Kit)


• http://www.oracle.com/technetwork/java/javase/downloads/i
ndex.html
• Máy ảo JAVA (Java Virtual Machine)
Môi trường phát triển IDE (Integrated Development
Environment)

• Netbeans
• Eclipse
• JCreator
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Notepad

❖Notepad là cô ng cụ đơn giả n nhấ t để soạ n


thả o coding java:
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Eclipse

❖Eclipse là mộ t trong nhữ ng cô ng cụ nổ i


tiếng nhấ t hiện này để lậ p trình Java
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Netbean

❖Netbean
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Android Studio

❖Android Studio là cô ng cụ rấ t nổ i tiếng để


lậ p trình Android, viết mã nguồ n bằ ng java
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW

Bài Học

Cài đặt JDK


WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Nội dung bài học

❖Kiểm tra cấ u hình máy để quyết định lự a


chọ n tả i phiên bả n JDK phù hợ p
❖Cá ch tả i JDK phù hợ p
❖Cá ch cà i đặ t JDK
❖Cá c cá ch kiểm tra JDK trong máy: Command
line, Control panel
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Kiểm tra cấu hình máy
❖Máy tính bây giờ thườ ng có 64bit hoặ c
32bit, do đó phả i kiểm tra cấ u hình chính
xá c thì mớ i lự a chọ n tả i JDK đú ng.

🡺Bấ m chuộ t phả i và o biểu


tượ ng This PC/ chọ n
Properties
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Kiểm tra cấu hình máy
❖Nhìn và o thấy 64bit
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Cách tải JDK phù hợp

❖Link tả i:
❖http://www.oracle.com/technetwork/java/
javase/downloads/index.html

❖ Chú ý version có thể bị thay đổ i, bạ n tự kiểm tra lấy cá i mớ i nhấ t


WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Cách tải JDK phù hợp

❖Chọ n Java SE Development Kit 8u112:

❖Checked và o Accept License Agreement


WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Cách tải JDK phù hợp

❖Chọ n Java SE Development Kit 8u112:

❖Checked và o Accept License Agreement


WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Cách tải JDK phù hợp

❖Vì máy ta là 64bit nên chọ n Windows X64

❖Nếu máy bạ n là 32bit thì chọ n Windows


X86, tuy nhiên cố gắ ng cà i máy tính Win 10
Pro 64bit
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Cách tải JDK phù hợp

❖Sau khi chú ng ta bấ m và o link tả i thì cử a sổ


yêu cầ u chọ n nơi lưu trữ hiển thị ra:
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Cách tải JDK phù hợp

❖Sau khi tả i thà nh cô ng:


WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Cách cài đặt JDK

❖Ta nhấ n double click và o tậ p tin JDK mớ i tả i


về để cà i đặ t:
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Cách cài đặt JDK

❖Tiếp tụ c chọ n Next


WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Cách cài đặt JDK

❖Chọ n nơi cà i đặ t Jdk, mặ c định là Ổ C:\


Program Files\Java\

❖Chọ n nơi lưu trữ xong bấ m Next để tiếp tụ c


WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Cách cài đặt JDK

❖Chọ n nơi cà i đặ t Jdk, mặ c định là Ổ C:\


Program Files\Java\
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Cách cài đặt JDK

❖Hỏ i nơi lưu trữ JRE, tương tự ta chọ n nơi


lưu trữ rồ i bấ m Next
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Cách cài đặt JDK

❖Tiếp tụ c chờ cà i đặ t cho xong JDK


WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Cách cài đặt JDK

❖Đã cà i đặ t xong JDK


WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Cách cài đặt JDK

❖Nơi đã cà i đặ t:
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Các cách kiểm tra JDK trong máy

❖Kiểm tra bằ ng Control panel:


WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Các cách kiểm tra JDK trong máy

❖Kiểm tra bằ ng Command Line:


WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW

Bài Học

Cài đặt biến môi trường cho


Java
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Nội dung bài học

❖Cá c bướ c cà i đặ t biến mô i trườ ng


❖Kiểm tra phiên bả n javac và phiên bả n java
trong máy
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Các bước cài đặt biến môi trường

Bướ c 1: Bấ m chuộ t phả i và o biểu tượ ng máy


tính:

🡺chọ n Properties
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Các bước cài đặt biến môi trường

Bướ c 2: Chọ n Advanced system settings


WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Các bước cài đặt biến môi trường

Bướ c 3: Chọ n Environment Variables…


WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Các bước cài đặt biến môi trường

Bướ c 4: Chọ n new như hình


Tạ o biến JAVA_HOME

Kiểm tra trong System


variables chưa có
JAVA_HOME thì bấ m
New.
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Các bước cài đặt biến môi trường

Bướ c 4: Tạ o biến JAVA_HOME

Variable name: đặ t tên là JAVA_HOME


Variable value: trỏ tớ i đườ ng dẫ n JDK mà ta vừ a cà i đặ t xong
Thô ng thườ ng là : C:\Program File\Java\jdkxxx (xxx tương ứng
với phiên bản mà bạn đã cài đặt). Xong ấn ok
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Các bước cài đặt biến môi trường

Bướ c 4: kết quả :


WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Các bước cài đặt biến môi trường

Bướ c 5: Cấ u hình cho Path

Chọ n Path sau đó bấ m Edit


WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Các bước cài đặt biến môi trường

Bướ c 5: Cấ u hình cho Path

Bấ m Edit Text…
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Các bước cài đặt biến môi trường

Bướ c 5: Cấ u hình cho Path

;%JAVA_HOME%\bin;.;

Thêm lệnh trên đằ ng sau Variable Value rồ i bấ m OK


WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Các bước cài đặt biến môi trường

Bướ c 5: Cấ u hình cho Path – kết quả :


WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Kiểm tra phiên bản javac, java

❖Mở cử a sổ run lên rồ i gõ cmd:


WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Kiểm tra phiên bản javac, java

❖Kiểm tra lệnh javac để biên dịch source .java


thà nh .class
javac -version
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Kiểm tra phiên bản javac, java

❖Kiểm tra lệnh java để đưa.class thà nh mã


máy có thể hiểu đượ c
java -version
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW

Bài Học

Cách chạy chương trình Java


bằng lệnh Command line
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Nội dung bài học

❖ Tạ o mộ t lớ p Java trong Notepad: Quy tắ c


đặ t tên lớ p + tên file, cá ch viết hà m main để
chạy
❖Cá ch sử dụ ng lệnh javac để biên dịch source
code
❖Cá ch sử dụ ng lệnh java để thự c thi bytecode
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Tạo một lớp Java trong Notepad

❖Tên lớ p trù ng vớ i tên File, phầ n mở rộ ng


là .java

public class HelloWorld


{
public static void main(String []args)
{
System.out.println("Xin chào Obama!");
}
}
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Cách sử dụng lệnh javac

❖Ta HelloWorld.java đượ c lưu:

❖Sau đó mở Run lên:


WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Cách sử dụng lệnh javac
❖ Gõ cá c lệ nh để tìm tớ i HelloWorld.java:
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Cách sử dụng lệnh javac
❖ Để ý dò ng lệnh:
javac HelloWorld.java
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Cách sử dụng lệnh javac
❖ Nếu biên dịch thà nh cô ng:

❖ Tiếp tụ c .class về mã máy:


java HelloWorld
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Cách sử dụng lệnh java
❖ Ta thấy kết quả xuấ t: Xin chà o Obama!
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW

Bài Học

Cách cài đặt và sử dụng


Công cụ NetBeans
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Kiểm tra cấu hình máy
❖Máy tính bây giờ thườ ng có 64bit hoặ c
32bit, do đó phả i kiểm tra cấ u hình chính
xá c thì mớ i lự a chọ n tả i JDK đú ng.

🡺Bấ m chuộ t phả i và o biểu


tượ ng This PC/ chọ n
Properties
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Kiểm tra cấu hình máy
❖Nhìn và o thấy 64bit
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Cách tải và cài đặt phiên bản NetBeans

❖Và o link:
https://netbeans.apache.org/download/index.html
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Cách tạo các Project

❖ Project là 1 dự á n cụ thể nà o đó , đượ c lưu và o


Workspace (1 Workspace sẽ có nhiều Project)
❖ Và o File/ New/ Java Project
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Cách tạo package

❖package bả n chấ t là cây thư mụ c để tổ chứ c


sắ p xếp phâ n loạ i cá c lớ p, giú p cho việc bả o
trì dự á n đượ c tố t hơn. Package trong java
yêu cầ u phả i viết thườ ng hết. Nó đượ c phâ n
cấ p theo dạ ng thư mụ c cha con (dự a và o dấ u
chấ m . lú c tạ o package)
❖Đặ t package như thế nà o là do Lậ p trình viên
quyết định.
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Cách tạo package

❖Bấ m chuộ t phả i và o Project/ chọ n new/


chọ n java package
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Cách tạo package

❖Name: Đặ t tên cho package


Ví dụ để communityuni.com
có nghĩa là có 2 thư mụ c.
-Thư mụ c cha là
communityuni
-Thư mụ c con là com
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Cách tạo package

❖ Trên Project, package hiển thị:

❖ Vậy ngoà i việc tổ chứ c sắ p xếp phâ n loạ i lớ p,


package cò n có ý nghĩa gì?
🡺Thườ ng gắ n liền vớ i domain củ a cá nhâ n, tổ chứ c.
Nhưng khô ng có nghĩa nó phả i tồ n tạ i.
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Cách tạo class

❖Để tạ o lớ p/ và o package/ chọ n new/ chọ n


class
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Cách tạo class

❖ Cá ch nhậ p và o tên Lớ p: Ký tự đầ u tiên củ a cá c từ


phả i VIẾ T HOA
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Cách biên dịch và thực thi dự án

❖Để biên dịch và chạy ta và o Run/ Run hoặ c


gõ F6 Hoặ c nhấ n và o biểu tượ ng trên toolbar
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Cách biên dịch và thực thi dự án

❖Kết quả thự c thi:


WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW

Bài Học

Cách xuất dữ liệu ra


màn hình
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Nội dung bài học

❖Thư viện xuấ t dữ liệu trong Java


❖Xuấ t dữ liệu trên cá c dò ng khá c nhau
❖Xuấ t dữ liệu trên cù ng mộ t dò ng
❖Cá c ký tự đặ c biệt
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Thư viện xuất dữ liệu trong Java

❖Thư viện xuấ t dữ liệu trong Java là :


java.lang
Vì nó mặ c định nên khô ng thấy đưa và o ứ ng
dụ ng.
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Xuất dữ liệu trên các dòng khác nhau
System.out.println("Obama");
System.out.println("Putin");
System.out.println("Kim Jong Un");

Có thể viết tắ t: sout rồ i gõ tổ hợ p phím ctrl+space để nó tự


độ ng xuấ t hiện
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Xuất dữ liệu trên cùng một dòng
System.out.print("Obama");
System.out.print("Putin");
System.out.print("Kim Jong Un");
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Các ký tự đặc biệt

❖\n 🡺Xuố ng dò ng
❖\t 🡺thụ t đầ u dò ng
❖\” 🡺trích dẫ n
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Các ký tự đặc biệt
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW

Bài Học

Cách ghi chú lệnh quan trọng


trong Java
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Nội dung bài học

❖Tạ i sao nên ghi chú trong quá trình coding?


❖Ghi chú 1 dò ng
❖Ghi chú nhiều dò ng
❖Ghi chú dạ ng Javadocs
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Tại sao nên ghi chú trong quá trình coding?

❖Mụ c đích củ a ghi chú là giú p giả ng giả i ngữ


nghĩa củ a cá c câ u lệnh, cũ ng như chứ c nă ng
củ a cá c hà m, cá c lớ p. Giú p cho cá c Lậ p trình
viên có thể dễ dà ng đọ c lạ i, training nhâ n
viên mớ i, tạ o tà i liệu từ cá c ghi chú
❖Cá c dự á n thườ ng là m theo độ i, nếu khô ng
ghi chú là m sao hiểu? Bả n thâ n ta viết sau 1
thờ i gian dà i cũ ng sẽ bị quên, phả i ghi chú lạ i
để đỡ tố n tà i nguyên nhâ n lự c, thờ i gian, chi
phí…
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Ghi chú 1 dòng

//đây là ghi chú 1 dòng


WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Ghi chú nhiều dòng
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Ghi chú dạng Javadocs
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Ghi chú dạng Javadocs
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW

Bài Học

Kiểu dữ liệu trong Java


WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Nội dung bài học

❖Cá c kiểu dữ liệu cơ sở


❖Wrapper Class
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Các kiểu dữ liệu cơ sở
4 nhóm – 8 kiểu
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Wrapper Class

Kiểu cơ sở Wrapper class


boolean Boolean
char Character
byte Byte
short Short
int Integer
long Long
float Float
double Double

Wrapper class rấ t hữ u ích, kiểu dữ liệu đố i tượ ng


WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW

Ví dụ: Integer count= new Integer(0)


WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Wrapper Class

❖ Kiểm tra khả nă ng lưu trữ tố i đa – tố i thiếu củ a cá c


kiểu cơ sở
System.out.println("Min của int ="+Integer.MIN_VALUE);
System.out.println("Max của int ="+Integer.MAX_VALUE);
System.out.println("Min của double ="+Double.MIN_VALUE);
System.out.println("Max của double ="+Double.MAX_VALUE);
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW

Bài Học

Ép kiểu dữ liệu trong Java


WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Nội dung bài học

❖Vì sao phả i ép kiểu


❖É p kiểu rộ ng
❖É p kiểu hẹp
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Vì sao phải ép kiểu

❖Trong quá trình tính toá n đô i khi kết quả trả


về khô ng cò n giố ng vớ i kiểu dữ liệu chỉ định
ban đầ u nên ta cầ n ép kiểu
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Ép kiểu rộng

❖É p kiểu rộ ng: Đưa từ kiểu có vù ng lưu trữ


nhỏ lên kiểu có vù ng lưu trữ lớ n🡺khô ng sợ
mấ t má t dữ liệu.
❖Ví dụ : int🡺long🡺float🡺double
double x = (double)1/2;
double x=1.0/2; ⬄double/int🡺double
double x=1/2 ; ⬄ int/int=int🡺0🡺0.0
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Ép kiểu hẹp

❖É p kiểu hẹp: Đưa từ kiểu có vù ng lưu trữ lớ n


về kiểu có vù ng lưu trữ nhỏ 🡺có thể bị mấ t
má t dữ liệu
❖Ví dụ : double🡺float🡺long🡺int
int x= (int)1.0/2

(int)1.0🡺1
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW

Bài Học

Các phép toán trong Java


WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Nội dung bài học

❖Phép gá n
= += -= *=, /=
❖Phép toá n toá n họ c cơ bả n
+ - * / %
❖Phép toá n so sá nh
== > < != >= <=
❖Phép toá n logic
! && ||
❖Phép toá n tă ng dầ n ++, giả m dầ n --
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Phép gán

Ký hiệu Mô tả Ví dụ
= Gá n toá n tử hạ ng hai cho toá n tử hạ ng a = 1
nhấ t
+= Cộ ng hoặ c nố i chuỗ i toá n hạ ng sau và o a += 1
toá n hạ ng đầ u và gá n kết quả cho toá n a=a+1
hạ ng đầ u
-= Trừ toá n hạ ng sau khỏ i toá n hạ ng đầ u và a -= 1
gá n kết quả cho toá n hạ ng đầ u. a=a-1
*= Nhâ n toá n hạ ng sau và o toá n hạ ng đầ u và a *= 2
gá n kết quả cho toá n hạ ng đầ u a=a*2
/= Chia toá n hạ ng sau cho toá n hạ ng đầ u và a /= 2
gá n kết quả cho toá n hạ ng đầ u a=a/2
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Phép toán toán học cơ bản
Toá n tử Mô tả
+ Cộ ng
- Trừ
* Nhâ n
/ Chia
% Chia lấy phầ n dư

int a=5; int t=456;


int b=8; int sd = 456%10=6
int c=b/a;⬄8/5=1 t=t/10=456/10=45
int d=b%a; ⬄8%5=3 sd=45%10=5
t=t/10=45/10=4
sd=4%10=4
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Phép toán so sánh

Toá n tử Mô tả
== So sá nh bằ ng
!= So sá nh khô ng bằ ng
> So sá nh lớ n hơn
>= So sá nh lớ n hơn hoặ c bằ ng
< So sá nh nhỏ hơn
<= So sá nh nhỏ hơn hoặ c bằ ng
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Phép toán logic

Toá n tử Mô tả
! Đú ng thà nh sai, sai thà nh đú ng.

&& Phép toá n luậ n lý VÀ (AND) trên 2 giá trị.


Kế t quả trả về TRUE khi cả hai đề u đú ng

|| Phép toá n luậ n lý HOẶ C (OR) trê n 2 giá


trị. Kết quả trả về FALSE khi cả hai đều
sai
?: Toá n tử điề u kiện
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Phép toán tăng dần ++, giảm dần --

Toá n tử Mô tả

++ Tă ng mộ t giá trị

-- Giả m mộ t giá trị

int x=5; int z=5;

x++; 🡺tăng x lên 1 đơn vị 🡺x=6 Z--; 🡺giảm z đi 1 đơn vị 🡺x=4


int y=5; int w=5;
++y;🡺tăng y lên 1 đơn vị🡺y=6 --w;🡺giảm w đi 1 đơn vị🡺w=4
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Phép toán tăng dần ++, giảm dần --

int x=5; int x=5;


++x; X++;
Prefix postfix
int y=5; int y=5;
--y; Y--;
int x=8;
int y= 2;
int z = x++ + ++y -5;
Bước 1: ưu tiên xử lý prefix trước: y=3
Bước 2: Tính toán các phép toán còn lại: 8 + 3 – 5=6
Bước 3: gán giá trị ở bước 2 cho vế trái: z=6
Bước 4: thực hiện postfix: x=9
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Phép toán tăng dần ++, giảm dần --

int x=8;
int y= 2;
int k=3
int z = --k - ++x - y++ +2;
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Độ ưu tiên toán tử

Thứ tự Toá n tử
1 Cá c toá n tử đơn như: +, -, ++, --
2 Cá c toá n tử số họ c *, /, +, -
3 Cá c toá n tử quan hệ >, <, >=, <=, ==, !=
4 Cá c toá n tử luậ n lý &&, ||, ?:
5 Cá c toá n tử gá n =, *=, /=, +=, -=
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW

Bài Học

Nhập dữ liệu từ bàn phím


với Scanner
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Nội dung bài học

❖Cá ch import thư viện để sử dụ ng Scanner


❖Cá ch nhậ p dữ liệu từ Scanner: Nhậ p số , nhậ p
chuỗ i
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Cách import thư viện

❖ Ta gõ và i ký tự : Scan rồ i gõ tổ hợ p phím Ctrl+


Space 🡺 NetBeans hiển thị ra danh mụ c cá c Lớ p
tương đương🡺ta chọ n Scanner củ a java.util
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Cách import thư viện

❖ NetBeans sẽ tự độ ng import thư viện cho ta


WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Cách nhập dữ liệu từ Scanner

❖Tạ o đố i tượ ng Scanner để nhậ p liệu:


WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Cách nhập dữ liệu từ Scanner

❖Nhậ p số Nguyên (int):


System.out.println("Nhập số nguyên:");
int a=sc.nextInt();
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Cách nhập dữ liệu từ Scanner

❖Nhậ p số thự c (double, float):


System.out.println("Nhập số double:");
double d=sc.nextDouble();
System.out.println("Nhập số float:");
float f=sc.nextFloat();
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Cách nhập dữ liệu từ Scanner

❖Nhậ p Chuỗ i:
System.out.println("Mời bạn nhập tên:");
String ten=sc.nextLine();
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW

Bài Học

Cấu trúc if, if else,


cấu trúc 3 ngôi
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Nội dung bài học

❖Cấ u trú c if
❖Cấ u trú c if else
❖Cấ u trú c 3 ngô i
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Cấu trúc if

if (<expression> )
{
<statement>;
}
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Cấu trúc if-else

❖Ví dụ 1
if (dtb >=5)
{
System.out.println (“Đậ u");
}
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Cấu trúc if-else

if (< expression > )


{
< statement 1>;
}
else
{
< statement 2>;
}
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Cấu trúc if-else

❖Ví dụ 2
if (i % 2 == 0)
{
System.out.println ("i la so chan");
}
else
{
System.out.println("i la so le");
}
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Cấu trúc if-else
❖Ví dụ 3
if ((y % 4 == 0 &&y%100!=0) || y%400==0)
{
System.out.println ("y la nă m nhuậ n");
}
else
{
System.out.println("y khô ng là nă m nhuậ n");
}
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Cấu trúc 3 ngôi

❖ Có dạ ng:
<Điều kiện> ? <Biểu thứ c 1> : <Biểu thứ c 2>
Nếu <Điều kiện> đú ng thì <Biểu thứ c 1> thự c hiện,
ngượ c lạ i <Biểu thứ c 2> thự c hiện
❖ Là dạ ng rú t gọ n củ a if…else
❖ Ví dụ
▪ string a = (i % 2 == 0) ? “so chan” : “so le”
▪ if(i%2==0)
▪ a=“so chan”;
▪ else
• a=“so le”
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW

Bài Học

Cấu trúc switch


WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Nội dung bài học

❖Cấ u trú c switch tổ ng quá t


❖Cấ u trú c switch biến thể
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Cấu trúc switch tổng quát

switch (<biến cầ n kiểm tra>)


{
case <giá trị 1>:
<cô ng việc 1>;
break;
case <giá trị 2>:
<cô ng việc 2>;
break;

default:
<cô ng việc nếu khô ng thuộ c trườ ng hợ p nà o ở trên>;
break;
}
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Cấu trúc switch tổng quát
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Cấu trúc switch tổng quát

❖Ví dụ
switch (i)
{
case 1:
System.out.println("so 1");
break;
case 2:
System.out.println("so 2");
break;
default:
System.out.println("default");
break;
}
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Cấu trúc switch biến thể
switch (<biến cầ n kiểm tra>) {
case <giá trị 1>:
case <giá trị 2>:
<cô ng việc X>;
break;
case <giá trị 3>:
case <giá trị 4>:
<cô ng việc Y>;
break;

default:
<cô ng việc nếu khô ng thuộ c trườ ng hợ p nà o ở trên>;
break;
}
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW

Bài Học

Vòng lặp while


WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Nội dung bài học

❖Cú phá p và cá ch hoạ t độ ng vò ng lặ p while


WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Vòng lặp while

Cú phá p:
while(expression)
statement;
●Ý nghĩa:
●B1: Expression đượ c định trị
●B2: Nếu kết quả là true thì
statement thự c thi và quay lạ i B1

●B3: Nếu kết quả là false thì


thoá t khỏ i vò ng lặ p while.
❖ Để thoá t vò ng lặ p: dù ng break
❖ Để kết thú c sớ m 1 vò ng lặ p: dù ng continue
❖ Lệnh trong while có thể không được thực hiện lần nào
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Vòng lặp while

❖Ví dụ
n = 1;
i = 1;
while (i <= 5)
{
n *= i;
i++;
}
System.out.println("5 giai thua ="+ n);
Giả sử n=5, gt=1, i=1
Lần 1: kiểm tra i<=n⬄1<=5🡺đúng🡺làm body while:
gt=gt*i=1*1=1
i++🡺i=i+1=1+1=2
Lần 2: kiểm tra i<=n⬄2<=5🡺đúng🡺làm body while:
gt=gt*i=1*2=2
i++🡺i=i+1= 2+1=3
Lần 3: kiểm tra i<=n ⬄3 <=5🡺đúng🡺làm body while:
gt=gt*i=2*3=6
i++🡺i=i+1=3+1=4
Lần 4: Kiểm tra i<=n⬄4<=5🡺đúgn🡺làm body while:
gt=gt*i=6*4=24
i++🡺i=i+1=4+1=5
Lần 5: Kiểm tra i<=n⬄5<=5🡺đúng🡺làm body while:
gt=gt*i=24*5=120
i+=🡺i=i+1=5+1=6
Lần 6: kiể mtra i<=n⬄6<=5🡺sai🡺ngừng while
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW

Bài Học

Vòng lặp do..while


WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Nội dung bài học

❖ Cú phá p và cá ch hoạ t độ ng vò ng lặ p
do...while
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Vòng lặp do…while

Cú pháp:
do {
statement;
}while(expression);
●Ý nghĩa:
−B1:Statement được thực hiện
−B2:Expression được định trị.
−Nếu expression là true thì
quay lại bước 1
−Nếu expression là false thì
thoát khỏi vòng lặp.
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Vòng lặp do…while

❖Để thoá t vò ng lặ p: dù ng break


❖Để kết thú c sớ m 1 vò ng lặ p: dù ng continue
❖Nhậ n xét:
▪ Vò ng lặ p đượ c chạy ít nhấ t 1 lầ n
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Vòng lặp do…while

❖Ví dụ

n = 1;
i = 1;
do
{
n *= i;
i++;
} while (i<=5);
System.out.println("5! = "+ n);
Giả sử: n=5; gt=1, i=1
Lần 1: gt=gt*i=1*1=1
i++🡺i=i+1=1+1=2
Kiểm tra i<=n ⬄2<=5🡺đúng
Lần 2: gt=gt*i=1*2=2
i++🡺i=i+1=2+1=3
Kiểm tra i<=n ⬄3<=5🡺đúng
Lần 3: gt=gt*i=2*3=6
i++🡺i=i+1=3+1=4
Kiểm tra i<=n ⬄4<=5🡺đúng
Lần 4: gt=gt*i=6*4=24
i++🡺i=i+1=4+1=5
Kiểm tra i<=n⬄5<=5🡺đúng
Lần 5: gt=gt*i=24*5=120
i++🡺i=i+1=5+1=6
Kiểm tra i<=n ⬄6<=5🡺sai🡺ngừng do while
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW

Bài Học

Vòng lặp for


WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Nội dung bài học

❖ Cú phá p và cá ch hoạ t độ ng vò ng lặ p for


WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Vòng lặp for
• Cú phá p:
for (Exp1; Exp2; Exp3)
statement;
• Ý nghĩa:
− Exp1: là biểu thứ c khở i tạ o
đượ c thự c hiện.
− Exp2: là biểu thứ c điều kiện
− Exp3: biểu thứ c điều khiển
lặ p
❖ Để thoá t vò ng lặ p: dù ng break
❖ Để kế t thú c sớ m 1 vò ng lặ p: dù ng continue
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Vòng lặp for

❖Ví dụ

int i;
int n = 1;
for(i=1; i<=5; i++)
{
n *= i;
}
System.out.println("5 giai thừa ="+ n);
n=5, gt=1
Lần 1) i=1, kiểm tra i<=n⬄i<=5🡺đúng, làm body:
gt=gt*i=1*1=1
Lần 2) i++🡺i=i+1=1+1=2,
kiểm tra i<=n ⬄2<=5🡺đúng, làm body:
gt=gt*i=1*2=2
Lần 3) i++🡺i=i+1=2+1=3
kiểm tra i<=n ⬄3<=5🡺đúng, làm body:
gt=gt*i=2*3=6
Lần 4) i++🡺i=i+1=3+1=4
kiểm tra i<=n ⬄4 <=5🡺đúng, làm body:
gt=gt*i=6*4=24
Lần 5) i++🡺i=i+1=4+1=5
kiểm tra i<=n⬄5<=5🡺đúng, làm body:
gt=gt*i=24*5=120
Lần 6) i++🡺i=i+1=5+1=6
kiểm tra i<=n ⬄6<=5🡺vô lý🡺ngừng for
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW

Bài Học

Khái niệm về mảng


WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Nội dung bài học

❖ Khá i niệm về mả ng
❖ Mụ c đích dù ng mả ng
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Khái niệm về mảng

Mảng là một loại biến đặc biệt, bao gồm một dãy các ô nhớ có nhiều ô
nhớ con cho phép biểu diễn thông tin dạng danh sách trong thực tế
Các phần tử trong mảng có cùng kiểu dữ liệu với nhau
Ví dụ:

Chỉ số 0 1 2 3 4 5 6 7

Mảng M 5 8 1 0 3 2 7 6

Phần tử M[3]

Một số mảng khác: Số thực, mảng chuỗi


WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Mục đích dùng mảng

✔ Mả ng là cá ch tố t nhấ t cho phép quả n lý nhiều phầ n tử dữ liệu


có cù ng kiể u tạ i cù ng mộ t thờ i điể m
✔ Mả ng tạ o ra sự tố i ưu trong việc quả n lý bộ nhớ so vớ i việc sử
dụ ng nhiều biến cho cù ng mộ t chứ c nă ng
Bộ nhớ có thể đượ c gá n cho mả ng chỉ khi mả ng thự c sự đượ c
sử dụ ng. Do đó , bộ nhớ khô ng bị tiêu tố n cho mả ng ngay khi bạ n
khai bá o mả ng.
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW

Bài Học

Cách khai báo và cấp phát


bộ nhớ cho mảng
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Nội dung bài học

❖ Khai bá o mả ng như thế nà o


❖ Cấ p phá t bộ nhớ sử dụ ng mả ng
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Khai báo mảng như thế nào

Khai bá o khô ng khở i tạ o kích thướ c và giá trị


KiểuDữ Liệu[] TênMả ng;
KiểuDữ Liệu TênMả ng[];
<data type> <array name> []=new <data type>[size]
<data type> <array name> []={value1, value2,…,valuen}
Ví dụ :
int[] M;
Hoặ c int M[];
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Cấp phát bộ nhớ sử dụng mảng

● Khai bá o khở i tạ o kích thướ c nhưng khô ng có giá trị ban đầ u


KiểuDữLiệu[] TênMảng = new KiểuDữLiệu[SốPhầnTử];
KiểuDữLiệu TênMảng[] = new KiểuDữLiệu[SốPhầnTử];
▪Ví dụ :
int[] a = new int[5];
int a[] = new int[5];
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Cấp phát bộ nhớ sử dụng mảng
● Khai bá o có khở i tạ o kích thướ c và khở i tạ o giá trị ban đầ u:
KiểuDữLiệu[] TênMảng = new KiểuDữLiệu[]
{giá trị 1, giá trị 2, giá trị 3, ...};
hoặc
KiểuDữLiệu[] TênMảng =
{giá trị 1, giá trị 2, giá trị 3, ...};
▪Ví dụ :
int[] a = new int[]{2,10,4,8,5};
int[] a = {2, 10, 4, 8, 5};
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW

Bài Học

Truy suất và
thao tác trên mảng
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Nội dung bài học

❖ Cá ch lấy dữ liệu từ mả ng
❖ Cá ch thay đổ i dữ liệu trên mả ng
❖ Cá ch xuấ t dữ liệu mả ng: for, for giá trị
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Cách lấy dữ liệu từ mảng

❑ Thao tác cơ bản


● Truy xuất giá trị 1 phần tử:
TênMảng[vị _trí_i]
▪Vị trí của 1 phần tử trong mảng bắt đầu từ 0
▪Vị_trí_i có giá trị từ 0 đến (số phần tử - 1)

Chỉ 0 1 2 3 4 5 6 7
số M[3] ?
Mảng M 5 8 1 113 3 2 7 6 M.length ?

● Lấy chiều dài của mảng: thuộc tính length


TênMảng.length
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Cách thay đổi dữ liệu trên mảng

❖ M[i]= value

❖ M[3]=113
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Cách xuất dữ liệu mảng: for, for giá trị

● Duyệt và xử lý từng phần tử của mảng:


for (int i = 0; i < TênMảng.length; i++)
{
// Xử lý trên phần tử TênMảng[i]
}

▪Ví dụ: duyệt và xuất mảng


int[] M = {1,2,3,4,5};
for (int i = 0; i < M.length; i++)
System.out.println(M[i]);
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Cách xuất dữ liệu mảng: for, for giá trị

● Duyệt và xử lý từng phần tử của mảng:


for (int i: TênMảng)
{
// Xử lý trên phần tử i
}

▪Ví dụ: duyệt và xuất mảng


int[] M = {1,2,3,4,5};
for (int i: M)
System.out.println(i);
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW

Bài Học

Tìm kiếm trên mảng


WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Nội dung bài học

❖ Tìm 1 phầ n tử có tồ n tạ i hay khô ng


❖ Tìm cá c vị trí củ a phầ n tử trong mả ng
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Nội dung bài học

❖ Tìm 1 phầ n tử có tồ n tạ i hay khô ng


❖ 🡺tương tự như duyệt mả ng, trong quá trình duyệt ta
so sá nh, nếu tìm thấy thì dừ ng
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Nội dung bài học

❖ Tìm cá c vị trí củ a phầ n tử trong mả ng


❖ 🡺tương tự như duyệt mả ng, trong quá trình duyệt ta
so sá nh, nếu tìm thấy thì lưu vết lạ i cá c vị trí rồ i tiến
hà nh tìm tiếp
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW

Bài Học

Các hạn chế của mảng


WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Nội dung bài học

• Mả ng có kích cỡ và số chiều cố định nên khó khă n


trong việc mở rộ ng ứ ng dụ ng.
• Cá c phầ n tử đượ c đặ t và tham chiếu mộ t cá ch liên
tiếp nhau trong bộ nhớ nên khó khă n cho việc xó a
mộ t phầ n tử ra khỏ i mả ng.
• Giả i thích trườ ng hợ p xó a, chèn giữ a, thêm vượ t
quá kích thướ c mả ng
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW

Bài Học

Thư viện xử lý ngày tháng


WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Nội dung bài học

❖ Calendar
❖ SimpleDateFormat
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Calendar
✔ Lấy ngày thá ng nă m hiện tạ i:
Calendar cal=Calendar.getInstance();
✔ Lấy từ ng tiêu chí
cal.get(Calendar.YEAR);
cal.get(Calendar.MONTH);
cal.get(Calendar.DAY_OF_MONTH);
✔ Thay đổi tiêu chí:
cal.set(Calendar.YEAR, 1990);
✔ Lấy ngày thá ng nă m:
Date t=cal.getTime();
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
SimpleDateFormat

❖SimpleDateFormat : Dù ng để định dạ ng
cá ch hiển thị ngày thá ng, chuyển chuỗ i
qua ngày thá ng
SimpleDateFormat sdf= new
SimpleDateFormat ("dd/MM/yyyy");
Calendar cal=Calendar.getInstance();

Date t=cal.getTime();

SimpleDateFormat sdf=new
SimpleDateFormat("dd/MM/yyyy");
System.out.println(sdf.format(t));
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW

Bài Học

Thư viện toán học


WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Nội dung bài học
Tên phương thứ c Mô tả
PI Trả về giá trị PI
abs(a) Trả về trị tuyệt đố i củ a a
max(a,b) Trả về giá trị lớ n nhấ t giữ a a và b
min(a,b) Trả về giá trị nhỏ nhấ t giữ a a và b
sqrt(a) Trả về că n bậ c 2 củ a a
pow(x,y) Tính lũ y thừ a xy
sin(radian) Tính sin, radian=Math.PI*gó c/180
cos(radian) Tính cos
tan(radian) Tính tan
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW

Bài Học

Thư viện xử lý số ngẫu nhiên


WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Nội dung bài học

❖ Random: số nguyên
❖ Random rd=new Random();
❖int x=rd.nextInt(n);
❖Trả về số ngẫu nhiên từ [0…n-1]
❖Ví dụ:
❖[0….100]🡺rd.nextInt(101)
❖[-100 …100]🡺-100+rd.nextInt(201)
❖[-100 … -50]🡺-100+rd.nextInt(51)
❖[a…b]🡺tự làm nha….
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Nội dung bài học

❖ Random: số nguyên thự c [0…1)


❖ Random rd=new Random();
❖double x=rd.nextDouble()*10;

❖[0…1)
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Nội dung bài học

❖ Ví dụ viết Game đoá n số


Máy tính sẽ ra 1 số ngẫ u nhiên [0..100], yêu cầ u ngườ i
chơi đoá n số này, cho phép đoá n sai 7 lầ n (quá 7 lầ n thì
Game Over nha thím). Nếu đoá n sai thì phả i cho ngườ i
chơi biết là số Ngườ i chơi đoá n nhỏ hơn hay lớ n hơn số
củ a máy.
🡺sau khi kết thú c game (WIN or LOST)🡺hỏ i xem Ngườ i
chơi có muố n chơi nữ a khô ng.
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW

Bài Học

Thư viện xử lý chuỗi


WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Nội dung bài học

❖ StringBuilder
❖ StringTokenizer
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
StringBuilder

❖ Lớ p StringBuilder
Quả n lý mộ t chuỗ i có thể thay đổ i kích thướ c và nộ i dung

// Phương thức
// Khởi tạo
append()
StringBuilder()
insert()
StringBuilder(int capacity)
delete()
StringBuilder(String s)
reverse()
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
StringBuilder

❑ Lớp StringBuilder
● Cá c hà m khở i tạ o củ a lớ p
▪StringBuilder(): Mặ c định tạ o ra mộ t đố i tượ ng
StringBuilder có thể lưu giữ đượ c 16 ký tự
▪StringBuilder(int capacity): Tạ o ra mộ t đố i tượ ng
StringBuilder có thể lưu giữ đượ c capacity ký tự
▪StringBuilder(String s): Tạ o mộ t đố i tượ ng
StringBuilder lấy thô ng tin từ chuỗ i s
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
StringBuilder

❑ Lớp StringBuilder
● Ví dụ :
StringBuilder sb = new StringBuilder();
sb.append(“Wellcome to ");
sb.append(“Java ”);
sb.append(“world”);
System.out.println(sb);
// Wellcome to Java world
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
StringTokenizer
● Các hàm khởi tạo của lớp
▪ StringTokenizer(String str): Xây dự ng mộ t chuỗ i tokenizer
cho mộ t chuỗ i cụ thể str. Sử dụ ng cá c delim mặ c định là : “\t\n\
r\f"
▪StringTokenizer(String str, String delim): Xây dự ng mộ t
chuỗ i tokenizer cho mộ t chuỗ i cụ thể str. Cá c ký tự trong delim
là ký tự để phâ n tá ch cá ch token.
▪StringTokenizer(String str, String delim,boolean
returnDelims): Xây dự ng mộ t chuỗ i tokenizer cho mộ t chuỗ i
cụ thể str. Nếu returnDelims = true thì mỗ i delim đượ c trả về là
mộ t chuỗ i có chiều dà i =1, ngượ c lạ i thì delim sẽ đượ c bỏ qua
và xem như là mộ t dấ u phâ n cá ch giữ a cá c token
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
StringTokenizer

● Ví dụ
String s = “Lập trình Java”;
StringTokenizer st = new StringTokenizer(s);
while (st.hasMoreTokens())
System.out.println(sr.nextToken());

s = “Lập;trình;Java”;
st = new StringTokenizer(s,”;”);
while (st.hasMoreTokens())
System.out.println(sr.nextToken());
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
StringTokenizer
● countTokens(): Tính số lượng token trong chuỗi còn lại khi sử
dụng delim mặc định
● hasMoreTokens(): Kiểm tra xem có còn token trong chuỗi các
token hay không. (*)
● nextToken(): Trả về token tiếp theo trong chuỗi các token (**)
● hasMoreElements(): Tương tự như (*), tuy nhiên nó ở trong
Enumeration<Object>
● nextElement(): Tương tự như (**), tuy nhiên giá trị trả về là
Object
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW

Bài Học

Giới thiệu chuỗi trong Java


WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Nội dung bài học

❖ Cá ch khai bá o và sử dụ ng chuỗ i
❖ Cá ch thứ c quả n lý chuỗ i trong Java
❖ Kiểm tra chiều dà i chuỗ i
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Cách khai báo và sử dụng chuỗi

❑Khai báo chuỗi


● String: là chuỗi các ký tự
● Trong Java, String là lớp quản lý dữ liệu văn
bản
● Khai báo:
String s1 = new String();
String s = "OBAMA";
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Cách thức quản lý chuỗi trong Java

String s = "OBAMA";

O B A M A

s
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Kiểm tra chiều dài chuỗi

❖ Kiểm tra chiều dà i chuỗ i


String s = "OBAMA";

int len = s.length(); // 5


WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW

Bài Học

Hàm tìm chuỗi


WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Nội dung bài học

❖ indexOf
❖ lastIndexOf
❖ contains
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
indexOf

❖ Trả về vị trí đầ u tiên tìm thấy, khô ng tìm thấy trả về -1


String s = "Hello everybody !";
int i = 0;
// Trả về i = 1
i = s.indexOf("e");
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
lastIndexOf

❖ lastIndexOf trả về vị trí cuố i cù ng tìm thấy


String s = "Hello everybody !";
int i = 0;
// Trả về i = 8
i = s.lastIndexOf("e");
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
contains

❖ Contains Kiểm tra chuỗ i con có nằ m trong chuỗ i s?


String s = "Hello everybody !";
if(s.contains(“body”))
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW

Bài Học

Hàm trích lọc chuỗi


WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Nội dung bài học

❖ subString
String s="Xin chào Obama! Tui là Putin";
String s2=s.substring(9);
System.out.println(s2);
🡺Obama! Tui là Putin
🡺subString có 1 đối số:
lọc bên phải chuỗi
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Nội dung bài học

❖ subString
String s="Xin chào Obama! Tui là Putin";
String s3=s.substring(9, 14);
System.out.println(s3);
🡺Obama
🡺subString có 2 đối số:
lọc giữa chuỗi
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW

Bài Học

Hàm đổi chuỗi


WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Nội dung bài học

❖ replace, replaceFirst
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
replace

❖ replace
String s="Xin chào Obama! Tui là Putin";
s= s.replace("Obama", "Kim Jong Un");
System.out.println(s);

🡺Xin chào Kim Jong Un! Tui là Putin


WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
replaceFirst

❖ replaceFirst
String s="Obama Xin chào Michelle Obama";
s= s.replaceFirst("Obama", "Putin");
System.out.println(s);
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW

Bài Học

Hàm xóa khoảng trắng


dư thừa
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Nội dung bài học

❖ trim
Trá nh ngườ i dù ng phá bằ ng cá ch nhậ p bừ a cá c khoả ng trắ ng
dư thừ a 2 bên
❖ Cá ch xó a khoả ng trắ ng bê n trá i chuỗ i
❖ Cá ch xó a khoả ng trắ ng bê n phả i chuỗ i
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW

Bài Học

Hàm so sánh chuỗi


WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Nội dung bài học

❖ compareTo, compareToIgnoreCase
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
compareTo

❖ So sá nh có phâ n biệt HOA – thườ ng.


String s1="Hạnh phúc";
String s2="Giải thoát";
int x=s1.compareTo(s2);

✔ Bằ ng 0 khi s1=s2
✔ >0 khi s1>s2
✔ <0 khi s1<s2
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
compareToIgnoreCase

❖ So sá nh khô ng phâ n biệt HOA – thườ ng.


String s1="Hạnh phúc";
String s2="Hạnh PHÚC";
int x=s1.compareToIgnoreCase(s2);

✔ Bằ ng 0 khi s1=s2
✔ >0 khi s1>s2
✔ <0 khi s1<s2
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW

Bài Học

Cách nối và chèn chuỗi


WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Nội dung bài học

❖ Cá ch Nố i chuỗ i bằ ng dấ u +
❖ Cá ch nố i chuỗ i bằ ng StringBuilder
❖ Cá ch chèn chuỗ i
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Cách Nối chuỗi bằng dấu +

String s="Obama";
s=s+" Putin";
System.out.println(s);
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Cách nối chuỗi bằng StringBuilder

StringBuilder builder=new StringBuilder();


builder.append("Obama");
builder.append("\t");
builder.append("Putin");
builder.append("\t");
builder.append("Kim Jong Un");
System.out.println(builder.toString());
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Cách chèn chuỗi
StringBuilder builder=new StringBuilder("Obama Putin");
builder.insert(6, "Kim Jong Un ");
System.out.println(builder.toString());
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW

Bài Học

Cách tách chuỗi


WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Nội dung bài học

❖ Cá ch tá ch chuỗ i vớ i split
❖ Cá ch tá ch chuỗ i vớ i Stringtokenizer
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Cách tách chuỗi với split

❖ Cá c version JDK>=1.4 thì có hỗ trợ split để tá ch chuỗ i


String s="Obama;Putin;Kim Jong Un";
String []arr=s.split(";");
for(String name: arr)
System.out.println(name);

Obama
Putin
Kim Jong Un
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Cách tách chuỗi với Stringtokenizer

❖ Cá c version JDK <1.4 thì sử dụ ng Stringtokenizer (đã


họ c trong bà i cá c thư viện thườ ng dù ng)
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW

Bài Học

Hàm đổi chữ Hoa - thường


WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Nội dung bài học

❖ toUpper
❖ toLower
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
toUpper

String s="obama".toUpperCase();
System.out.println(s);
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
toLower

String s="PUTIN".toLowerCase();
System.out.println(s);
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW

Bài Học

Lý do sử dụng collection
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Nội dung bài học

❖ Collection là gì?
❖ Cá ch khắ c phụ c hạ n chế củ a Mả ng
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Collection là gì?

❖ Collection bả n chấ t là tậ p cá c lớ p dù ng để lưu trữ


danh sá ch và có khả nă ng tự co giã n khi danh sá ch
thay đổ i: Thêm , sử a, xó a, chèn…
❖ Hai lớ p Collection thườ ng đượ c sử dụ ng nhiều
nhấ t là ArrayList và HashMap
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Cách khắc phục hạn chế của Mảng
Để giả i quyế t hạ n chế củ a mả ng ta dù ng collection.
Nhữ ng hạ n chế gì???
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW

Bài Học

Cách sử dụng ArrayList


WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Cách sử dụng ArrayList

❑Giới thiệu về ArrayList


● ArrayList sử dụng cấu trúc mảng để lưu trữ
phần tử, tuy nhiên có hai đặc điểm khác
mảng:
▪Không cần khai báo trước kiểu phần tử.
▪Không cần xác định trước số lượng phần tử (kích
thước mảng).
▪Nó có khả năng truy cập phần tử ngẫu nhiên (Do
thừa kế từ interface RandomAccess).
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW

ArrayList lưu giữ các phần tử là đối tượng, nên


các kiểu nguyên thủy int, double,
float ... không dùng được. Thay vào đó hãy
dùng các lớp tương ứng như Integer, Double,
Float ...
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Cách sử dụng ArrayList
❑Một số phương thức ArrayList

❑ add(Object o) thêm phần tử vào cuối


❑ add(int index, Object element) chèn phần tử vào vị trí
index
❑ remove(int index) xóa phần tử có chỉ số index
❑ clear() xóa mọi phần tử
❑ contains(Object o) kiểm tra mảng có chứa phần tử
❑ get(int index) lấy phần tủ có chỉ số index
❑ indexOf(Object o) lấy chỉ số trong mảng của phần tử
❑ size() lấy số phần tử
❑ toArray() chuyển thành mảng
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Cách sử dụng ArrayList
ArrayList<String>ds=new ArrayList<String>();
ds.add("Hạnh");
ds.add("Phúc");
ds.add("Giải");
ds.add("Thoát");
ds.add("Vô");
ds.add("Thường");
for(String s : ds)
{
System.out.println(s);
} for(int i=0;i<ds.size();i++)
{
String s=ds.get(i);
}
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
LinkedList: Danh sách có kết nối ( Linked List) là một trong các cách
quản lý danh sách dữ liệu khắc phục được các nhược điểm của mảng.

Lớp LinkedList trong java sử dụng cấu trúc danh sách liên kết Doubly
Linked List để lưu trữ các phần tử.
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW

LinkedList có cú pháp, khai báo rất giống với ArrayList,


bạn dễ dàng đổi từ ArrayList sang LinkedList bằng cách
thay kiểu đối tượng.
Điều khác biết giữa LinkedList và ArrayList là cách chúng
lưu trữ dữ liệu. ArrayList tốt để lưu trữ và truy cập dữ
liệu, nó gần giống với mảng thông thường. LinkedList thì
tốt để tương quản lý dữ liệu, như chèn và xóa một lượng
lớn phần tử.
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW

Những điểm cần ghi nhớ về lớp LinkedList:


•Có thể chứa các phần tử trùng lặp.
•Duy trì thứ tự của phần tử được thêm vào.
•Không đồng bộ (non-synchronized).
•Thao tác thêm/ xóa (add/ remove) phần tử nhanh vì không cần
phải dịch chuyển nếu bất kỳ phần tử nào thêm/ xoá khỏi danh sách.
•LinkedList có thể được sử dụng như danh sách (list), stack (ngăn
xếp) hoặc queue (hàng đợi).
•Các phần tử trong LinkedList có thể nằm cách ly nhau (không liên
tục) trong bộ nhớ. Nó là một liên kết có tính hai chiều giữa các
phần tử. Mỗi phần tử trong danh sách cầm giữ một tham chiếu đến
đối phần tử đằng trước nó và tham chiếu đến phần tử ngay sau nó.
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
class Student { public static void main(String[]
private int id; args) {
private String name; // Create list
public Student(int id, String List<Student> students =
name) { new LinkedList<>();
this.id = id; for (int i = 1; i <=
this.name = name; NUM_OF_ELEMENT; i++) {
} // Add element to list
@Override Student student = new
public String toString() { Student(i, "myname" + i);
return "Student [id=" + id + students.add(student);
", name=" + name + "]"; }
} // Show list student
} for (Student student :
public class LinkedListExample { students) {
public static final int system.out.println(student);
NUM_OF_ELEMENT = 5; }
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW

Các hàm Collections


Để làm việc với các dữ liệu tập hợp khác nhau, API JAVA cung
cấp lớp Collections trong package java.util.
- Collection có nhiều phương thức tĩnh (gọi mà không cần tạo
ra đối tượng Collections) tiện dụng như:

sort(Collection c) sắp xếp danh sách

max(Collection c) lấy giá trị lớn nhất trong c

reverse(List list) đảo ngược thứ tự

shuffle(List list) sắp xếp danh sách ngẫu nhiên


WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
import java.util.Collections;
import java.util.ArrayList;;;

public class MyClass {


public static void main(String[ ] args) {
ArrayList<String> animals = new ArrayList<String>();
animals.add("tiger");
animals.add("cat");
animals.add("snake");
animals.add("dog");

Collections.sort(animals);

System.out.println(animals);
}
}
/* Outputs:
[cat, dog, snake, tiger]
*/
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW

Bài Học

Cách sử dụng HashMap


WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
HashMap

❑Giới thiệu về HashMap


● Là kiểu tập hợp từ điển, HashMap cho phép
truy xuất trực tiếp tới một đối tượng bằng
khoá duy nhất của nó. Cả hai khoá và đối
tượng có thể thuộc bất cứ kiểu nào.
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
HashMap

❑phương thức khởi tạo


● HashMap()
● HashMap(Collection c)
● HashMap(int capacity)
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
HashMap

❑Các phương thức chính


● put(Object key, Object value)
● get(Object key)
● remove(Object key)
● containsKey(Object key)
● containsValue(Object value)
● size()
● isEmpty
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
HashMap
HashMap<Integer, String>map=
new HashMap<Integer, String>();
map.put(1, "Trần huy hanh");
map.put(2, "Nguyễn Văn Hùng");
map.put(3, "Đỗ Công Thành");
map.put(4, "Nguyễn Cẩm Hương");
map.put(5, "Phạm Thị Xuân Diệu");

String ten=map.get(1);
if(map.containsKey(6)==false)
map.put(6, "Obama");
Collection<String>dsTen= map.values();
for(String x : dsTen)
System.out.println(x);
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
LinkedList (Danh sách liên kết) là một lớp triển khai của List
Interface trong Collections Framework nên nó sẽ có một vài đặc
điểm và phương thức tương đồng với List. Như đã nói trong bài
Tổng quan về Collection trong Java, LinkedList là 1 cấu trúc dữ
liệu lưu trữ các phần tử dưới dạng danh sách, các phần tử
trong LinkedList được sắp xếp có thứ tự và có thể có giá trị
giống nhau.
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW

public static void main(String[] args) {


// khai báo 1 danh sách liên kết có tên là linkedList
// có kiểu là Integer
LinkedList<Integer> linkedList = new LinkedList<>();
}
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
public static void main(String[] args) {
// khai báo 1 danh sách liên kết đơn có tên là linkedList
// có kiểu là Integer
LinkedList<Integer> linkedList = new LinkedList<>();

// thêm các phần tử sử dụng phương thức add()


linkedList.add(1);
linkedList.add(0);
linkedList.add(3);
linkedList.add(9);

// sử dụng vòng lặp for


// duyệt theo kích thước của linkedList
// sử dụng phương thức linkedList.size()
// và sau đó lấy phần tử tại vị trí thứ i thông qua hàm get()
// sau đó hiển thị giá trị phần tử đó ra
System.out.println("Các phần tử có trong linkedList là: ");
for (int i = 0; i < linkedList.size(); i++) {
System.out.print(linkedList.get(i) + "\t");
}
}
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW

Bài Học

Các khái niệm về


Hướng đối tượng
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Nội dung bài học

❖ So sá nh lậ p trình truyền thố ng và hướ ng đố i tượ ng


❖ Cá c khá i niệm về lớ p và đố i tượ ng:
- Đố i tượ ng
- Lớ p
- Package
- Tính trừ u tượ ng
- Tính đó ng gó i
- Tính kế thừ a
- Tính đa hình
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Lập trình truyền thống

❑ Phương pháp tiếp cận của lập trình truyền thống


✔ Lậ p trình tuyến tính.
✔ Lậ p trình cấ u trú c
❑ Ưu điểm
✔ Chương trình rõ rà ng, dễ hiểu, dễ theo dõ i.
✔ Tư duy giả i thuậ t rõ rà ng.
❑ Khuyết điểm
✔ Khô ng hỗ trợ việc sử dụ ng lạ i mã nguồ n.
✔ Khi thay đổ i cấ u trú c dữ liệu, phả i thay đổ i giả i thuậ t.
✔ Phả i giả i quyết cá c mố i quan hệ vĩ mô giữ a cá c module phầ n
mề m trong cá c dự á n lớ n.
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Lập trình hướng đối tượng
❑ Đặc điểm cơ bản
✔ Tậ p trung và o dữ liệu thay cho cá c hà m.
✔ Chương trình đượ c chia thà nh cá c đố i tượ ng độ c lậ p.
✔ Cấ u trú c dữ liệu đượ c thiết kế sao cho đặ c tả đượ c cá c đố i tượ ng.
✔ Dữ liệu đượ c che giấ u, bao bọ c.
✔ Cá c đố i tượ ng trao đổ i vớ i nhau thô ng qua cá c hà m.
✔ Chương trình đượ c thiết kế theo hướ ng tiếp cậ n từ dướ i lên:
🡺Là cá ch lậ p trình tậ p trung và o xung quanh đố i tượ ng, khi đó dữ liệu đượ c
ngườ i dù ng quan tâ m là chính, dữ liệu luô n luô n đượ c quả n lý mà khô ng tự do
hoạ t độ ng trong chương trình. 1 chương trình khi đó đượ c phâ n tích thà nh cá c
đố i tượ ng nhỏ hơn để dễ quả n lý.
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Lập trình hướng đối tượng

❑ Một số ưu điểm nổi bật


✔ Khô ng có nguy cơ dữ liệu bị thay đổ i tự do trong chương trình.
✔ Khi thay đổ i cấ u trú c dữ liệ u củ a mộ t đố i tượ ng, khô ng cầ n
thay đổ i mã nguồ n củ a cá c đố i tượ ng khá c.
✔ Có thể sử dụ ng lạ i mã nguồ n, tiết kiệm tà i nguyên.
✔ Phù hợ p vớ i cá c dự á n phầ n mềm lớ n, phứ c tạ p.
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Khái niệm Lớp và Đối tượng

❖ Khá i niệm đối tượng (object) trong lậ p trình


hướ ng đố i tượ ng giố ng như mộ t đố i tượ ng cụ thể
trong thế giớ i thự c.
❖ Mỗ i đố i tượ ng có cá c thuộ c tính và cá c hà nh vi
riêng.
▪ Thuộc tính (attribute) mô tả đặ c điểm củ a đố i
tượ ng.
▪ Hà nh vi là phương thứ c hoạ t độ ng củ a đố i
tượ ng, gọ i tắ t là phương thức (method).
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Khái niệm Lớp và Đối tượng

❖ Ví dụ : Phâ n số
❖ Đặ c điểm
▪ Tử số
▪ Mẫ u số
❖ Thao tá c
▪ Cộ ng, trừ , nhâ n, chia
▪ Tố i giả n
▪ Nghịch đả o
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Khái niệm Lớp và Đối tượng

❖ Ví dụ : xe hơi
▪ Mà u trắ ng
▪ 4 cử a
▪ 4 bá nh
▪ Hiệu Toyota
▪ Chạy tớ i
▪ Chạy lui
▪ Xe dừ ng
▪…
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Khái niệm Lớp và Đối tượng

❖ Đố i tượ ng:
❖ XeHoi ❖ Tên đố i tượ ng
❖ Hiệu xe
❖ Mà u xe ❖ Thuộ c tính
❖ Số bá nh xe
❖ Số cử a
❖ Chạy tớ i
❖ Chạy lui ❖ Phương thứ c
❖ Dừ ng xe
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Khái niệm Lớp và Đối tượng
❖ Cá c đố i tượ ng có cá c đặ c điểm (thuộ c tính và
phương thứ c) giố ng nhau đượ c gom nhó m thà nh
mộ t lớ p để phâ n biệt vớ i cá c đố i tượ ng khá c và dễ
quả n lý.
⇒ Mộ t lớp (class) là sự phâ n loạ i củ a cá c đố i tượ ng
hay là kiểu (type) củ a đố i tượ ng.
❖ Ví dụ :
− Cá c chiếc xe Toyota, Honda, Porsche thuộ c lớ p
xe hơi.
● Cá c con chó giữ nhà , chó să n, chó kiểng thuộ c
lớ p chó .
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Khái niệm Lớp và Đối tượng
❖ Như vậy Lớp là mộ t khá i niệm trừ u tượ ng, dù ng
để chỉ mộ t tậ p hợ p cá c đố i tượ ng có mặ t trong hệ
thố ng.
❖ Lớp có thuộ c tính (property) và phương thứ c
(method):
▪ Thuộ c tính củ a lớ p tương ứ ng vớ i thuộ c tính củ a đố i
tượ ng.
▪ Phương thứ c củ a lớ p tương ứ ng vớ i cá c hà nh độ ng củ a
đố i tượ ng.
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Phân biệt
Class & Object
Class chỉ một cái gì đó chung chung, object là một cái cụ thể

• Công thức làm bánh quy là một Class 🡪 bánh quy là một
Object
• Con gái là một Class 🡪 Hồng là một Object
• Con mèo là một Class 🡪 Con mèo Mimi nhà tôi là một
Object
• Bản vẽ là một Class 🡪 Ngôi nhà của tôi là một Object
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Khái niệm Lớp và Đối tượng
❖ Mộ t Lớp có thể có mộ t trong cá c khả nă ng sau:
▪ Hoặ c chỉ có thuộ c tính, khô ng có phương thứ c.
▪ Hoặ c chỉ có phương thứ c, khô ng có thuộ c tính.
▪ Hoặ c có cả thuộ c tính và phương thứ c, trườ ng hợ p này
là phổ biến nhấ t.
⮚ Lớ p khô ng có thuộ c tính và phương thứ c nà o là cá c
lớ p trừ u tượ ng. Cá c lớ p này khô ng có đố i tượ ng
tương ứ ng.
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Khái niệm Lớp và Đối tượng
❖ Gó i (package)
▪ Mộ t nhó m cá c lớ p (classes) và giao diệ n (interfaces)
đượ c tổ chứ c thà nh mộ t đơn vị quả n lý theo hình thứ c
khô ng gian tê n gọ i là package.
▪ Lợ i ích củ a package là tổ chứ c sắ p xếp lạ i hệ thố ng thô ng
tin cá c lớ p trong dự á n mộ t cá ch khoa họ c, giú p cho việ c
theo dõ i bả o trì dự á n đượ c tố t nhấ t.
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Khái niệm Lớp và Đối tượng
❖ LẬ P TRÌNH HƯỚ NG ĐỐ I TƯỢ NG CÓ 4 ĐẶ C
TRƯNG:
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Khái niệm Lớp và Đối tượng
❖ Tính trừ u tượ ng: (Abstraction)
▪ Tính trừu tượng trong Java là tính chất không thể hiện cụ
thể mà chỉ nêu tên vấn đề. Đó là một quá trình che giấu
các hoạt động bên trong và chỉ hiển thị những tính năng
thiết yếu của đối tượng tới người dùng.
▪ Ví dụ: một người sử dụng điện thoại để gửi tin nhắn thì
anh ta sẽ nhập nội dung tin nhắn, thông tin người nhận và
ấn nút gửi. Khi anh ta bắt đầu gửi tin thì anh ấy không biết
những gì diễn ra bên trong quá trình gửi mà chỉ biết được
là kết quả của tin nhắn đã được gửi đến người nhận thành
công hay chưa
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW

Ưu điểm khi sử dụng tính trừu tượng để lập trình:


•Tính trừu tượng cho phép các lập trình viên loại bỏ
tính chất phức tạp của đối tượng bằng cách chỉ đưa ra
các thuộc tính và phương thức cần thiết của đối tượng
trong lập trình, cải thiện khả năng bảo trì của hệ thống.
•Tính trừu tượng giúp chúng ta tập trung vào những
cốt lõi cần thiết của đối tượng thay vì quan tâm đến
cách nó thực hiện.
•Tính trừu tượng cung cấp nhiều tính năng mở rộng
khi sử dụng kết hợp với tính đa hình và kế thừa
trong lập trình hướng đối tượng.
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Khái niệm Lớp và Đối tượng
❖ Tính trừ u tượ ng:
❖ Tính trừu tượng giúp chúng ta giảm sự phức tạp. Có hai cách
thực hiện tính trừu tượng như bên dưới:
❖ Lớp trừu tượng (Abstract Class)
❖ Giao diện (Interface)
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Khái niệm Lớp và Đối tượng

❖ Tính đó ng gó i:

▪ Đóng gói là sự che giấu bên trong dữ liệu riêng của mỗi đối
tượng của lớp được khai báo và chỉ được truy xuất thông qua
hệ thống các phương thức có sẵn của lớp
▪ Tấ t cả mọ i thao tá c truy xuấ t và o thà nh phầ n dữ liệu từ đố i
tượ ng này qua đố i tượ ng khá c phả i đượ c thự c hiện bở i cá c
phương thứ c (method) củ a chính đố i tượ ng chứ a dữ liệu.
▪.
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Tính đóng gói có những đặc điểm như sau:

•Tạo ra cơ chế để ngăn ngừa việc gọi phương thức của lớp này
tác động hay truy xuất dữ liệu của đối tượng thuộc về lớp khác.
•Dữ liệu riêng (khi được khai báo là private) của mỗi đối tượng
được bảo vệ khỏi sự truy xuất không hợp lệ từ bên ngoài.
•Người lập trình có thể dựa vào cơ chế này để ngăn ngừa việc
gán giá trị không hợp lệ vào thành phần dữ liệu của mỗi đối
tượng.
•Cho phép thay đổi cấu trúc bên trong của một lớp mà không làm
ảnh hưởng đến những lớp bên ngoài có sử dụng lớp đó.
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW

Để cài đặt tính đóng gói, chúng ta có 2


bước như sau:
•Khai báo các thuộc tính của đối tượng
trong lớp là private để các lớp khác không
thể truy cập trực tiếp/sửa đổi được.
•Cung cấp các phương thức getter/setter có
phạm vi truy cập là public
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Khái niệm Lớp và Đối tượng
❖ Tính kế thừ a:

▪ Cho phép xây dự ng mộ t lớ p mớ i dự a trên cá c


định nghĩa củ a mộ t lớ p đã có .
▪ Lớ p đã có gọ i là lớ p Cha, lớ p mớ i phá t sinh gọ i
là lớ p Con
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Khái niệm Lớp và Đối tượng
❖ Tính kế thừ a:

▪ Lớ p con kế thừ a tấ t cả cá c thà nh phầ n củ a lớ p


Cha, có thể mở rộ ng cá c thà nh phầ n kế thừ a và
bổ sung thêm cá c thà nh phầ n mớ i.
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Khái niệm Lớp và Đối tượng
❖ Tính kế thừ a:
❖Ví dụ :
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Khái niệm Lớp và Đối tượng

❖Tính đa hình (polymorphism): Đa hình có nghĩa là


nhiều hình thức, trong đó ‘poly’ có nghĩa là
nhiều, còn ‘morph’ có nghĩa là hình thức
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Ví dụ: Khi bạn ở trong trường học là sinh viên thì bạn có nhiệm vụ học,
nghe giảng,..., nhưng khi bạn ở nhà thì bạn lại đóng vai trò là thành viên
trong gia đình và bạn có nhiệm vụ phải làm việc nhà, rồi khi bạn vào siêu
thị thì bạn đóng vai trò là khách hàng đi mua hàng. Vì vậy, chúng ta có thể
hiểu đa hình của đối tượng là trong từng trường hợp, hoàn cảnh khác nhau
thì đối tượng có khả năng thực hiện các công việc khác nhau.

Để thể hiện tính đa hình, chúng ta cần đảm bảo 2 điều kiện
sau:
•Các lớp phải có quan hệ kế thừa với 1 lớp cha nào đó.
•Phương thức đa hình phải được ghi đè (override) ở lớp con.
Tính đa hình chỉ được thể hiện ghi đã ghi đè lên phương
thức của lớp cha.
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW

Bài Học

Overriding Method
Overloading method
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Overload và Override là gì?
Overload (nạp chồng) là hai phương thức cùng tên nhưng số
lượng tham số trong các phương thức khác nhau hoặc các loại dữ
liệu của tham số khác nhau và nằm trong một class.
Override (ghì đè) là hai phương thức có cùng tên, cùng kiểu
dữ liệu trả về, cùng phạm vi truy cập (Access Modifie) nằm
ở hai class khác nhau.
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Overriding Method

❖ Trong mộ t tậ p cá c lớ p có mố i quan hệ huyết thố ng


có cá c phương thứ c giố ng signature y xì (nộ i dung
phương thứ c khá c nhau)
❖ Overriding methods giú p lậ p trình viên có thể định
nghĩa cá ch hà nh xử khá c nhau ứ ng vớ i cá c đố i
tượ ng khá c nhau nhưng cù ng sử dụ ng mộ t tên
phương thứ c.
❖ Ví dụ : Nhâ n viên chính thứ c và Nhâ n viên thờ i vụ
đều có phương thứ c là Tính Lương, tuy nhiên cá ch
thứ c tính lương củ a 2 đố i tượ ng này sẽ khá c nhau.
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Overriding Method

❖ Ví dụ mô hình lớ p NhanVien có phương thứ c tính


lương.
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW

Bài Học

Overloading method
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Nội dung bài học

❖ Khá i niệm về Overloading Method


❖ Lợ i ích củ a Overloading Method
❖ Cá ch cà i đặ t Overloading Method
❖ Cá ch sử dụ ng Overloading Method
❖ Parameter list
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Overloading Method

✔ Là đặ c điểm trong cù ng 1 lớ p có nhiều phương


thứ c cù ng tên nhưng khá c nhau về Signature.
✔ Signature bao gồ m: Số lượ ng cá c đố i số hoặ c kiểu
dữ liệu cá c đố i số hoặ c thứ tự cá c đố i số .
✔ Kiểu dữ liệu trả về khô ng đượ c tính và o signature
✔ Lợ i ích củ a Overloading là khả nă ng tá i sử dụ ng lạ i
phương thứ c và giú p việc gọ i hà m “uyển chuyển”.
✔ Cá c Constructor là trườ ng hợ p đặ c biệt củ a
Overloading Method
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Overloading Method

float tryMe(int x)
{ Invocatio
return x + .375; n
} result = tryMe(25, 4.32)

float tryMe(int x, float y)


{
return x*y;
}
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Overloading Method

✔ Ví dụ Tá i sử dụ ng Constructor:
public class SinhVien {
private String hoTen;
private double diem;
public SinhVien(String hoTen)
{
this.hoTen=hoTen;
}
public SinhVien(String hoTen,double diem)
{
this(hoTen);
this.diem=diem;
}
}
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Parameter list

❖ Java cung cấ p mộ t loạ i phương thứ c đặ c biệt đó là


Parameter List, cũ ng là mộ t trườ ng hợ p đặ c biệt
củ a Overloading Method.
public int Sum(int …arr)
{
int s = 0;
for(int x in arr)
Sum(1, 2, 4)
{
Sum()
s += x; Sum(1, 5, -8,2)
}
return s;
}
❖ Ta có thể truyền bao nhiêu đố i số kiểu int và o cho
phương thứ c Sum cũ ng đượ c.
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW

Bài Học

Các Quy tắc khai báo lớp


WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Nội dung bài học

❖ Quy tắ c đặ t tên Lớ p trong java


❖ Quy tắ c đặ t tên Constructor
❖ Quy tắ c đặ t tên thuộ c tính trong java, cá ch tạ o
getter/setter
❖ Quy tắ c đặ t tên phương thứ c
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Quy tắc đặt tên Lớp trong java
❖ Qui tắc đặt tên lớp:
✔ Tên lớ p nên là mộ t danh từ
✔ Tên lớ p có thể gồ m nhiều từ , ký tự đầ u tiên củ a mỗ i từ nên
viết hoa
✔ Tên lớ p nên đặ t đơn giả n, dễ nhớ , và có ý nghĩa
✔ Tên lớ p khô ng đượ c trù ng vớ i từ khó a củ a Java
✔ Tên lớ p khô ng thể bắ t đầ u bằ ng số , nhưng có thể bắ t đầ u
bằ ng dấ u ‘$’ và dấ u gạ ch dướ i ‘_’.
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Quy tắc đặt tên Lớp trong java
❑ Lớp (Class)
Cách khai báo lớp
[Chỉ đinh từ truy xuất] class [tên lớp] {
[thuộc tính];
[phương thức];
}
Trong đó:
▪ Chỉ định từ truy xuất:
Lớp con
Lớp (Class) Gói (Package) Ngoài
(Subclass)
public Có Có Có Có
protected Có Có Có Không
Không có (no Có Có Không Không
modifier)
private Có Không Không Không

▪ Thuộc tính: mô tả các thô ng tin liên quan về class.


▪ Phương thức: mô tả các phương thứ c xử lý có thể là m việc đượ c vớ i class.
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW

Khai báo property


public class Student
{ public String
name; public String
code; public int
birthday;
} Property
Access Data type
modifiers (phạm (kiểu dữ (tên của thuộc
tính)
vi truy xuất) liệu)
🡪 Truy cập và gán giá trị cho các thuộc
tính
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW

Tạo đối tượng của lớp


• ClassName objectName = new ClassName();
• Muốn lấy thuộc tính:
objectName.thuoctinh
• Muốn lấy phương thức:
objectName.Method
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW

Tạo và sử dụng đối tượng


Vậy làm thế nào để tạo và sử dụng một đối tượng? Ta cần
đến hai lớp:
⮚ Một lớp dành cho kiểu đối tượng mà ta muốn tạo
(BankAccount, Dog, Cow, AlarmClock,
AddressBookEntry,...)
⮚ Một lớp khác để thử nghiệm lớp đó. Lớp thử nghiệm là
chương trình, nơi ta đặt phương thức main, và tại
phương thức main đó, ta tạo và sử dụng các đối tượng
thuộc lớp vừa xây dựng. Lớp thử nghiệm chỉ có một
nhiệm vụ duy nhất: chạy thử các biến và phương thức
của lớp đối tượng mới.
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW

Tham chiếu
• Đối tượng được thao tác thông qua tham
chiếu:
• Tham chiếu là con trỏ trỏ tới đối tượng
• Thao tác trực tiếp tới thuộc tính và phương
thức
• Phép gán (=) là cùng trỏ tới 1 địa chỉ
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW

Toán tử new
• Mọi đối tượng phải được tạo bằng toán tử
new:
• Cấp phát vùng nhớ động
• Ví dụ:
• Student a;//a chưa trỏ vào đâu a->null
• a=new Student();// a được trỏ vào bộ nhớ
được sinh ra từ từ khóa new và a trỏ vào
bộ nhớ đó
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Quy tắc đặt tên Lớp trong java

public class SinhVien {


private String hoTen;
private double diem;
public void show() {
System.out.println(hoTen + “: “ + diem);
}
}
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Quy tắc đặt tên Constructor

❖ Contructor là phương thứ c đặ c biệt: Có tên trù ng y xì


vớ i tên lớ p, khô ng có kiểu trả về.
❖ Dù ng để khở i tạ o cá c giá trị cho cá c thuộ c tính khi mộ t
đố i tượ ng đượ c cấ p phá t bộ nhớ .
❖ Khi không khai báo phương thức khởi tạo, đối tượng
được tạo ra bằng phương thức khởi tạo mặc định với các
giá trị mặc định của các thuộc tính.
❖ Có 2 loạ i Constructor: Mặ c định và có đố i số .
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Quy tắc đặt tên Constructor

❖ Constructor Mặ c định: Dù ng để tự độ ng khở i tạ o cá c


giá trị cho cá c thuộ c tính thườ ng là cá c giá trị mặ c định
nà o đó do chủ ý củ a lậ p trình viên.
public class SinhVien {
private String hoTen;
private double diem;
public SinhVien()
{
hoTen=“Obama”;
diem=9.5;
}
}
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Quy tắc đặt tên Constructor

❖ Ví dụ :
SinhVien obama=new SinhVien();
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Quy tắc đặt tên Constructor

❖ Constructor có đố i số : Dù ng để khở i tạ o cá c giá trị cho


cá c thuộ c tính lú c tạ o đố i tượ ng, cá c giá trị này đượ c
truyền từ đố i số tạ o đố i tượ ng.
public class SinhVien {
private String hoTen;
private double diem;
public SinhVien(String hoTen, double diem)
{
this.hoTen=hoTen;
this.diem=diem;
}
}
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Quy tắc đặt tên Constructor

❖ Ví dụ :
SinhVien obama=new SinhVien(“Obama”, 8.5);
⮚ Phương thức hủy được gọi khi đối tượng được giải
phóng.
⮚ Tuy nhiên, trong Java công việc này được làm tự
động, lập trình viên không cần quan tâm.
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Quy tắc đặt tên thuộc tính

❖ Ký tự đầ u tiên viết thườ ng, ký tự đầ u tiên củ a cá c từ


tiếp theo viết HOA
❖ Để private nếu khô ng muố n cho kế thừ a
❖ Để protected nếu muố n cho kế thừ a
❖ Tuyệt đố i khô ng đượ c để public

public class SinhVien {


private String hoTen;
private double diem;
}
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Getter/ setter

public static void main(String[] args) {


Student studentOne = new Student();

studentOne.birthday = 1994; setter


studentOne.name = "John";
studentOne.code = "S001";
getter
System.out.println("birthday: " + studentOne.birthday);
System.out.println("name: " + studentOne.name);
System.out.println("code: +
} " studentOne.code);
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Getter/ setter

❖ Ta cầ n xây dự ng cá c getter/setter để truy suấ t giá trị


cá c thuộ c tính:
❖ Set: truyền giá trị và o cho biến
❖ Get: lấy giá trị củ a biến
public class SinhVien {
private String hoTen;
private double diem;
public void setHoTen(String hoTen)
{
this.hoTen=hoTen;
}
public String getHoTen() Tương tự cho thuộc tính diem
{
return this.hoTen;
}
}
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Quy tắc đặt tên thuộc tính

❖ Cá c đố i tượ ng ở ngoà i khô ng đượ c phép truy suấ t trự c


tiếp và o cá c thuộ c tính bên trong lớ p, chỉ đượ c phép
tương tá c thô ng qua getter / setter:

SinhVien sv=new SinhVien(“Obama”, 8.5);

Lấy tên: sv.getTen();


Đổ i tên: sv.setTen(“Putin”);
Đổ i điểm: sv.setDiem(9.5);
Lấy điểm: sv.getDiem();
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Quy tắc đặt tên phương thức

❖ Phương thứ c là cá c hà nh độ ng(nghiệp vụ ) trên từ ng


đố i tượ ng. NÓ là tậ p cá c giả i thuậ t để giả i quyết mộ t
cô ng việc cụ thể nà o đó .
❖ Phương thứ c có kiểu trả về hoặ c void, có cá c đố i số
truyền và o.
❖ Ký tự đầ u tiên viết thườ ng, ký tự đầ u tiên củ a cá c từ
tiếp theo viết HOA:
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Quy tắc đặt tên phương thức
public class SinhVien {
private String hoTen;
private double diem;
public void xuatThongTin()
{
//là m cá i gì đó .
}
}

SinhVien sv=new SinhVien(“Obama”, 8.5);


sv.xuatThongTin();
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW

Phương thứ c: ToString()

⮚ Có thể dù ng phương thứ c tostring(): để tự độ ng


xuấ t đố i tượ ng
⮚ Khi gọ i đến đố i tượ ng nó tự độ ng gọ i phương
thứ c ToString();
System.out.println(minh);
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW

Hàm main()
Đây là một hàm đặc biệt được cài đặt trong lớp được
gọi thực thi đầu tiên trong chương trình. Vì nó được
gọi khi chưa có đối tượng nào được tạo ra nên nó
luôn được khai báo là static.
Hơn nữa, việc gọi hàm main() đương nhiên là diễn ra
bên ngoài lớp nên nó cũng cần có mức độ truy cập là
public.
Hàm main() thường không trả về giá trị nào nên kiểu
giá trị trả về của nó là void.
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW

Bài Học

Các loại phương thức


WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Nội dung bài học

❖ Service method
❖ Support method
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Service method & Support Method

❖ Service Method là cá c phương thứ c public để cung cấ p


ra ngoà i cho cá c đố i tượ ng sư dụ ng
❖ Support Method là cá c phương thứ c private dù ng để
hỗ trợ cho cá c Service method. Cá c đố i tượ ng ở ngoà i
khô ng thể truy suấ t tớ i cá c Support Method
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Ví dụ:
public class TamGiac {
private double canhA;
private double canhB;
private int canhC;
public double chuVi()
{
return canhA+canhB+canhC;
}
private double nuaChuVi()
{
return chuVi()/2;
}
public double dienTich()
{
double p=nuaChuVi();
return Math.sqrt(p*(p-canhA)*(p-canhB)*(p-canhC));
}
}
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW

Bài Học

Tham chiếu this


WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Nội dung bài học

❖ Instance variable và local variable


❖ this là gì?
❖ Ứ ng dụ ng củ a this
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Instance variable và local variable

❖ Instance variable là cá c thuộ c tính, cá c biến khai bá o


ngoà i lớ p. Toà n bộ cá c hà m trong lớ p điều có thể truy
suấ t đượ c.
❖ Local variable là cá c biến đượ c khai bá o trong đố i số
củ a hà m hoặ c nộ i dung hà m. Chỉ có hà m này mớ i truy
suấ t đượ c cá c biến local variable củ a nó
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Instance variable và local variable
public class SinhVien {
private String hoTen;
private double diem;
public SinhVien(String hoTen)
{
this.hoTen=hoTen;
}
public SinhVien(String hoTen,double diem)
{
this(hoTen);
int x=6;
this.diem=diem;
}
}
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
this là gì?
❖ Biến this là biến đố i tượ ng củ a lớ p tồ n tạ i ngầ m trong mỗ i lớ P
(hay nó i cá ch khá c tham chiếu this giữ địa chỉ củ a chính đố i
tượ ng đang gọ i tớ i)
❖ Thườ ng dù ng biế n this để truy cậ p đến cá c thuộ c tính củ a lớ p bị
khai bá o trù ng trong phạ m vi cá c phương thứ c củ a lớ p.

public class SinhVien {


private String hoTen;
private double diem;
public SinhVien(String hoTen)
{
this.hoTen=hoTen;
}
public SinhVien(String hoTen,double diem)
{
this(hoTen);
this.diem=diem;
}
}
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Ứng dụng của this

❖ this thườ ng dù ng để truy suấ t trự c tiếp tớ i cá c biến


instance. Dù ng để phâ n biệt việc truy suấ t instace và
local khi 2 biến này trù ng tên
public class SinhVien {
private String hoTen;
private double diem;
public SinhVien(String hoTen)
{
this.hoTen=hoTen;
}
}
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW

Phương thứ c: ToString()

⮚ Có thể dù ng phương thứ c tostring(): để tự độ ng


xuấ t đố i tượ ng
⮚ Khi gọ i đến đố i tượ ng nó tự độ ng gọ i phương
thứ c ToString();
System.out.println(minh);
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW

Bài Học

Các thành phần static


WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Nội dung bài học

❖ static và ý nghĩa sử dụ ng
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Nội dung bài học

❖ Trong java có hỗ trợ khai bá o static cho thuộ c tính và


phương thứ c.
✔ static cho thuộ c tính: Gọ i là Class Member
✔ static cho phương thứ c: Gọ i là Class Method
❖ Muố n truy suấ t tớ i cá c static ta sẽ lấy trự c tiếp tên lớ p
chấ m thuộ c tính/ phương thứ c mà khô ng cầ n khở i tạ o
đố i tượ ng.
❖ Cá c thà nh phầ n static sẽ đượ c khở i tạ o trướ c khi đố i
tượ ng đượ c khở i tạ o. Thườ ng dù ng để chia sẻ 1 vù ng ô
nhớ , cá c đố i tượ ng sẽ sử dụ ng chung vù ng này🡺chỉ cầ n
đổ i giá trị củ a thà nh phầ n static thì toà n bộ cá c đố i
tượ ng khá c cũ ng thấy sự thay đổ i này.
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Nội dung bài học

❖ Ví dụ 1- biến static:
public class Class1 {

private static int value;


public void setValue(int x)
{
value=x;
}
public int getValue()
{
return value;
}
}
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Nội dung bài học

❖ Ví dụ 1- biến static:
public static void main(String[] args) {
Class1 c1=new Class1();
c1.setValue(9);
Class1 c2=new Class1();
System.out.println(c2.getValue());
c2.setValue(100);
System.out.println(c1.getValue());
}
Kết quả:
9
100
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Nội dung bài học

❖ Ví dụ 2 – Hà m static
public class Class2 {

public static void fn1(int x)


{
System.out.println(x);
}
public void fn2(int x)
{
System.out.println(x);
}
}
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Nội dung bài học

❖ Ví dụ 2 – Hà m static
public static void main(String[] args) {
Class2 c=new Class2();
c.fn2(113);

Class2.fn1(113);

}
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW

Bài Học

Khái niệm về kế thừa,


lợi ích của kế thừa
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW

⮚Kế thừa là sự liên quan giữa hai class với nhau, trong
đó có class cha (superclass) và class con (subclass).
Khi kế thừa class con được hưởng tất cả các phương
thức và thuộc tính của class cha. Tuy nhiên, nó chỉ
được truy cập các thành viên public và protected của
class cha. Nó không được phép truy cập đến thành
viên private của class cha
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Kế thừa

❖ Tạ o ra cá c lớ p mớ i từ việc sử dụ ng lạ i nhữ ng thà nh


phầ n củ a lớ p đã có
❖ Lợ i ích
▪ Nhấ t quá n
▪ Thuậ n tiện
▪ Tá i sử dụ ng code
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Kế thừa

Trong 1 mô tả dự á n thự c tế là m sao


phá t hiện đượ c mô hình lớ p mà ở đó
có tính kế thừ a?
Cầ n nắ m đượ c khá i niệm
Tổng quát hóa? chuyên biệt hóa?
=> Quan hệ kế thừ a
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Tổng quát hoá và chuyên biệt hóa

❖ Tổ ng quá t hoá : Nhữ ng đặ c điểm chung mà cá c lớ p


đều có và gom chung thà nh mộ t lớ p cha trên cù ng.
❖ Ví dụ animals là lớ p trừ u tượ ng hó a
❖Chuyên biệt hó a: Nhữ ng đặ c điểm riêng chỉ có
cá c lớ p con mớ i có
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW

Quan hệ kế thừa
Quan hệ IS-A, nghĩa là xem thứ này có là thứ kia hay
không.
Ví dụ: Tam giác là một hình (Triangle IS-A Shape)? Đúng. Mèo
là một động vật họ Mèo (Cat IS-A Feline)? Đúng. Xe tải là một
phương tiện giao thông (Truck IS-A
Vehicle)? Đúng. Nghĩa là, Triangle có thể là lớp con của Shape,
Cat có thể là lớp con của Feline, Truck có thể là lớp con của
Vehicle.
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Quan hệ has A
Quan hệ HAS-A còn được gọi bằng một thuật
ngữ hướng đối tượng là composition. Một cách
chính thức, quan hệ composition được định nghĩa là
khả năng một đối tượng có thành viên là tham chiếu
tới đối tượng thuộc lớp khác.
Sử dụng HAS – A làm tăng tính tái sử dụng code. Khi
các bạn thấy giữa các class có các thông tin chung
giống hệt nhau thì ta nên tách nhỏ nó ra thành một
class khác bao gồm những thuộc tính chung.
HAS – A là đặt những điểm chung ra riêng một class và
import vào các class khác để sử dụng.
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Các kiểu kế thừa trong java
Có 3 kiểu kế thừa trong java: đơn kế thừa (single), kế thừa nhiều
cấp (multilevel), kế thừa thứ bậc (hierarchical).
Khi một class được kế thừa từ nhiều class đươc gọi là đa kế thừa.
Trong java, Java không hỗ trợ đa kế thừa. Ví dụ: nếu có đa kế thừa, 1 class A
kế thừa từ B và C, giả sử B và C đều có chung 1 hàm giống hệt nhau. Vậy từ A
gọi hàm đó sẽ gọi hàm của B hay C?.
Java hỗ trợ 1 phần nào đa kế thừa bằng các Interface.
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
3 dạng kế thừa trong java chính là: kế thừa từ Class,
kế thừa từ lớp trừu tượng (Abstract class) và kế thừa
từ Interface
Khi sử dụng Interface dung từ Implement
còn sử dụng abstract class là bạn extend

Chú ý:
– Một lớp chỉ được phép kế thừa từ một và chỉ một lớp cha mà
thôi.
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW

Bài Học

Kỹ thuật viết
Kế thừa từ Class
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Nội dung bài học

❖ Lớ p cơ sở (base class): là m cơ sở để cá c lớ p khá c


kế thừ a
❖ Lớ p nhậ n (derived class): kế thừ a đặ c điểm củ a
lớ p cơ sở
❖ Khai bá o
▪ class LopNhan extends LopCoSo
▪ Ví dụ :
• class XeDap extends PhuongTienGiaoThong
• class XeMay extends PhuongTienGiaoThong
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Constructor

❖ Constructor khô ng đượ c kế thừ a


❖ Lớ p con truy cậ p bằ ng từ khó a super
class HinhHoc
{

public HinhHoc(double chuVi, double dienTich)
{
ChuVi = chuVi;
DienTich = dienTich;
}
}
class HinhTron extends HinhHoc
{

public HinhTron(double chuVi, double dienTich) {

super(chuVi, dienTich);
}
}
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Abstract class
❖ Abstract(trừu tượng) là một lớp trừu tượng được xây dựng lên
như là một lớp cha cho các lớp con có cùng bản chất
❖ Lớ p Abstract là mộ t lớ p trừ u tượ ng, khô ng thể khở i tạ o nó
bằ ng toá n tử new. Vì lớp dạng abstract chỉ cho phép lớp khác
thừa kế từ nó
.
✔ Phương thứ c trừ u tượ ng là phương thứ c chỉ có định nghĩa tên
hà m, cá c đố i số (khô ng có nộ i dung hà m)
✔ Cá c lớ p con kế thừ a dù ng từ khó a extends
✔ Cá c lớ p con kế thừ a lớ p abstract thì phả i override lạ i phương
thứ c abstract
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW

public abstract class Xe {


private String dongCo;
abstract void khoiDongDongCo();
abstract void dungDongco(); }

class abstract Xecó thuộc tính là động cơ, và các phương


thức khởi động/ dừng động cơ. Xe là một cái gì đó không cụ
thể, nó có thể là ô tô, xe máy, ... và rõ ràng không có Xe nào
mà không tồn tại động cơ và cơ chế khởi động/dừng động
cơ cả.
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Abstract class
abstract class A{
abstract void method_1();
}
public class B extends A{
@Override
public void method_1(){
// cà i đặ t chi tiết cho phương thứ c method_1
// trong lớ p con B.
}
}
public class C extends A{
@Override
public void method_1(){
// cà i đặ t chi tiết cho phương thứ c method_1
// trong lớ p con C.
}
}
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW

Bài Học

Kỹ thuật viết
Kế thừa từ Interface
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Định Nghĩa Interface

Interface (Giao diện) là tập các luật, các


hàm đưa ra bắt buộc các lớp con phải tuân
theo đó, để đảm bảo tính nhất quán.
Ví dụ: giống như một hợp đồng, nó không
thể tự làm bất cứ điều gì. Nhưng khi có
một class ký kết hợp đồng (implement
Interface) này, thì class đó phải tuân theo
hợp đồng này.
Interface không phải là lớp
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Đặc điểm interface
✔ Nó khô ng phả i là giao diện ngườ i dù ng.
✔ Mộ t lớ p có thể kế thừ a từ nhiều interface vớ i cá c lớ p khá c để
thừ a hưở ng thê m vù ng dữ liệu và phương thứ c củ a cá c
interface này.
✔ Interface đượ c khai bá o như mộ t lớ p, vớ i cá c thuộ c tính là
cá c hằ ng và cá c phương thứ c là cá c phương thứ c trừ u tượ ng
(abstract)
✔ Methods trừ u tượ ng là cá c methods chỉ có phầ n header,
khô ng có phầ n body.
✔ Trong cá c lớ p có cà i đặ t cá c interface ta phả i tiế n hà nh cà i đặ t
cụ thể cá c phương thứ c này.
✔ Cá c class đượ c dẫ n xuấ t từ interface có từ implements
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
interface

interface DienTich {
public abstract void sHinhVuong(float a);
public abstract void sHinhChuNhat(float a, float b);
}

interface ChuVi {
public abstract void cVHinhVuong(float a);

public abstract void cVHinhChuNhat(float a, float b);


}

interface CongThuc extends DienTich, ChuVi {


}
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
interface
class CongThucTinh implements CongThuc {
@Override
public void sHinhVuong(float a) {
System.out.println("Diện tích hình vuô ng là : " + a * a);
}
@Override
public void sHinhChuNhat(float a, float b) {
System.out.println("Diện tích hình chữ nhậ t là : " + a * b);
}
@Override
public void cVHinhVuong(float a) {
System.out.println("Chu vi hình vuô ng là : " + 4 * a);
}
@Override
public void cVHinhChuNhat(float a, float b) {
System.out.println("Chu vi hình chữ nhậ t là : " + 2 * (a + b));
}
}
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
interface
public class JavaAndroidVn {
public static void main(String[] args) {
CongThucTinh x = new CongThucTinh();
x.sHinhVuong(5.0f);
x.cVHinhVuong(5.0f);
x.sHinhChuNhat(5.5f, 10.0f);
x.cVHinhChuNhat(5.5f, 10.0f);
}
}
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW

Bài Học

Tính đa hình
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Tính đa hình

❖ Khá i niệm về đa hình


❖ Đa hình từ kế thừ a lớ p
❖ Đa hình từ kế thừ a interface
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Tính đa hình

❖ Đa hình là tạ i từ ng thờ i điểm đố i tượ ng sẽ có cá c hình


thá i khá c nhau trong nhữ ng hoà n cả nh khá c nhau.
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Tính đa hình từ Kế thừa Lớp
public class NhanVien {
public void lanhLuong()
{
System.out.println("Nhân viên lãnh lương");
}
}
public class NhanVienChinhThuc extends NhanVien{
@Override
public void lanhLuong() {
System.out.println("Nhân Viên chính thức lãnh lương");
}
}
NhanVien teo=new NhanVienChinhThuc();
teo.lanhLuong();
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Tính đa hình từ Interface
public interface DoAble {
public void doSomething(int x);
}

public class Work implements DoAble{


public void doSomething(int x) {
System.out.println("Do "+x);
}
}
public static void main(String[] args) {
DoAble able=new Work();
able.doSomething(9);
}
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW

Bài Học

Sắp xếp danh sách đối tượng


dựa vào interface có sẵn
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Nội dung bài học

❖ Giớ i thiệu về interface Comparable


❖ Cá ch dù ng Comparable để sắ p xếp
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Giới thiệu về interface Comparable

❖ Là interface cho phép sắ p xếp cá c đố i tượ ng, có


phương thứ c trừ u tượ ng compareTo
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Cách dùng Comparable để sắp xếp

package communityuni.com;

public class SanPham implements Comparable<SanPham>{


private int ma;
private String ten;
private double gia;
public int compareTo(SanPham arg0) {
if(this.ma>arg0.ma)
return 1;
if(this.ma<arg0.ma)
return -1;
return 0;
}
}
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Cách dùng Comparable để sắp xếp
import java.util.ArrayList;
import java.util.Collections;
public static void main(String[] args) {
ArrayList<SanPham>dsSp=new
ArrayList<SanPham>();
SanPham coca=new SanPham(5,"Cocacola",25);
SanPham pepsi=new SanPham(1,"Pepsi",28);
SanPham redbull=new SanPham(2,"Redbull",30);
dsSp.add(coca);
dsSp.add(pepsi);
dsSp.add(redbull);
Collections.sort(dsSp);
}
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW

Bài Học

Sử dụng enum trong Java


WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Nội dung bài học

❖ Khá i niệm và trườ ng hợ p sử dụ ng enum


❖ Cá ch khai bá o và sử dụ ng enum
❖ Hiệu chỉnh mô tả cho enum
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Khái niệm và trường hợp sử dụng enum

❖ Enum là 1 dạ ng đặ c biệt củ a class, nó chủ yếu đượ c


dù ng để lưu trữ tậ p dữ liệu dạ ng liệt kê có giớ i hạ n
❖ Dù ng Enum rấ t khoa họ c trong việc kiểm tra trạ ng thá i
đố i tượ ng sử dụ ng.
❖ Khi nà o ta biết đượ c giớ i hạ n cá c trườ ng hợ p thì mớ i
nên dù ng enum
❖ Ví dụ 1: Về xếp loạ i họ c tậ p (giỏ i, khá , trung bình..)
❖ Ví dụ 2: Về trạ ng thá i thà nh cô ng thấ t bạ i
❖ Ví dụ 3: Trong mọ i trườ ng hợ p thay vì dù ng biến để
đá nh dấ u giá trị, ta dù ng enum sẽ hiệu quả hơn.
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Cách khai báo và sử dụng enum
public enum XepLoai {
XuatSac,
Gioi,
Kha,
TrungBinh,
Yeu,
Kem,
DiBoDoi
}
Cách sử dụng:
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Hiệu chỉnh mô tả cho enum
public enum XepLoai {
XuatSac ("Xuất sắc"),
Gioi ("Giỏi"),
Kha ("Khá"),
TrungBinh ("Trung Bình"),
Yeu ("Yếu"),
Kem ("Kém"),
DiBoDoi("Đi bộ đội");
String msg;
private XepLoai(String msg) {
this.msg=msg;
}
public String getDescription()
{
return this.msg;
}
}
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW

Bài Học

Alias

cơ chế gom rác tự động
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Alias và cơ chế gom rác tự động

❖ Alias là đặ c điểm mà trên mộ t ô nhớ có nhiều biến


đố i tượ ng cù ng trỏ tớ i.
❖ Ví dụ :
PhanSo psA=new PhanSo(1,5);
PhanSo psB=new PhanSo(3,7);
Lú c này trên thanh RAM sẽ có 2 ô nhớ cấ p phá t cho 2
đố i tượ ng phâ n số đượ c quả n lý bở i 2 biến đố i tượ ng
psA và psB psB
psA

Vù ng Vù ng
nhớ A nhớ B
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Alias và cơ chế gom rác tự động

❖ Giả sử ta thự c hiện lệnh:


psA=psB;
🡺 Ngô n ngữ nó i “Phâ n số A bằ ng Phâ n số B”, nhưng
hệ thố ng máy tính sẽ là m việc theo cơ chế “Phâ n số A
trỏ tớ i vù ng nhớ mà phâ n số B đang quả n lý ”. Hay nó i
cá ch khá c “Vù ng nhớ B” bây giờ có 2 biến đố i tượ ng
cù ng trỏ tớ i(cù ng quả n lý)
psA psB

Vù ng Vù ng
nhớ A nhớ B
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Alias và cơ chế gom rác tự động

❖ Như vậy đã xuấ t hiện Alias ở “vù ng nhớ B”. Lú c này


sẽ xảy ra 2 hiện tượ ng như sau:
❖ Tạ i “vù ng nhớ B”, nếu psA thay đổ i thô ng tin sẽ là m cho
psB thay đổ i thô ng tin (vì cả 2 đố i tượ ng này cù ng quả n
lý mộ t vù ng nhớ )
❖ “Vù ng nhớ A” khô ng cò n đố i tượ ng nà o tham chiếu tớ i,
lú c này hệ thố ng sẽ tự độ ng thu hồ i bộ nhớ (hủ y vù ng
nhớ A đã cấ p trướ c đó ), cơ chế này gọ i là cơ chế gom rá c
tự độ ng
psA psB

Vù ng Vù ng
nhớ A nhớ B
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Alias và cơ chế gom rác tự động
❖ Đô i khi trong quá trình thự c hiện phầ n mềm ta có
nhu cầ u sao chép đố i tượ ng ra (tạ o thêm mộ t đố i
tượ ng giố ng y xì đố i tượ ng cũ nhưng nằ m ở ô nhớ
khá c, để ta có thể tự do thay đổ i thô ng tin trên đố i
tượ ng sao chép mà khô ng là m ả nh hưở ng tớ i đố i
tượ ng gố c). Java hỗ trợ chú ng ta hà m clone trong
interface Cloneable để sao chép đố i tượ ng.
public class PhanSo implements Cloneable {
public PhanSo copy()
throws CloneNotSupportedException
{
return (PhanSo) this.clone();
}
}
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Alias và cơ chế gom rác tự động

❖ Ví dụ :
PhanSo psB = new PhanSo(1,4);
psB
Vù ng
nhớ B
Sao chép toà n bộ thô ng tin trong
PhanSo psA = psB.copy(); Vù ng nhớ B và o vù ng nhớ A 🡺Tứ c là
psA ta có 2 đố i tượ ng có thô ng tin giố ng
nhau y xì nhưng nằ m trên 2 ô nhớ
hoàn toà n khá c nhau

Vù ng
nhớ A
psA thay đổ i khô ng ả nh hưở ng gì tớ i psB và ngượ c lạ i
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW

Bài Học

Khái niệm về biệt lệ


(exception)
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Nội dung bài học

❖ Tạ i sao phả i xử lý biệt lệ?


❖ Cá c cấ p độ lỗ i: lỗ i biên dịch, lỗ i thự c thi, lỗ i logic
❖ Cá ch hà nh xử vớ i lỗ i: Checked error - Unchecked error
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW

❖ Ngoạ i lệ (exception): là mộ t tình trạ ng bấ t thườ ng xảy


ra khi thự c thi chương trình
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Tại sao phải xử lý biệt lệ

⮚ Trong quá trình thự c thi phầ n mềm sẽ có


nhữ ng lỗ i phá t sinh mà trong quá trình
coding ta đã dự đoá n hoặ c chưa dự đoá n
đượ c
⮚ Việc kiểm soá t cá c biệt lệ giú p cho phầ n mềm
tiếp tụ c hoạ t độ ng nếu lỗ i xảy ra hoặ c cũ ng
đưa ra cá c gợ i ý bên phía User Problem
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Các cấp độ lỗi:

⮚ Lỗ i biên dịch
⮚ Lỗ i runtime exception
⮚ Lỗ i logic exception – sai nghiệp vụ yêu cầ u
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Cách hành xử với lỗi

❖ Unchecked error
❖ Checked error
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW

Bài Học

Cách sử dụng try ... catch


WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Nội dung bài học
Try : giúp bao bọc đoạn code có khả năng gây ra lỗi
Catch: sẽ giúp xử lý “hậu quả” khi mà code trên chính thức bị
lỗi
=>Vậy try catch có nhiệm vụ bắt (catch) các lỗi mà thực tế có
thể xảy ra, đưa ra lỗi và chương trình vẫn chạy bình thường
try
{
//lệnh
}
catch(Exception ex)//tham số ex là tên
lỗi muốn xử lý
{
ex.printStackTrace();
}
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW

Bài Học

Ý nghĩa của từ khóa finally


WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Nội dung bài học
Finally: có nhiệm vụ đóng các tài nguyên lại khi có exception
xảy ra => Dùng đóng kết nối, đóng stream, đóng flie

try
{
//lệnh
}
catch(Exception ex)
{
ex.printStackTrace();
}
finally
{
System.out.println("finally");
}
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW

Bài Học

Ý nghĩa của throw


WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Nội dung bài học
Throw: ném lỗi cho hàm nào gọi đến nó
public static void func() throws Exception
{
try
{
//lệnh
}
catch(Exception ex)
{
throw ex;
}
}
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW

Bài Học

Cách gỡ lỗi bằng


công cụ debug
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Nội dung bài học

❖ Cá ch đặ t break point
❖ Cá ch debug từ ng dò ng
❖ Cá ch xem giá trị trong khi debug
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Cách đặt break point

❖ Muố n dừ ng lạ i kiểm tra lệnh ở dò ng nà o thì tạ o break


point ở dò ng đó :
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Cách đặt break point

❖ Muố n dừ ng lạ i kiểm tra lệnh ở dò ng nà o thì tạ o break


point ở dò ng đó :
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Cách debug từng dòng

❖ Và o Run chọ n/ Debug hoặ c nhấ n F11


WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Cách debug từng dòng

❖ Cử a sổ Confirm Perspective Switch hiển thị, chọ n Yes


WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Cách debug từng dòng

❖ Chương trình sẽ dừ ng ngay dò ng số 8 có break point


WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Cách debug từng dòng

❖ Ý nghĩa Cá c phím F5, F6, F8


WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Cách xem giá trị trong khi debug

❖ Chọ n biến🡺chọ n Watch


WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Cách xem giá trị trong khi debug

❖ Chọ n biến🡺chọ n Watch


WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW

Bài Học

Luồng và tệp tin


WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Nội dung bài học

❖ Vì sao phả i lưu tậ p tin


❖ Cá c loạ i tậ p tin lưu trữ
❖ luồ ng (streams) và files:
❖ thư viện là m việc vớ i luồ ng byte, luồ ng ký tự ,
xuấ t/nhậ p file vớ i cá c luồ ng byte và ký tự
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Vì sao phải lưu tập tin

❖ Cá c dữ liệu ta đang thao tá c là trên thanh RAM🡺mấ t


dữ liệu khi tắ t phầ n mềm, tắ t máy
❖ Nên cầ n phả i lưu trữ và o thiết bị lưu trữ vĩnh cử u rồ i
nạ p trở lạ i bộ nhớ .
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Vì sao phải lưu tập tin
Dữ liệu trong
Bộ nhớ trong
phần mềm mà
ta đang thao tác

Bộ nhớ ngoài
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Các loại tập tin lưu trữ

❖ Có rấ t nhiều loạ i, trong khó a họ c này ta quan tâ m tớ i 2


loạ i: TextFile và Serialize File
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW

Có 2 kiểu luồng trong Java


WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Kiến trúc Input Stream (Luồng nhập dữ liệu)
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Kiến trúc Output Stream (Luồng xuất dữ liệu)
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Một số phương thức xử lý dữ liệu nhị phân của class DataInputStream
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Luồng (Stream)
Tất cả những hoạt động nhập/xuất dữ liệu (nhập dữ liệu từ bàn phím, lấy
dữ liệu từ mạng về, ghi dữ liệu ra đĩa, xuất dữ liệu ra màn hình, máy in,
…) đều đƣợc quy về một khái niệm gọi là luồng (stream).
Trong Java có hai loại luồng: luồng byte và luồng ký tự. Luồng byte
(hay luồng dựa trên byte) hỗ trợ việc xuất nhập dữ liệu trên byte,
thƣờng đƣợc dùng khi đọc ghi dữ liệu nhị phân.
Luồng ký tự đƣợc thiết kế hỗ trợ việc xuất nhập dữ liệu kiểu ký tự
(Unicode).
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW

Luồng byte (Byte streams)


Các luồng byte đƣợc định nghĩa dùng hai lớp phân cấp. Mức trên
cùng là hai lớp trừu tƣợng InputStream và OutputStream.
InputStream định nghĩa những đặc điểm chung cho những luồng
nhập byte. OutputStream mô tả cách xử lý của các luồng xuất byte.
Các lớp con dẫn xuất từ hai lớp InputStream và OutputStream sẽ
hỗ trợ chi tiết tƣơng ứng với việc đọc ghi dữ liệu trên những
thiết bị khác nhau. Các lớp con phổ biến nhƣ: Buffered
InputStream /BufferedOutputStream, ByteArrayInputStream
/ByteArrayOutputStream, Data InputStream /DataOutputStream,
FileInputStream /FileOutputStream, RandomAccessFile,…
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Luồng ký tự (Character streams)
Các luồng ký tự đƣợc định nghĩa dùng hai lớp phân cấp. Mức trên
cùng là hai lớp trừu tƣợng Reader và Writer. Lớp Reader dùng cho
việc nhập dữ liệu của luồng, lớp Writer dùng cho việc xuất dữ liệu
của luồng. Những lớp dẫn xuất từ Reader và Writer thao tác
trên các luồng ký tự Unicode nhƣ: BufferedReader/
BufferedWriter, CharArrayReader/ CharArrayWriter, FileReader/
FileWriter, StringReader/ StringWriter, …
Bên cạnh đó Java còn có những luồng làm việc với vào ra chuẩn
nhƣ: luồng in, out, err.
System.in: luồng nhập chuẩn, mặc định là bàn phím. System.in
là một đối tƣợng kiểu InputStream. System.out: luồng xuất
chuẩn, mặc định là console. System.out là một đối tƣợng kiểu
PrintStream.
System.err: luồng lỗi chuẩn, mặc định cũng là console.
System.err cũng là một đối tƣợng kiểu PrintStream giống
System.out.
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW

Bài Học

Xử lý tập tin với TextFile


WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Nội dung bài học

❖ Cá c lớ p thư viện lưu/đọ c TextFile


❖ Kỹ thuậ t lưu trữ tậ p tin vớ i TextFile
❖ Kỹ thuậ t đọ c tậ p tin vớ i TextFile
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Các lớp thư viện lưu/đọc TextFile

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Kỹ thuật lưu trữ tập tin với TextFile

FileOutputStream fos=new FileOutputStream("d:/data.txt");


OutputStreamWriter osw=new OutputStreamWriter(fos, "UTF-8");
BufferedWriter bw=new BufferedWriter(osw);

bw.write("Obama");
bw.newLine();
bw.write("Putin");
bw.newLine();
bw.write("Kim Jong Un");

bw.close();
osw.close();
fos.close();
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Kỹ thuật đọc tập tin với TextFile
FileInputStream fis=new FileInputStream("d:/data.txt");
InputStreamReader isr=new InputStreamReader(fis, "UTF-8");
BufferedReader br=new BufferedReader(isr);

String line1=br.readLine();
String line2=br.readLine();
String line3=br.readLine();

br.close();
isr.close();
fis.close();
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW

Bài Học

Xử lý tập tin với


Serialize File
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Nội dung bài học

❖ Cá c lớ p thư viện lưu/đọ c Serialize File


❖ Kỹ thuậ t lưu trữ tậ p tin vớ i Serialize File
❖ Kỹ thuậ t đọ c tậ p tin vớ i Serialize File
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
public class KhachHang implements Serializable{
private String ma;
private String ten;
public String getMa() {
return ma;
}
public void setMa(String ma) {
this.ma = ma;
}
public String getTen() {
return ten;
}
public void setTen(String ten) {
this.ten = ten;
}
public KhachHang(String ma, String ten) {
super();
this.ma = ma;
this.ten = ten;
}
}
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Các lớp thư viện lưu/đọc Serialize File

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Kỹ thuật lưu trữ tập tin với Serialize
File
FileOutputStream fos=new FileOutputStream(“d:/data.dat”);
ObjectOutputStream oos=new ObjectOutputStream(fos);
KhachHang kh=new KhachHang (1,”Nguyễn Văn Tèo”);
oos.writeObject(kh);
oos.close();
fos.close();
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Kỹ thuật đọc tập tin với Serialize File
FileInputStream fis=new FileInputStream(“d:/data.dat”);
ObjectInputStream ois=new ObjectInputStream(fis);
Object data=ois.readObject();
KhachHang kh=(KhachHang) data;
ois.close();
fis.close();
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW

Bài Học

Khái niệm về đa tiến trình và


cơ chế hoạt động
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Nội dung bài học

❖ Khá i niệm về đa tiến trình


❖ Trạ ng thá i củ a Thread
❖ Độ ưu tiên củ a Thread
❖ Cá c kỹ thuậ t tạ o đa tiến trình trong Java
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Khái niệm về đa tiến trình

❖ Mộ t chương trình đa luồ ng chứ a hai hoặ c nhiề u phầ n mà


có thể chạy đồ ng thờ i và mỗ i phầ n có thể xử lý tá c vụ khá c
nhau tạ i cù ng mộ t thờ i điểm, để sử dụ ng tố t nhấ t cá c
nguồ n có sẵ n, đặ c biệt khi máy tính củ a bạ n có nhiề u CPU.
❖ Theo định nghĩa, đa nhiệm (multitasking) là khi nhiều
tiến trình chia sẻ nguồ n xử lý chung ví dụ như mộ t CPU.
Thread có thể chia nhỏ cá c hoạ t độ ng riêng biệt bên
trong mộ t ứ ng dụ ng đơn thà nh cá c luồ ng (thread) riêng
lẻ. Mỗ i mộ t thread có thể chạy song song. OS phâ n chia
thờ i gian xử lý khô ng chỉ trong cá c ứ ng dụ ng khá c nhau,
mà cò n trong mỗ i luồ ng bên trong mộ t ứ ng dụ ng.
❖ Thread cho Ta khả nă ng viết mộ t chương trình mà có
nhiều hoạ t độ ng có thể phá t sinh đồ ng thờ i.
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Trạng thái của Thread

❖ Mộ t thread đi qua cá c giai đoạ n khá c nhau trong vò ng đờ i


củ a nó .
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Trạng thái của Thread

⮚ New: Mộ t thread mớ i bắ t đầ u vò ng đờ i củ a nó trong trạ ng


thá i new. Nó tồ n tạ i trong trạ ng thá i này tớ i khi chương
trình bắ t đầ u thread này. Nó cũ ng đượ c xem như là mộ t
thread mớ i sinh.
⮚ Runnable: Sau khi mộ t thread mớ i sinh ra đượ c bắ t đầ u,
thread trở thà nh runnable. Mộ t thread trong trạ ng thá i
này đượ c xem như đang thự c hiệ n tá c vụ củ a nó .
⮚ Blocked: Tiến trình bị block tạ m thờ i, để cho cá c tiến
trình khá c có cơ hợ i xen và o.
⮚ Dead: Mộ t thread trong trạ ng thá i runnable có thể đi và o
trạ ng thá i Dead khi nó hoà n thà nh tá c vụ củ a nó hoặ c nó
chấ m dứ t.
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Độ ưu tiên của Thread

⮚ Mỗ i thread trong Java có mộ t quyền ưu tiê n mà giú p hệ


điề u hà nh xá c định thứ tự thread nà o đượ c ghi lịch trình.
⮚ Quyền ưu tiên củ a thread trong Java là mộ t dãy giữ a
MIN_PRIORITY (hằ ng số 1) và MAX_PRIORITY (hằ ng số
10). Theo mặ c định, mỗ i thread đượ c cung cấ p mộ t quyền
ưu tiên NORM_ PRIORITY (hằ ng số 5).
⮚ Cá c thread vớ i quyền ưu tiên cao hơn là quan trọ ng hơn
vớ i mộ t chương trình và nên đượ c cấ p phá t thờ i gian bộ vi
xử lý trướ c cá c thread có quyề n ưu tiê n thấ p hơn. Tuy
nhiê n, cá c quyề n ưu tiên củ a thread bả o đả m thứ tự trong
đó cá c thread thự c thi và phụ thuộ c rấ t nhiề u và o platform.
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Các kỹ thuật tạo đa tiến trình trong Java

⮚ Tạ o Thread từ kế thừ a lớ p Thread trong Java


⮚ Tạ o thread từ implements Interface Runnable trong Java
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW

Bài Học

Kỹ thuật tạo đa tiến trình từ


Thread
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Nội dung bài học

❖ Cá ch tạ o Lớ p kế thừ a từ Thread
❖ Cá ch sử dụ ng đa tiến trình vớ i Thread
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Cách tạo Lớp kế thừa từ Thread
⮚ Tạ o Thread từ kế thừ a lớ p Thread trong Java

1. Override method run of Thread class.


2. The code inside is the task assign to thread
when running.
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Cách sử dụng đa tiến trình với Thread
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW

Bài Học

Kỹ thuật tạo đa tiến trình từ


Runnable
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Nội dung bài học

❖ Cá ch tạ o Lớ p implements từ Runnable
❖ Cá ch sử dụ ng đa tiến trình vớ i Runnable
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Cách tạo Lớp implements từ Runnable

⮚ Tạ o thread từ implements Interface Runnable trong Java

1. Override method run of Thread class.


2. The code inside is the task assign to thread
when running.
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Cách sử dụng đa tiến trình với Runnable
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW

Bài Học

Project thực tế tổng hợp lại


toàn bộ kiến thức đã học
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Nội dung bài học

❖ Viết phầ n mềm quả n lý Danh Bạ Khá ch Hà ng (dù ng


HashMap). Mỗ i khá ch hà ng có : Mã , Tên, Phone.
❖ Yêu cầ u viết hướ ng đố i tượ ng
❖ Cho phép: Thêm, lưu, sử a, xó a, tìm kiếm, sắ p xếp, lưu
trữ và đọ c danh bạ bằ ng Serialize File
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW

Bài Học

JAVA SWING
NỘI DUNG ĐƯỢC TRÌNH BÀY GỒM:

• Giới thiệu thiết kế GUI trong java


• Các thành phần cơ bản (Component)
• Đối tượng khung chứa (Container)
• Bộ quản lý trình bày (Layout Manager)

433
PHẦN 1
GIỚI THIỆU THIẾT KẾ
GUI TRONG JAVA
GIỚI THIỆU VỀ THIẾT KẾ GUI

• Thư viện hỗ trợ: tập hợp các lớp java


cung cấp hỗ trợ thiết kế, xây dựng
GUI (Graphic User Interface) là:
– awt (java.awt.*)
– swing (javax.swing.*)

435
GIỚI THIỆU AWT

• AWT viết tắt của Abstract Windowing Toolkit


• AWT là tập hợp các lớp Java cho phép chúng ta
tạo một GUI.
• Cung cấp các mục khác nhau để tạo hoạt động
và hiệu ứng GUI
– import java.awt.*;
– import java.awt.event.*;

436
GIỚI THIỆU AWT

437
NGUYÊN TẮC XÂY DỰNG GUI
• Lựa chọn một container: Frame, Window, Dialog,
Applet,…
• Tạo các control: (buttons, text areas, list, choice,
checkbox,...)
• Đưa các control vào vùng chứa
• Sắp xếp các control trong vùng chứa (Layout).
• Thêm các xử lý sự kiện (Listeners)

438
PHẦN 2
CÁC THÀNH PHẦN CƠ BẢN
(COMPONENTS)
CÁC COMPONENTS CỦA GUI

• Tất cả các thành phần cấu tạo nên


chương trình GUI được gọi là component.
• Ví dụ
– Frame, Window, Dialog, Applet,…
– TextFields, Labels, CheckBoxes,
TextArea, Button, Choice, List,
Scrollbars,…

440
CÁC COMPONENTS CỦA GUI

Label Button Checkbox

Choice
Scrollbar
TextField List
TextArea
Button

Checkbox CheckboxGroup
441
NHÃN (LABEL)

• Nhãn được dùng để trình bày một chuỗi văn bản ra màn
hình
• Một số phương thức của Label:
public Label(); // tạo nhãn
public Label(String s); // tạo nhãn với nội dung s
public Label(String s, int align); // tạo và canh lề
void setText(String s); // đặt nội dung nhãn
void setAlignment(int align); // canh lề nhãn
...

442
NHÃN (LABEL)
import java.applet.Applet;
import java.awt.*;
public class DemoLabel extends Applet
{
private Label label;
public void init()
{
Font font = new Font("Courier", Font.BOLD, 20);
label = new Label("Thu nghiem voi Label");
label.setFont(font);
add(label);
}
public void paint(Graphics g)
{
showStatus("Noi dung cua Label la: “ + label.getText());
}
}

443
NHÃN (LABEL)

444
NÚT NHẤN (BUTTON)

• Một số phương thức của Button


– Button(); // tạo nút nhấn
– Button(String s); // tạo nút nhấn có tên s
– void setLabel(String s); // đổi tên nút
– String getLabel(); // lấy tên nút nhấn
• Để lắng nghe sự kiện nhấn nút ta cần cài đặt
giao tiếp ActionListener.

445
NÚT NHẤN (BUTTON)
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
public class DemoButton extends Applet implements ActionListener
{
private Button blueButton;
private Button whiteButton;
private Button helloButton;
public void init()
{
blueButton = new Button("Blue");
whiteButton = new Button("White");
helloButton = new Button("Hello");
blueButton.addActionListener(this);
whiteButton.addActionListener(this);
helloButton.addActionListener(this);
//xem tiếp ở slide kế tiếp

446
NÚT NHẤN (BUTTON)
add(blueButton);
add(whiteButton);
add(helloButton);
}
public void actionPerformed(ActionEvent event)
{
if(event.getSource() == helloButton)
javax.swing.JOptionPane.showMessageDialog(this, "Hello !");
else{
if (event.getSource() == blueButton)
this.setBackground(Color.BLUE);
else if (event.getSource() == whiteButton)
this.setBackground(Color.WHITE);
repaint();
}
}
}

447
NÚT NHẤN (BUTTON)

448
Ô VĂN BẢN (TEXT FIELD)

• Ô văn bản cho phép nhận dữ liệu từ bàn phím trên một
dòng
• Một số phương thức
– TextField(...); // các cấu tử
– void setEditable(boolean b); // đặt/tắt chế độ nhập
– void setEchoChar(char c); // đặt kí tự hiển thị
• Đối tượng nghe cần cài đặt 2 giao tiếp
– ActionListener
– TextListener
• Cài đặt phương thức textValueChanged();

449
Ô VĂN BẢN (TEXT FIELD)
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
public class DemoTextField extends Applet implements ActionListener
{
private TextField txtEdit;
private TextField txtReadOnly;
private TextField txtPass;
private final StringPASSWORD = "Java";
public void init()
{
txtEdit = new TextField("Your name here");
txtPass = newTextField(12);
txtPass.setEchoChar('*');
txtPass.addActionListener(this);
txtReadOnly = newTextField("This text is read only");
txtReadOnly.setEditable(false);
// xem tiếp ở slide kế tiếp

450
Ô VĂN BẢN (TEXT FIELD)
add(txtEdit);
add(txtPass);
add(txtReadOnly);
}
public void actionPerformed(ActionEvent event)
{
if(txtPass.getText().equals(PASSWORD))
txtReadOnly.setText("Password is valid");
else
txtReadOnly.setText("Invalid password !");
}
}

451
LỰA CHỌN (CHOICE)

• Choice cung cấp khả năng lựa chọn một trong số các hạng
mục sẵn có.
• Một số phương thức
– Choice(); // cấu tử
– void addItem(String s); // thêm item là s
– String getItem(int index);// lấy item có chỉ số index
– String getSeclectedItem(); // trả về item được chọn
– int getSelectedIndex(); // trả về index của item được chọn
• Lớp nghe cài đặt giao tiếp ItemListener
– Cài đặt phương thức itemStateChanged(...)

452
LỰA CHỌN (CHOICE)
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
public class DemoChoice extends Applet implements ItemListener
{
private Choice choice;
private TextField txtText;
private Font font;
public void init()
{
choice = newChoice();
choice.addItem("TimesRoman");
choice.addItem("Courier");
choice.addItem("Helvetica");
choice.addItemListener(this);
// xem tiếp ở slide kế tiếp

453
LỰA CHỌN (CHOICE)
txtText = new TextField("Sample Text", 16);
txtText.setEditable(false);
font = newFont(choice.getItem(0),Font.PLAIN, 12);
txtText.setFont(font);
add(choice);
add(txtText);
}
public void itemStateChanged(ItemEvent event)
{
font = newFont(choice.getSelectedItem(), Font.PLAIN, 12);
txtText.setFont(font);
}
}

454
CHECK BOX (HỘP ĐÁNH DẤU)

Checkbox cung cấp các hộp tuỳ chọn cho người dùng
• Một số phương thức
– Checkbox(...); // các cấu tử
– void setLabel(Strings); // đặtnhãn mới
– booleangetState(); // lấy trạngtháihiệntại
• Lớp nghe cài đặt giao tiếp ItemListener
– Cài đặt phương thức itemStateChanged(...)

455
CHECK BOX (HỘP ĐÁNH DẤU)
import java.applet.Applet;
Import java.awt.*;
Import java.awt.event.*;
public classDemoCheckbox extends Applet implements ItemListener
{
private Checkbox checkBold;
private Checkbox checkItalic;
privateTextFieldtxtText;
public void init()
{
checkBold = new Checkbox("Bold");
checkItalic = new Checkbox("Italic");
checkBold.addItemListener(this);
checkItalic.addItemListener(this);
txtText = new TextField("Sample Text", 16);
Font font = new Font("Courier", Font.PLAIN, 14);
txtText.setFont(font);\
//xem tiếp ở slide kế tiếp

456
CHECK BOX (HỘP ĐÁNH DẤU)
add(txtText);
add(checkBold);
add(checkItalic);
}
public void itemStateChanged(ItemEvent event)
{
int valBold = Font.PLAIN;
int valItalic = Font.PLAIN;
if(checkBold.getState()) valBold = Font.BOLD;
if(checkItalic.getState()) valItalic = Font.ITALIC;
Font font = new Font("Courier", valBold + valItalic, 14);
txtText.setFont(font);
}
}

457
CHECK BOX GROUP & RADIO BUTTON
• Các Checkboxcó thể được đặt trong một
CheckboxGroup để tạo ra các Radio Button.
• Vídụ: Tạo 3 radio button
// Tạo 3 radio button thuộc cùng một nhóm. Ban đầu
// radio1 được chọn. Tại mỗi thời điểm chỉ có thể chọn một // trong 3
radio.
CheckboxGroupg = new CheckboxGroup();
Checkbox radio1 = new Checkbox(“Radio1”, g, true);
Checkbox radio2 = new Checkbox(“Radio2”, g, false);
Checkbox radio3 = new Checkbox(“Radio3”, g, false);

458
CHECK BOX GROUP & RADIO BUTTON
// Cac import can thiet...
public class DemoRadio extends Applet implements ItemListener
{
private Checkbox plain, bold, italic;
private CheckboxGroup group;
private TextFieldtxtText;
public void init()
{
group = new CheckboxGroup();
plain = new Checkbox("Plain", group,true);
bold = new Checkbox("Bold", group, false);
italic = new Checkbox("Italic", group, false);
txtText = new TextField("Sample Text");
txtText.setFont(new Font("Courier", Font.PLAIN, 14));
plain.addItemListener(this);
bold.addItemListener(this);
italic.addItemListener(this);
//xem tiếp ở slide tiếp theo

459
CHECK BOX GROUP & RADIO BUTTON
add(txtText);
add(plain);
add(italic);
add(bold);
}
public void itemStateChanged(ItemEvent event)
{
int mode = 0;
if(event.getSource() == plain) mode = Font.PLAIN;
if(event.getSource() == italic) mode = Font.ITALIC;
if(event.getSource() == bold) mode = Font.BOLD;
txtText.setFont(newFont("Courier", mode, 14));
}
}

460
DANH SÁCH (LIST)

• List cho phép người dùng chọn một hay


nhiều item từ một danh sách các item
• Một số phương thức
– List(); // cấu tử mặc định
– List(int items, boolean ms); // cấu tử mở rộng
– String getSeclectedItem(); // lấy lại thành phần
được chọn
• Lớp nghe cài đặt giao tiếp ItemListener
và/hoặc ActionListener

461
DANH SÁCH (LIST)
// Cac import can thiet...
public class DemoList extends Applet implements ItemListener, ActionListener
{
private List colorList;
public void init()
{
colorList = newList(3, false);
colorList.add("White");
colorList.add("Black");
colorList.add("Yellow");
colorList.add("Green");
colorList.addItemListener(this);
colorList.addActionListener(this);
add(colorList);
}
//xem tiếp ở slide tiếp theo

462
DANH SÁCH (LIST)
public void itemStateChanged(ItemEvent event)
{
List list = (List) event.getSource();
showStatus("Item " + list.getSelectedIndex() + " selected");
}
public void actionPerformed(ActionEvent event)
{
List list = (List) event.getSource();
Strings = list.getSelectedItem();
if(s.equals("White")) setBackground(Color.WHITE);
if(s.equals("Black")) setBackground(Color.BLACK);
if(s.equals("Yellow")) setBackground(Color.YELLOW);
if(s.equals("Green")) setBackground(Color.GREEN);
repaint();
}
}

463
CÁC THÀNH PHẦN KHÁC

• Một số thành phần khác như: TextArea (vùng văn


bản), Menu (thực đơn), ScrollBar (thanh trượt),
Canvas (khung vẽ), Applet,… sẽ được trình bày ở
các chương sau.

464
PHẦN 3
ĐỐI TƯỢNG KHUNG CHỨA
(CONTAINERS)
CÁC ĐỐI TƯỢNG KHUNG CHỨA
• Là các thành phần mà có thể chứa các thành phần khác, có thể vẽ và tô
màu.
• Gồm có: Frame, Applet, Panel, ScrollPane, Dialog, FileDialog.

466
CÁCH TÍNH TỌA ĐỘ

y screen
x

screen height

MyWindow height

widt
h

screen
width

467
KHUNG CHỨA FRAME

• Frame được dùng để xây dựng các ứng dụng GUI chạy
độc lập.
• Frame là một cửa sổ có thanh tiêu đề và các đường biên.
Bố cục mặc định của Frame là BorderLayout.
• Frame kế thừa từ Window, nó có thể nghe các sự kiện
xảy ra trên cửa sổ khi cài đặt giao tiếp WindowListener.
• Các ứng dụng độc lập thường tạo ra cửa sổ kế thừa từ
lớp Frame.

468
KHUNG CHỨA FRAME
import java.awt.*;
importjava.awt.event.*;
public class DemoFrame
{
public static void main(String[] args)
{
Frame frame = new Frame(“Example on Frame”);
Labellabel = newLabel("This is a label in Frame",Label.CENTER);
frame.add(label, BorderLayout.CENTER);
frame.setSize(500,500);
frame.setVisible(true);
frame.addWindowListener(newMyWindowListener());
}
}
//xem tiếp ở slide tiếp theo

469
KHUNG CHỨA FRAME
// Lop nghe doc lap (external listener)
Class MyWindowListener extendsWindowAdapter
{
public void windowClosing(WindowEvent event)
{
System.exit(0);
}
}

470
KHUNG CHỨA FRAME
import java.awt.*;
Import java.awt.event.*;
public class DemoFrame2
{ public static void main(String[] args)
{ MyFrame myFrame = new MyFrame("Example on my frame");
myFrame.setSize(250, 300);
myFrame.setVisible(true);
myFrame.addWindowListener(newWindowAdapter()
{// Lop nghe noi khong ten (anonymous inner class listener)
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
}
}
//xem tiếp ở slide tiếp theo
471
KHUNG CHỨA FRAME

Class MyFrame extends Frame


{
public MyFrame(String title)
{
super(title);
}
public void paint(Graphics g)
{
g.setColor(Color.BLUE);
g.fillOval(40, 40, 80, 80);
}
}

472
KHUNG CHỨA FRAME
• Chú ý:
– Frame không có các phương thức init, start… như
trong Applet.
– Các ứng dụng độc lập dùng Frame phải có hàm main
và được chạytrực tiếp bằng lệnh java.
– Cần có lệnh setSize, setVisible(true) để có thể hiển thị
Frame.
– Ở cuối chương trình nên có lệnh: System.exit(0);

473
LỚP PANEL (VÙNG CHỨA)

• Lớp Panel kế thừa từ Container. Nó có thể được dùng để


tạo ra các giao diện theo ý muốn.
• Ví dụ: Một giao diện có thể có nhiều panel sắp xếp theo
một layout nhất định, mỗi panel lại có các component sắp
xếp theo một layout riêng.
• Chú ý: Panel có bố cục mặc định là FlowLayout.

474
LỚP PANEL (VÙNG CHỨA)

Panel(BorderLayout
)

TextField

Button
12 Button

Panel(GridLayout
)

Frame(BorderLayout
)

475
LỚP PANEL (VÙNG CHỨA)
public void init()
{
Choice choice = new Choice();
choice.add("Red");
choice.add("Green");
choice.add("Blue");
Button ok = new Button("Ok");
Button cancel = new Button("Cancel");
Panel panel = new Panel();
panel.add(ok);
panel.add(cancel);
this.setLayout(new BorderLayout());
this.add(choice, BorderLayout.NORTH);
this.add(panel, BorderLayout.CENTER);
}

476
KHUNG CUỘN (SCROLL PANE)
• Khung cuộn là một container cho phép chứa thành phần
GUI có kích thước lớn hơn chính nó.
• Bài tập: Viết chương trình cho phép vẽ trong một canvas
có độ rộng lớn hơn kích thước của applet. Đặt canvas
vào trong một scroll pane.

477
HỘP THOẠI (DIALOG)
• Dialog cũng là một cửa sổ, thường dùng để nhập
hoặc hiển thị thông tin với người dùng.
• Hai loại hộp thoại
– Modal: Phải đóng hộp thoại trước khi chuyển
sang cửa sổ khác.
– Modaless: Có thể giữ nguyên hộp thoại và
chuyển sang cửa sổ khác.

478
HỘP THOẠI (DIALOG)

• Dialog kế thừa từ lớp Window, nó có bố


cục mặc định là BorderLayout.
• Hộp thoại có thể chứa các thành phần GUI
và xử lý các sự kiện như một cửa sổ bình
thường.

479
VÍ DỤ VỀ FRAME VÀ DIALOG

480
VÍ DỤ VỀ FRAME VÀ DIALOG
import java.awt.*;
Import java.awt.event.*;
public class DemoFrame3
{
public static void main(String[] args)
{
MyFrame myFrame = new MyFrame("Example on my frame");
myFrame.setSize(500, 400);
myFrame.setVisible(true);
myFrame.addWindowListener(newWindowAdapter()
{
public voidwindowClosing(WindowEvente){System.exit(0);
}});
}
}

481
VÍ DỤ VỀ FRAME VÀ DIALOG
Class MyFrame extends Frame implements ActionListener
{ private MenuBar menuBar;
private Menu menu;
private MenuItem circleItem, rectItem;
public MyFrame(String title)
{ super(title);
menuBar = new MenuBar();
setMenuBar(menuBar);
menu = new Menu("Draw");
menuBar.add(menu);
circleItem = new MenuItem("Circle");
rectItem = new MenuItem("Rectangle");
menu.add(circleItem); menu.add(rectItem);
circleItem.addActionListener(this);
rectItem.addActionListener(this);
}
// xem tiếp ở slide tiếp theo
482
VÍ DỤ VỀ FRAME VÀ DIALOG
public void actionPerformed(ActionEvent e)
{
if (e.getSource() == circleItem)
{MyDialog dialog = new MyDialog(this, "Modeless Dialog: Circle", false);
}
}
}
Class MyDialog extends Dialog
{ MyDialog(Frame parent, String title, boolean isModel)
{ super(parent, title, isModel);
add(newLabel("Hi, I am a dialog"), BorderLayout.CENTER);
setSize(300, 200); setVisible(true);
addWindowListener(newMyDialogListener(this));
}
}

483
VÍ DỤ VỀ FRAME VÀ DIALOG
// Co the dat lop nay lam lop nội (inner class) cua lop MyDialog
class MyDialogListener extends WindowAdapter
{
Dialog dialog;
MyDialogListener(Dialog dia){dialog = dia;}
public void window Closing(WindowEvent e)
{
dialog.setVisible(false);
dialog.dispose();
}
}

484
PHẦN 4
BỘ QUẢN LÝ TRÌNH BÀY
(LAYOUT MANAGER)
BỘ QUẢN LÝ TRÌNH BÀY

Có năm bộ quản lý trình bày:


- Flow Layout
- Border Layout
- Grid Layout
- Gridbag Layout
- Null Layout

486
FLOW LAYOUT
Đối với một container trình bày theo kiểu
FlowLayout thì:
• Các component gắn vào được sắp xếp theo thứ
tự từ trái sang phải và từ trên xuống dưới.
• Các component có kích thước như mong muốn.
• Nếu chiều rộng của Container không đủ chỗ cho
các component thì chúng tự động tạo ra một
dòng mới.
• FlowLayout thường được dùng để để sắp xếp
các button trong 1 panel.
• Chúng ta có thể điều chỉnh khoảng cách giữa
các component.
487
FLOW LAYOUT
Ví dụ:
import java.awt.*;
import java.lang.Integer;
class FlowLayoutDemo
{
public static void main(String args[])
{
Frame fr = new Frame("FlowLayout Demo");
fr.setLayout(new FlowLayout());
fr.add(new Button("Red"));
fr.add(new Button("Green"));
fr.add(new Button("Blue"));
List li = new List();
for (int i=0; i<5; i++)
{
li.add(Integer.toString(i));
}
//xem tiếp ở slide tiếp theo

488
FLOW LAYOUT
fr.add(li);
fr.add(new Checkbox("Pick me", true));
fr.add(new Label("Enter your name:"));
fr.add(new TextField(20));
// phương thức pack() được gọi sẽ làm cho cửa sổ
// hiện hành sẽ có kích thước vừa với kích thước
// trình bày bố trí những thành phần con của nó.
fr.pack();
fr.setVisible(true);
}
}

489
BORDER LAYOUT
Đối với một container trình bày theo kiểu BorderLayout thì:
▪ Bộ trình bày khung chứa được chia làm 4 vùng: NORTH,
SOUTH, WEST, EAST và CENTER. (Đông,Tây, Nam, Bắc
và trung tâm). Bộ trình bày loại này cho phép sắp xếp và
thay đổi kích thước của những components chứa trong nó
sao cho vứa với 5 vùng ĐÔNG, TÂY, NAM, BẮC, TRUNG
TÂM.
▪ Không cần phải gắn component vào cho tất cả các vùng.
▪ Các component ở vùng NORTH và SOUTH có chiều cao
tùy ý nhưng có chiều rộng đúng bằng chiều rộng vùng
chứa.
▪ Các component ở vùng EAST và WEST có chiều rộng tùy
ý nhưng có chiều cao đúng bằng chiều cao vùng chứa.
▪ Các component ở vùng CENTER có chiều cao và chiều
rộng phụ thuộc vào các vùng xung quanh.

GV: Võ Tấn
490
BORDER LAYOUT
Ví dụ:
import java.awt.*;
class BorderLayoutDemo extends Frame
{ private Button north, south, east, west, center;
public BorderLayoutDemo(String sTitle)
{ super(sTitle);
north = new Button("North");
south = new Button("South");
east = new Button("East");
west = new Button("West");
center = new Button("Center");
this.add(north, BorderLayout.NORTH);
this.add(south, BorderLayout.SOUTH);
this.add(east, BorderLayout.EAST);
this.add(west, BorderLayout.WEST);
this.add(center, BorderLayout.CENTER);
}
public static void main(String args[])
{ Frame fr = new BorderLayoutDemo ("Border Layout Demo");
fr.pack();
fr.setVisible(true);
}
}
491
BORDER LAYOUT

492
GRID LAYOUT
Đối với một container trình bày theo kiểu GridLayout thì:
• Bộ trình bày tạo một khung lưới vô hình với các ô bằng
nhau.
• Các đối tượng sẽ đặt vừa kích thước với từng ô đó. Thứ
tự sắp xếp từ trái qua phải và từ trên xuống dưới.

493
GRID LAYOUT
Ví dụ:
import java.awt.*;
public class GridLayoutDemo
{
public static void main(String arg[])
{
Frame f = new Frame("GridLayout Demo");
f.setLayout(new GridLayout(3,2));
f.add(new Button("Red"));
f.add(new Button("Green"));
f.add(new Button("Blue"));
f.add(new Checkbox("Pick me", true));
f.add(new Label("Enter name here:"));
f.add(new TextField());
f.pack();
f.setVisible(true);
}
}

494
GRIDBAG LAYOUT
Đối với một container trình bày theo kiểu
GridBagLayout thì:
• Các componets khi được đưa vào khung chứa
sẽ được trình bày trên 1 khung lưới vô hình
tương tự như GridLayout. Tuy nhiên khác với
GridLayout kích thước các đối tượng không nhất
thiết phải vừa với 1 ô trên khung lưới mà có thể
là 2, 3 ô hay nhiều hơn tùy theo các ràng buộc
mà ta chỉ định thông qua đối tượng
GridBagConstraints.

495
GRIDBAG LAYOUT
Lớp GridBagConstraints dẫn xuất từ lớp Object. Lớp
GridBagConstraints dùng để chỉ định ràng buộc cho những
components trình bày trong khung chứa container theo kiểu
GridBagLayout.
• gridx, gridy: vị trí ô của khung lưới vô hình mà ta sẽ
đưa đối tượng con vào o gridwidth, gridheight: kích
thước hay vùng trình bày cho đối tượng con.
• Insets: là một biến đối tượng thuộc lớp Inset dùng để qui
định khoảng cách biên phân cách theo 4 chiều (trên,
dưới, trái, phải).
• weightx, weighty: chỉ định khoảng cách lớn ra tương
đối của các đối tượng con với nhau

GV: Võ Tấn
496
GRIDBAG LAYOUT
Ví dụ:
import java.awt.*;
public class GridBagLayoutDemo
{
public static void main(String arg[])
{
Frame f = new Frame("GridBagLayout Demo");
// Thiet lap layout manager
// Tao doi tuong rang buoc cho cach trinh bay
// GridBagLayout.
GridBagLayout layout = new GridBagLayout();
GridBagConstraints constraints = new
GridBagConstraints();
f.setLayout(layout);
// Tao ra 9 nut nhan
String[] buttName = {"Mot", "Hai", "Ba", "Bon", "Nam", "Sau", "Bay",
"Tam", "Chin"};
Button[] buttons = new Button[9];
for(int i=0;i<9;i++)
{
buttons[i] = new Button (buttName[i]);
}
//xem tiếp ở slide tiếp theo
497
GRIDBAG LAYOUT
// Rang buoc cac nut nhan cach nhau 2 pixel
constraints.insets = new Insets(2,2,2,2);
// Qui dinh cac nut nhan se thay doi kich thuoc
// theo ca 2 chieu
constraints.fill = GridBagConstraints.BOTH;
// Rang buoc cho nut nhan thu 1
constraints.gridx = 1; constraints.gridy = 1;
constraints.gridheight = 2; constraints.gridwidth = 1;
layout.setConstraints(buttons[0], constraints);
// Rang buoc cho nut nhan thu 2
constraints.gridx = 2; constraints.gridy = 1;
constraints.gridheight = 1; constraints.gridwidth = 2;
layout.setConstraints(buttons[1], constraints);
// Rang buoc cho nut nhan thu 3
constraints.gridx = 2; constraints.gridy = 2;
constraints.gridheight = 1; constraints.gridwidth = 1;
layout.setConstraints(buttons[2], constraints);
// Rang buoc cho nut nhan thu 4
constraints.gridx = 1; constraints.gridy = 3;
constraints.gridheight = 1; constraints.gridwidth = 2;
layout.setConstraints(buttons[3], constraints);
//xem tiếp ở slide tiếp theo
498
GRIDBAG LAYOUT
// Rang buoc cho nut nhan thu 5
constraints.gridx = 3; constraints.gridy = 2;
constraints.gridheight = 2; constraints.gridwidth = 1;
layout.setConstraints(buttons[4], constraints);
// Rang buoc cho nut nhan thu 6
constraints.gridx = 4; constraints.gridy = 1;
constraints.gridheight = 3; constraints.gridwidth = 1;
layout.setConstraints(buttons[5], constraints);
// Tu nut thu 7 tro di khong can rang buoc
// thay vi doi kich thuoc
constraints.fill = GridBagConstraints.NONE;
// Rang buoc cho nut nhan thu 7
constraints.gridx = 1; constraints.gridy = 4;
constraints.gridheight = 1; constraints.gridwidth = 1;
constraints.weightx = 1.0;
layout.setConstraints(buttons[6], constraints);
// Rang buoc cho nut nhan thu 8
constraints.gridx = 2; constraints.gridy = 5;
constraints.gridheight = 1; constraints.gridwidth = 1;
constraints.weightx = 2.0;
layout.setConstraints(buttons[7], constraints);
//xem tiếp ở slide tiếp theo
499
GRIDBAG LAYOUT
// Rang buoc cho nut nhan thu 9
constraints.gridx = 3;
constraints.gridy = 6;
constraints.gridheight = 1;
constraints.gridwidth = 1;
constraints.weightx = 3.0;
layout.setConstraints(buttons[8], constraints);
// Dua cac nut nhan khung chua chuong trinh
for (int i=0;i<9;i++)
f.add(buttons[i]);
f.pack();
f.setVisible(true);
}
}

500
NULL LAYOUT
• Một khung chứa được trình bày theo kiểu Null
Layout có nghĩa là người lập trình phải tự làm tất cả
từ việc qui định kích thước của khung chứa, cũng
như kích thước và vị trí của từng đối tượng
component trong khung chứa.
• Để thiết lập cách trình bày là Null Layout cho một
container ta chỉ việc gọi phương thức
setLayout(null) với tham số là null.

501
NULL LAYOUT
Một số phương thức của lớp trừu tượng Component dùng
để định vị và qui định kích thước của component khi đưa
chúng vào khung chứa trình bày theo kiểu kiểu tự do:
- public void setLocation(Point p)
- public void setSize(Dimension p)
- public void setBounds(Rectangle r)
Ví dụ:
- MyButton.setSize(new Dimension(20, 10));
- MyButton.setLocation(new Point(10, 10));
- MyButton.setBounds(10, 10, 20, 10);

502
NULL LAYOUT
import java.awt.*;
class NullLayoutDemo
{
public static void main(String args[])
{
Frame fr = new Frame("NullLayout Demo");
fr.setLayout(null);
Button buttOk = new Button("OK");
buttOk.setBounds(100, 150, 50, 30);
Button buttCancel = new Button("Cancel");
buttCancel.setBounds(200, 150, 50, 30);
Checkbox checkBut = new Checkbox("Check box", true);
checkBut.setBounds(100, 50, 100, 20);
List li = new List();
for (int i=0; i<5; i++)
{
li.add(Integer.toString(i));
}
li.setBounds(200, 50, 50, 50);
fr.add(buttOk);
fr.add(buttCancel);
//xem tiếp ở slide tiếp theo
503
NULL LAYOUT
fr.add(checkBut);
fr.add(li);
fr.setBounds(10, 10, 400, 200);
fr.setVisible(true);
}
}

504
• 4 bước Ghi file trong Java với Form giao
diện Swing
• Bước 1: Thiết kế form, tạo giao diện bằng
Java trong
• Bước 2: Viết mã xử lý giao diện
• Bước 3: Viết mã ghi file Java
• Bước 4: Thực thi chương trình và xem kết
quả
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW

Hey!
Coding
is easy!

END

You might also like