You are on page 1of 506

RKING HARD & SMART TODAY FOR A BETTER TOMORROW

Bài Học

Giới thiệu
Ngôn ngữ lập trình java
RKING 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
RKING 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”
RKING 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
RKING 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
RKING 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
RKING 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
RKING 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


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

Bài Học

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


RKING 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/in
dex.html
• Máy ảo JAVA (Java Virtual Machine)
Môi trường phát triển IDE (Integrated Development
Environment)

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

Notepad

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


thả o coding java:
RKING 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
RKING HARD & SMART TODAY FOR A BETTER TOMORROW

Netbean

Netbean
RKING 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
RKING HARD & SMART TODAY FOR A BETTER TOMORROW

Bài Học

Cài đặt JDK


RKING 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
RKING 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
RKING HARD & SMART TODAY FOR A BETTER TOMORROW

Kiểm tra cấu hình máy


Nhìn và o thấy 64bit
RKING 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


RKING 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


RKING 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


RKING 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
RKING 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:
RKING HARD & SMART TODAY FOR A BETTER TOMORROW

Cách tải JDK phù hợp

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


RKING 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:
RKING HARD & SMART TODAY FOR A BETTER TOMORROW

Cách cài đặt JDK

Tiếp tụ c chọ n Next


RKING 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


RKING 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\
RKING 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
RKING HARD & SMART TODAY FOR A BETTER TOMORROW

Cách cài đặt JDK

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


RKING HARD & SMART TODAY FOR A BETTER TOMORROW

Cách cài đặt JDK

Đã cà i đặ t xong JDK


RKING HARD & SMART TODAY FOR A BETTER TOMORROW

Cách cài đặt JDK

Nơi đã cà i đặ t:
RKING 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:


RKING 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:


RKING HARD & SMART TODAY FOR A BETTER TOMORROW

Bài Học

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


Java
RKING 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
RKING 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
RKING 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


RKING 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…


RKING 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.
RKING 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
RKING 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ả :


RKING 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


RKING 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…
RKING 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


RKING 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ả :


RKING 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:


RKING 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
RKING 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
RKING 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
RKING 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
RKING 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!");
}
}
RKING 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:


RKING 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:
RKING HARD & SMART TODAY FOR A BETTER TOMORROW

Cách sử dụng lệnh javac


 Để ý dò ng lệnh:
javac HelloWorld.java
RKING 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
RKING 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!
RKING HARD & SMART TODAY FOR A BETTER TOMORROW

Bài Học

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


Công cụ NetBeans
RKING 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
RKING HARD & SMART TODAY FOR A BETTER TOMORROW

Kiểm tra cấu hình máy


Nhìn và o thấy 64bit
RKING 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
RKING 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
RKING 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.
RKING 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
RKING 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
RKING 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.
RKING 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
RKING 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
RKING 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
RKING 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:


RKING HARD & SMART TODAY FOR A BETTER TOMORROW

Bài Học

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


màn hình
RKING 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
RKING 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.
RKING 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
RKING 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");
RKING 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
RKING HARD & SMART TODAY FOR A BETTER TOMORROW

Các ký tự đặc biệt


RKING HARD & SMART TODAY FOR A BETTER TOMORROW

Bài Học

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


trong Java
RKING 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
RKING 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í…
RKING HARD & SMART TODAY FOR A BETTER TOMORROW

Ghi chú 1 dòng

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


RKING HARD & SMART TODAY FOR A BETTER TOMORROW

Ghi chú nhiều dòng


RKING HARD & SMART TODAY FOR A BETTER TOMORROW

Ghi chú dạng Javadocs


RKING HARD & SMART TODAY FOR A BETTER TOMORROW

Ghi chú dạng Javadocs


RKING HARD & SMART TODAY FOR A BETTER TOMORROW

Bài Học

Kiểu dữ liệu trong Java


RKING 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
RKING HARD & SMART TODAY FOR A BETTER TOMORROW

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


4 nhóm – 8 kiểu
Kiểu luận lý boolean

Kiểu ký tự char byte

short
Kiểu cơ sở
Kiểu số nguyên
int

long
Kiểu số

float
Kiểu số thực

double
RKING 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


RKING HARD & SMART TODAY FOR A BETTER TOMORROW

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


RKING 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);
RKING HARD & SMART TODAY FOR A BETTER TOMORROW

Bài Học

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


RKING 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
RKING 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
RKING 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
RKING 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
RKING HARD & SMART TODAY FOR A BETTER TOMORROW

Bài Học

Các phép toán trong Java


RKING 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 --
RKING 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
RKING 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
RKING 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
RKING 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
RKING 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
RKING 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
RKING 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;
RKING 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 =, *=, /=, +=, -=
RKING HARD & SMART TODAY FOR A BETTER TOMORROW

Bài Học

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


với Scanner
RKING 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
RKING 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
RKING HARD & SMART TODAY FOR A BETTER TOMORROW

Cách import thư viện


 NetBeans sẽ tự độ ng import thư viện cho ta
RKING 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:


RKING 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();
RKING 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();
RKING 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();
RKING 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
RKING 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
RKING HARD & SMART TODAY FOR A BETTER TOMORROW

Cấu trúc if

if (<expression> )
{
<statement>;
}
RKING HARD & SMART TODAY FOR A BETTER TOMORROW

Cấu trúc if-else


Ví dụ 1
if (dtb >=5)
{
System.out.println (“Đậ u");
}
RKING HARD & SMART TODAY FOR A BETTER TOMORROW

Cấu trúc if-else

if (< expression > )


{
< statement 1>;
}
else
{
< statement 2>;
}
RKING 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");
}
RKING 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");
}
RKING 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”
RKING HARD & SMART TODAY FOR A BETTER TOMORROW

Bài Học

Cấu trúc switch


RKING 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ể
RKING 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;
}
RKING HARD & SMART TODAY FOR A BETTER TOMORROW

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


RKING 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;
}
RKING 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;
}
RKING HARD & SMART TODAY FOR A BETTER TOMORROW

Bài Học

Vòng lặp while


RKING 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


RKING 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
RKING 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
RKING HARD & SMART TODAY FOR A BETTER TOMORROW

Bài Học

Vòng lặp do..while


RKING 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
RKING 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.
RKING 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
RKING 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
RKING HARD & SMART TODAY FOR A BETTER TOMORROW

Bài Học

Vòng lặp for


RKING 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


RKING 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
RKING 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
RKING HARD & SMART TODAY FOR A BETTER TOMORROW

Bài Học

Khái niệm về mảng


RKING 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
RKING 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


RKING 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.
RKING 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
RKING 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
RKING 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[];
RKING 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];
RKING 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};
RKING HARD & SMART TODAY FOR A BETTER TOMORROW

Bài Học

Truy suất và
thao tác trên mảng
RKING 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ị
RKING 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ỉ số 0 1 2 3 4 5 6 7
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
RKING HARD & SMART TODAY FOR A BETTER TOMORROW

Cách thay đổi dữ liệu trên mảng


 M[i]= value

 M[3]=113
RKING 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]);
RKING 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);
RKING HARD & SMART TODAY FOR A BETTER TOMORROW

Bài Học

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


RKING 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
RKING 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
RKING 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
RKING HARD & SMART TODAY FOR A BETTER TOMORROW

Bài Học

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


RKING 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
RKING HARD & SMART TODAY FOR A BETTER TOMORROW

Bài Học

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


RKING HARD & SMART TODAY FOR A BETTER TOMORROW

Nội dung bài học


 Calendar
 SimpleDateFormat
RKING 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();
RKING 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));
RKING HARD & SMART TODAY FOR A BETTER TOMORROW

Bài Học

Thư viện toán học


RKING 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
RKING HARD & SMART TODAY FOR A BETTER TOMORROW

Bài Học

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


RKING 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….
RKING 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)
RKING 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.
RKING HARD & SMART TODAY FOR A BETTER TOMORROW

Bài Học

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


RKING HARD & SMART TODAY FOR A BETTER TOMORROW

Nội dung bài học


 StringBuilder
 StringTokenizer
RKING 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()
RKING 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
RKING 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
RKING 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
RKING 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());
RKING 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
RKING HARD & SMART TODAY FOR A BETTER TOMORROW

Bài Học

Giới thiệu chuỗi trong Java


RKING 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
RKING 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";
RKING 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
RKING 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


RKING HARD & SMART TODAY FOR A BETTER TOMORROW

Bài Học

Hàm tìm chuỗi


RKING HARD & SMART TODAY FOR A BETTER TOMORROW

Nội dung bài học


 indexOf
 lastIndexOf
 contains
RKING 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");
RKING 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");
RKING 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”))
RKING HARD & SMART TODAY FOR A BETTER TOMORROW

Bài Học

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


RKING 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
RKING 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
RKING HARD & SMART TODAY FOR A BETTER TOMORROW

Bài Học

Hàm đổi chuỗi


RKING HARD & SMART TODAY FOR A BETTER TOMORROW

Nội dung bài học


 replace, replaceFirst
RKING 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


RKING 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);
RKING HARD & SMART TODAY FOR A BETTER TOMORROW

Bài Học

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


dư thừa
RKING 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
RKING HARD & SMART TODAY FOR A BETTER TOMORROW

Bài Học

Hàm so sánh chuỗi


RKING HARD & SMART TODAY FOR A BETTER TOMORROW

Nội dung bài học


 compareTo, compareToIgnoreCase
RKING 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
RKING 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
RKING HARD & SMART TODAY FOR A BETTER TOMORROW

Bài Học

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


RKING 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
RKING 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);
RKING 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());
RKING 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());
RKING HARD & SMART TODAY FOR A BETTER TOMORROW

Bài Học

Cách tách chuỗi


RKING 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
RKING 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
RKING 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)
RKING HARD & SMART TODAY FOR A BETTER TOMORROW

Bài Học

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


RKING HARD & SMART TODAY FOR A BETTER TOMORROW

Nội dung bài học


 toUpper
 toLower
RKING HARD & SMART TODAY FOR A BETTER TOMORROW

toUpper

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

toLower

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

Bài Học

Lý do sử dụng collection
RKING 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
RKING 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
RKING 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ì???
RKING HARD & SMART TODAY FOR A BETTER TOMORROW

Bài Học

Cách sử dụng ArrayList


RKING 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).
RKING 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 ...
RKING 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
RKING 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);
}
RKING 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ử.
RKING 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ử.
RKING 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ó.
RKING 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; }
RKING 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


RKING 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]
*/
RKING HARD & SMART TODAY FOR A BETTER TOMORROW

Bài Học

Cách sử dụng HashMap


RKING 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.
RKING HARD & SMART TODAY FOR A BETTER TOMORROW

HashMap

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


● HashMap()
● HashMap(Collection c)
● HashMap(int capacity)
RKING 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
RKING 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);
RKING 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.
RKING 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<>();
}
RKING 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");
}
}
RKING HARD & SMART TODAY FOR A BETTER TOMORROW

Bài Học

Các khái niệm về


Hướng đối tượng
RKING 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
RKING 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.
RKING 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ý.
RKING 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.
RKING 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).
RKING 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
RKING 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
…
RKING 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
RKING 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ó .
RKING 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.
RKING 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
RKING 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.
RKING 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.
RKING 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:
RKING 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
RKING 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.
RKING 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)
RKING 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.
 .
RKING 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 đó.
RKING 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
RKING 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
RKING 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.
RKING HARD & SMART TODAY FOR A BETTER TOMORROW

Khái niệm Lớp và Đối tượng


 Tính kế thừ a:
Ví dụ :
RKING 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
RKING 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.
RKING HARD & SMART TODAY FOR A BETTER TOMORROW

Bài Học

Overriding Method
Overloading method
RKING 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.
RKING 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.
RKING 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.
RKING HARD & SMART TODAY FOR A BETTER TOMORROW

Bài Học

Overloading method
RKING 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
RKING 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
RKING HARD & SMART TODAY FOR A BETTER TOMORROW

Overloading Method

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

float tryMe(int x, float y)


{
return x*y;
}
RKING 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;
}
}
RKING 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.
RKING HARD & SMART TODAY FOR A BETTER TOMORROW

Bài Học

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


RKING 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
RKING 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 ‘_’.
RKING 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.
RKING 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 modifiers Data type
(phạm vi truy (kiểu dữ (tên của thuộc
tính)
xuất) liệu)
 Truy cập và gán giá trị cho các thuộc
tính
RKING 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
RKING 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.
RKING HARD & SMART TODAY FOR A BETTER TOMORROW
RKING 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ỉ
RKING HARD & SMART TODAY FOR A BETTER TOMORROW
RKING 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ớ đó
RKING 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);
}
}
RKING 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ố .
RKING 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;
}
}
RKING HARD & SMART TODAY FOR A BETTER TOMORROW

Quy tắc đặt tên Constructor


 Ví dụ :
SinhVien obama=new SinhVien();
RKING 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;
}
}
RKING HARD & SMART TODAY FOR A BETTER TOMORROW
RKING 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.
RKING 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;
}
RKING HARD & SMART TODAY FOR A BETTER TOMORROW

Getter/ setter

public static void main(String[] args) {


Student studentOne = new
Student();
studentOne.birthday = 1994;
studentOne.name = "John"; setter
studentOne.code = "S001";
getter
System.out.println("birthday: " + studentOne.birthday);
System.out.println("name: " + studentOne.name);
System.out.println("code: +
} " studentOne.code);
RKING 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;
}
}
RKING 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();
RKING 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:
RKING 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();
RKING 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);
RKING 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.
RKING HARD & SMART TODAY FOR A BETTER TOMORROW

Bài Học

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


RKING HARD & SMART TODAY FOR A BETTER TOMORROW

Nội dung bài học


 Service method
 Support method
RKING 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
RKING 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));
}
}
RKING HARD & SMART TODAY FOR A BETTER TOMORROW

Bài Học

Tham chiếu this


RKING 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
RKING 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ó
RKING 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;
}
}
RKING 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;
}
}
RKING 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;
}
}
RKING 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);
RKING HARD & SMART TODAY FOR A BETTER TOMORROW

Bài Học

Các thành phần static


RKING HARD & SMART TODAY FOR A BETTER TOMORROW

Nội dung bài học


 static và ý nghĩa sử dụ ng
RKING 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.
RKING 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;
}
}
RKING 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
RKING 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);
}
}
RKING 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);

}
RKING 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
RKING 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
RKING 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
RKING 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
RKING HARD & SMART TODAY FOR A BETTER TOMORROW
RKING 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ó
RKING 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.
RKING 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.
RKING 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.
RKING 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.
RKING HARD & SMART TODAY FOR A BETTER TOMORROW

Bài Học

Kỹ thuật viết
Kế thừa từ Class
RKING 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
RKING 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);
}
}
RKING 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
RKING 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ả.
RKING 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.
}
}
RKING HARD & SMART TODAY FOR A BETTER TOMORROW

Bài Học

Kỹ thuật viết
Kế thừa từ Interface
RKING 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
RKING 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
RKING 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 {


}
RKING 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));
}
}
RKING 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);
}
}
RKING HARD & SMART TODAY FOR A BETTER TOMORROW

Bài Học

Tính đa hình
RKING 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
RKING 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.
RKING 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();
RKING 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);
}
RKING 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
RKING 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
RKING 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
RKING 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;
}
}
RKING 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);
}
RKING HARD & SMART TODAY FOR A BETTER TOMORROW

Bài Học

Sử dụng enum trong Java


RKING 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
RKING 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.
RKING 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:
RKING 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;
}
}
RKING HARD & SMART TODAY FOR A BETTER TOMORROW

Bài Học

Alias

cơ chế gom rác tự động
RKING 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
RKING 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
RKING 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
RKING 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();
}
}
RKING 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
RKING HARD & SMART TODAY FOR A BETTER TOMORROW

Bài Học

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


(exception)
RKING 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
RKING 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
RKING 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
RKING 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
RKING HARD & SMART TODAY FOR A BETTER TOMORROW

Cách hành xử với lỗi


 Unchecked error
 Checked error
RKING HARD & SMART TODAY FOR A BETTER TOMORROW

Bài Học

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


RKING 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();
}
RKING HARD & SMART TODAY FOR A BETTER TOMORROW

Bài Học

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


RKING 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");
}
RKING HARD & SMART TODAY FOR A BETTER TOMORROW

Bài Học

Ý nghĩa của throw


RKING 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;
}
}
RKING HARD & SMART TODAY FOR A BETTER TOMORROW

Bài Học

Cách gỡ lỗi bằng


công cụ debug
RKING 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
RKING 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 đó :
RKING 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 đó :
RKING 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
RKING 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
RKING 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
RKING HARD & SMART TODAY FOR A BETTER TOMORROW

Cách debug từng dòng


 Ý nghĩa Cá c phím F5, F6, F8
RKING HARD & SMART TODAY FOR A BETTER TOMORROW

Cách xem giá trị trong khi debug


 Chọ n biếnchọ n Watch
RKING HARD & SMART TODAY FOR A BETTER TOMORROW

Cách xem giá trị trong khi debug


 Chọ n biếnchọ n Watch
RKING HARD & SMART TODAY FOR A BETTER TOMORROW

Bài Học

Luồng và tệp tin


RKING 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ự
RKING 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ớ .
RKING 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
RKING 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
RKING HARD & SMART TODAY FOR A BETTER TOMORROW
RKING HARD & SMART TODAY FOR A BETTER TOMORROW

Có 2 kiểu luồng trong Java


RKING HARD & SMART TODAY FOR A BETTER TOMORROW

Kiến trúc Input Stream (Luồng nhập dữ liệu)


RKING HARD & SMART TODAY FOR A BETTER TOMORROW

Kiến trúc Output Stream (Luồng xuất dữ liệu)


RKING HARD & SMART TODAY FOR A BETTER TOMORROW
RKING HARD & SMART TODAY FOR A BETTER TOMORROW
RKING 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


RKING 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).
RKING 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,…
RKING 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.
RKING HARD & SMART TODAY FOR A BETTER TOMORROW

Bài Học

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


RKING 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
RKING 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;
RKING 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();
RKING 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();
RKING HARD & SMART TODAY FOR A BETTER TOMORROW

Bài Học

Xử lý tập tin với


Serialize File
RKING 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
RKING 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;
}
}
RKING 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;
RKING 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();
RKING 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();
RKING 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
RKING 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
RKING 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.
RKING 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ó .
RKING 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.
RKING 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.
RKING 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
RKING HARD & SMART TODAY FOR A BETTER TOMORROW

Bài Học

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


Thread
RKING 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
RKING 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.
RKING HARD & SMART TODAY FOR A BETTER TOMORROW

Cách sử dụng đa tiến trình với Thread


RKING HARD & SMART TODAY FOR A BETTER TOMORROW

Bài Học

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


Runnable
RKING 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
RKING 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.
RKING HARD & SMART TODAY FOR A BETTER TOMORROW

Cách sử dụng đa tiến trình với Runnable


RKING 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
RKING 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
RKING 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
AWTEvent Container Panel Applet

Font Button Window Frame

FontMetrics Label Dialog FileDialog


TextField
Object Color TextComponent

TextArea
Graphics List

Component Choice

CheckBox

LayoutManager CheckBoxGroup

Canvas

MenuComponent MenuItem Menu

MenuBar
Scrollbar
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

Button Checkbox
Label

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
screen
x

screen height

MyWindow
MyWindow height

width

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
Panel(BorderLayout
))

TextField
TextField

Button
Button
12
12 Button
Button

Panel(GridLayout
Panel(GridLayout
))

Frame(BorderLayout
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

GV: Võ Tấn Dũng


rộng phụ thuộc vào các vùng xung quanh.
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 Dũng


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ả
RKING HARD & SMART TODAY FOR A BETTER TOMORROW

Hey!
Coding
is easy!

END

You might also like