chủ đề 1: giới thiệu nnlt java - hienlth.info · hành vi riêng của nó . cd1-cnpm -...
TRANSCRIPT
![Page 1: Chủ đề 1: Giới thiệu NNLT JAVA - hienlth.info · hành vi riêng của nó . CD1-CNPM - JAVA HIENLTH • Lớp là mộtkhuôn mẫu củađốitượng • Trong đóbao](https://reader030.vdocuments.net/reader030/viewer/2022041209/5dd0701506d54218544523ea/html5/thumbnails/1.jpg)
CD1-CNPM - JAVA HIENLTH
Chủ đề 1: Giới thiệu NNLT JAVA
![Page 2: Chủ đề 1: Giới thiệu NNLT JAVA - hienlth.info · hành vi riêng của nó . CD1-CNPM - JAVA HIENLTH • Lớp là mộtkhuôn mẫu củađốitượng • Trong đóbao](https://reader030.vdocuments.net/reader030/viewer/2022041209/5dd0701506d54218544523ea/html5/thumbnails/2.jpg)
CD1-CNPM - JAVA HIENLTH
Nội dung
•Lịch sử ra đời Java
•Đặc điểm NNLT Java
•Java Core API
•Lập trình cơ bản với Java
•Lập trình Hướng đối tượng với Java
•Luồng nhập xuất
•Xử lý ngoại lệ
![Page 3: Chủ đề 1: Giới thiệu NNLT JAVA - hienlth.info · hành vi riêng của nó . CD1-CNPM - JAVA HIENLTH • Lớp là mộtkhuôn mẫu củađốitượng • Trong đóbao](https://reader030.vdocuments.net/reader030/viewer/2022041209/5dd0701506d54218544523ea/html5/thumbnails/3.jpg)
CD1-CNPM - JAVA HIENLTH
Lịch sử phát triển của Java
• Năm 1991, Java được xây dựng
ở Sun Microsystems bởi James
Gosling (CTO of Sun
MicroSystem).
• Ban đầu có tên là Oak, sau đó
đổi là Java vào năm 1995
• Năm 2010, Oracle mua lại Sun
Microsystems
![Page 4: Chủ đề 1: Giới thiệu NNLT JAVA - hienlth.info · hành vi riêng của nó . CD1-CNPM - JAVA HIENLTH • Lớp là mộtkhuôn mẫu củađốitượng • Trong đóbao](https://reader030.vdocuments.net/reader030/viewer/2022041209/5dd0701506d54218544523ea/html5/thumbnails/4.jpg)
CD1-CNPM - JAVA HIENLTH
Java Platform
![Page 5: Chủ đề 1: Giới thiệu NNLT JAVA - hienlth.info · hành vi riêng của nó . CD1-CNPM - JAVA HIENLTH • Lớp là mộtkhuôn mẫu củađốitượng • Trong đóbao](https://reader030.vdocuments.net/reader030/viewer/2022041209/5dd0701506d54218544523ea/html5/thumbnails/5.jpg)
CD1-CNPM - JAVA HIENLTH
Java làm việc như thế nào?
1. Chương trình nguồn(source code) được viếtbằng ngôn ngữ Java
2. Các chương trình đượcbiên dịch thành các file dạng lớp (*. class)
3. Các file .class được nạpvào bộ nhớ và thực thibởi máy ảo Java (JVM)
Hello.java
Java
Compiler
Hello.class
Run-Time Environment
Java
Virtual
Machine
Object.class String.class
Java API class files
![Page 6: Chủ đề 1: Giới thiệu NNLT JAVA - hienlth.info · hành vi riêng của nó . CD1-CNPM - JAVA HIENLTH • Lớp là mộtkhuôn mẫu củađốitượng • Trong đóbao](https://reader030.vdocuments.net/reader030/viewer/2022041209/5dd0701506d54218544523ea/html5/thumbnails/6.jpg)
CD1-CNPM - JAVA HIENLTH
• Khác với ngôn ngữ lập trình khác, thay vì biên dịch mã
nguồn thành mã máy, Java được thiết kế biên dịch mã
nguồn thành bytecode
• Bytecode sau đó được môi trường thực thi chạy
Bytecode
![Page 7: Chủ đề 1: Giới thiệu NNLT JAVA - hienlth.info · hành vi riêng của nó . CD1-CNPM - JAVA HIENLTH • Lớp là mộtkhuôn mẫu củađốitượng • Trong đóbao](https://reader030.vdocuments.net/reader030/viewer/2022041209/5dd0701506d54218544523ea/html5/thumbnails/7.jpg)
CD1-CNPM - JAVA HIENLTH
JVM và Java “bytecode”
• Chương trình Java không biên dịch mã nguồn thành ngôn ngữ máy đíchmà biên dịch thành file dạng “bytecode” – file *.class
• Mỗi HĐH sẽ có thể hiện riêng của máy ảo Java – JVM
• Mã bytecode làm việc với JVM và JVM làm việc với HĐH
![Page 8: Chủ đề 1: Giới thiệu NNLT JAVA - hienlth.info · hành vi riêng của nó . CD1-CNPM - JAVA HIENLTH • Lớp là mộtkhuôn mẫu củađốitượng • Trong đóbao](https://reader030.vdocuments.net/reader030/viewer/2022041209/5dd0701506d54218544523ea/html5/thumbnails/8.jpg)
CD1-CNPM - JAVA HIENLTH
• Hướng đối tượng
• Chạy trên mọi nền tảng
• Bảo mật
• Mạnh mẽ
• Phân tán
• Đa nhiệm, đa luồng
Ngôn ngữ lập trình Java
![Page 9: Chủ đề 1: Giới thiệu NNLT JAVA - hienlth.info · hành vi riêng của nó . CD1-CNPM - JAVA HIENLTH • Lớp là mộtkhuôn mẫu củađốitượng • Trong đóbao](https://reader030.vdocuments.net/reader030/viewer/2022041209/5dd0701506d54218544523ea/html5/thumbnails/9.jpg)
CD1-CNPM - JAVA HIENLTH
• JDK và các công cụ
(javac, java)
• Cấu hình JDK (path,class
path)
JDK
![Page 10: Chủ đề 1: Giới thiệu NNLT JAVA - hienlth.info · hành vi riêng của nó . CD1-CNPM - JAVA HIENLTH • Lớp là mộtkhuôn mẫu củađốitượng • Trong đóbao](https://reader030.vdocuments.net/reader030/viewer/2022041209/5dd0701506d54218544523ea/html5/thumbnails/10.jpg)
CD1-CNPM - JAVA HIENLTH
javac [option] sourcejavac (java
compiler)
java [option] classname[arguments]Java (java
interpreter)
JDK và các công cụ liên quan
![Page 11: Chủ đề 1: Giới thiệu NNLT JAVA - hienlth.info · hành vi riêng của nó . CD1-CNPM - JAVA HIENLTH • Lớp là mộtkhuôn mẫu củađốitượng • Trong đóbao](https://reader030.vdocuments.net/reader030/viewer/2022041209/5dd0701506d54218544523ea/html5/thumbnails/11.jpg)
CD1-CNPM - JAVA HIENLTH
Java IDE
•Eclipse, NetBeans, IntelliJ IDEA, …
![Page 12: Chủ đề 1: Giới thiệu NNLT JAVA - hienlth.info · hành vi riêng của nó . CD1-CNPM - JAVA HIENLTH • Lớp là mộtkhuôn mẫu củađốitượng • Trong đóbao](https://reader030.vdocuments.net/reader030/viewer/2022041209/5dd0701506d54218544523ea/html5/thumbnails/12.jpg)
CD1-CNPM - JAVA HIENLTH
Đối tượng
• Biểu diễn 1 đối tượng trong thế giới thực
• Mỗi đối tượng được đặc trưng bởi các thuộc tính và các
hành vi riêng của nó
![Page 13: Chủ đề 1: Giới thiệu NNLT JAVA - hienlth.info · hành vi riêng của nó . CD1-CNPM - JAVA HIENLTH • Lớp là mộtkhuôn mẫu củađốitượng • Trong đóbao](https://reader030.vdocuments.net/reader030/viewer/2022041209/5dd0701506d54218544523ea/html5/thumbnails/13.jpg)
CD1-CNPM - JAVA HIENLTH
• Lớp là một khuôn mẫu
của đối tượng
• Trong đó bao gồm các
thuộc tính của đối tượng
và các phương thức tác
động lên các thuộc tính
Lớp
![Page 14: Chủ đề 1: Giới thiệu NNLT JAVA - hienlth.info · hành vi riêng của nó . CD1-CNPM - JAVA HIENLTH • Lớp là mộtkhuôn mẫu củađốitượng • Trong đóbao](https://reader030.vdocuments.net/reader030/viewer/2022041209/5dd0701506d54218544523ea/html5/thumbnails/14.jpg)
CD1-CNPM - JAVA HIENLTH
Chương trình Java đầu tiên
• Viết ứng dụng tính diện tích hình chữ nhật (rectangle).
• Ứng dụng có một đối tượng – hình chữ nhật1. Nó là cái gì – Là hình chữ nhật
2. Nó có thể làm được điều gì? – Có thể tính diện tích
3. Để làm việc đó cần những dữ liệu gì? – Chiều dài và chiều rộng
• Tạo ra 2 lớp1. Lớp định nghĩa hình chữ nhật với 2 thuộc tính và 1 phương thức
2. Lớp chứa phương thức main để thực thi (báo cho JVM biết bắt đầu chương trình)
![Page 15: Chủ đề 1: Giới thiệu NNLT JAVA - hienlth.info · hành vi riêng của nó . CD1-CNPM - JAVA HIENLTH • Lớp là mộtkhuôn mẫu củađốitượng • Trong đóbao](https://reader030.vdocuments.net/reader030/viewer/2022041209/5dd0701506d54218544523ea/html5/thumbnails/15.jpg)
CD1-CNPM - JAVA HIENLTH
Rectangle class
![Page 16: Chủ đề 1: Giới thiệu NNLT JAVA - hienlth.info · hành vi riêng của nó . CD1-CNPM - JAVA HIENLTH • Lớp là mộtkhuôn mẫu củađốitượng • Trong đóbao](https://reader030.vdocuments.net/reader030/viewer/2022041209/5dd0701506d54218544523ea/html5/thumbnails/16.jpg)
CD1-CNPM - JAVA HIENLTH
RectangleDemo
![Page 17: Chủ đề 1: Giới thiệu NNLT JAVA - hienlth.info · hành vi riêng của nó . CD1-CNPM - JAVA HIENLTH • Lớp là mộtkhuôn mẫu củađốitượng • Trong đóbao](https://reader030.vdocuments.net/reader030/viewer/2022041209/5dd0701506d54218544523ea/html5/thumbnails/17.jpg)
CD1-CNPM - JAVA HIENLTH
Tên của lớp
1. Sử dụng quy tắc đặt tên
2. Luôn viết hoa chữ cái đầu tiên
3. Dùng danh từ để đặt tên
Dữ liệu thành phần
• Là những dữ liệu cần
phải cóKhởi dựng
• Định nghĩa cách
thức thể hiện 1 đối
tượng
• Có tên giống tên
lớp
• Giống như hàm
trong C nhưng
không có kiểu dữ
liệu trả về
Các phương thức (method)
• Những hành vi có thể
thực hiện
1. Như hàm trong C
2. Sử dụng động từ để đặt tên
3. Luôn viết thường chữ cái đầu
tiên
Phân tích lớp Rectangle
![Page 18: Chủ đề 1: Giới thiệu NNLT JAVA - hienlth.info · hành vi riêng của nó . CD1-CNPM - JAVA HIENLTH • Lớp là mộtkhuôn mẫu củađốitượng • Trong đóbao](https://reader030.vdocuments.net/reader030/viewer/2022041209/5dd0701506d54218544523ea/html5/thumbnails/18.jpg)
CD1-CNPM - JAVA HIENLTH
Phân tích lớp RectangleDemo
• Để thực thi chương trình, trình ứng dụng Java (Java application) bắt buộc phải có 1 lớp mà trong đó địnhnghĩa phương thức main.
• Phương thức main() trong lớp public được triệu hồi bởiJVM để bắt đầu thực thi ứng dụng.
![Page 19: Chủ đề 1: Giới thiệu NNLT JAVA - hienlth.info · hành vi riêng của nó . CD1-CNPM - JAVA HIENLTH • Lớp là mộtkhuôn mẫu củađốitượng • Trong đóbao](https://reader030.vdocuments.net/reader030/viewer/2022041209/5dd0701506d54218544523ea/html5/thumbnails/19.jpg)
CD1-CNPM - JAVA HIENLTH
Tạo đối tượng
• Đối tượng phải được tạo trước khi được sữ dụngtrong chương trình.
1. Khai báo 1 biến để lưu giữ tham chiếu đến đối tượng (đốitượng chỉ có thể được thao tác thông qua tham chiếu)
2. Tạo đối tượng: bằng cách sử dụng toán tử new (ngầm địnhgọi đến hàm khởi tạo – hàm dựng)
![Page 20: Chủ đề 1: Giới thiệu NNLT JAVA - hienlth.info · hành vi riêng của nó . CD1-CNPM - JAVA HIENLTH • Lớp là mộtkhuôn mẫu củađốitượng • Trong đóbao](https://reader030.vdocuments.net/reader030/viewer/2022041209/5dd0701506d54218544523ea/html5/thumbnails/20.jpg)
CD1-CNPM - JAVA HIENLTH
Triệu hồi phương thức
• Sử dụng toán tử dấu chấm (the '.' operator)
• Cú pháp (Syntax):• <tên biến đối tượng tham chiếu>‘.’<tên phương thức được gọi>
![Page 21: Chủ đề 1: Giới thiệu NNLT JAVA - hienlth.info · hành vi riêng của nó . CD1-CNPM - JAVA HIENLTH • Lớp là mộtkhuôn mẫu củađốitượng • Trong đóbao](https://reader030.vdocuments.net/reader030/viewer/2022041209/5dd0701506d54218544523ea/html5/thumbnails/21.jpg)
CD1-CNPM - JAVA HIENLTH
Việc sử dụng toán tử dấu
•Triệu hồi (gọi) phương thức (method)
•Truy xuất đến các dữ liệu thành phần (data
member)
•Được điều khiển bởi mức truy xuất của các
thành phần
![Page 22: Chủ đề 1: Giới thiệu NNLT JAVA - hienlth.info · hành vi riêng của nó . CD1-CNPM - JAVA HIENLTH • Lớp là mộtkhuôn mẫu củađốitượng • Trong đóbao](https://reader030.vdocuments.net/reader030/viewer/2022041209/5dd0701506d54218544523ea/html5/thumbnails/22.jpg)
CD1-CNPM - JAVA HIENLTH
Từ khóa trong JAVA
•Từ khóa cho các kiểu dữ liệu cơ bản : byte, short, int, long, float, double, char, boolean
•Từ khóa cho phát biểu lặp: do, while, for, break, continue
•Từ khóa cho phát biểu rẽ nhánh: if, else, switch, case, default, break
•Từ khóa đặc tả đặc tính một method: private, public, protected, final, static, abstract, synchronized, volatile..
•Literal value: true, false, null
•Từ khóa liên quan đến method: return, void
•Từ khoá liên quan đến package: package, import
![Page 23: Chủ đề 1: Giới thiệu NNLT JAVA - hienlth.info · hành vi riêng của nó . CD1-CNPM - JAVA HIENLTH • Lớp là mộtkhuôn mẫu củađốitượng • Trong đóbao](https://reader030.vdocuments.net/reader030/viewer/2022041209/5dd0701506d54218544523ea/html5/thumbnails/23.jpg)
CD1-CNPM - JAVA HIENLTH
Từ khóa trong Java(tt)
•Từ khóa cho việc quản lý lỗi: try, catch, finally,
throw, throws
•Từ khóa liên quan đến đối tượng: new, extends,
implements, class, instanceof, this, super
•Cách đặt tên (identifier):
•Bắt đầu bằng ký tự, ký tự gạch dưới (underscore
‘_’ ) hay ký tự ‘$’
•Sau đó là các ký tự ký số hay ‘_’, ‘$’ , không dùng
các ký tự khác như: khoảng trống, ký hiệu phép
toán
•Tên có tính chất case-sensitive
![Page 24: Chủ đề 1: Giới thiệu NNLT JAVA - hienlth.info · hành vi riêng của nó . CD1-CNPM - JAVA HIENLTH • Lớp là mộtkhuôn mẫu củađốitượng • Trong đóbao](https://reader030.vdocuments.net/reader030/viewer/2022041209/5dd0701506d54218544523ea/html5/thumbnails/24.jpg)
CD1-CNPM - JAVA HIENLTH
• Biến là một vị trí
trong bộ nhớ máy
tính, lưu trữ giá trị
và từ đó có thể
truy xuất giá trị đó
sau này
Biến
![Page 25: Chủ đề 1: Giới thiệu NNLT JAVA - hienlth.info · hành vi riêng của nó . CD1-CNPM - JAVA HIENLTH • Lớp là mộtkhuôn mẫu củađốitượng • Trong đóbao](https://reader030.vdocuments.net/reader030/viewer/2022041209/5dd0701506d54218544523ea/html5/thumbnails/25.jpg)
CD1-CNPM - JAVA HIENLTH
• Tên của biến, hàm
hoặc đối tượng người
dùng định nghĩa
• Tên biến phải bắt đầu
bằng ký tự, ký tự $
hoặc gạch dưới
• Ký tự tiếp theo là ký
tự, số, ký tự $ hoặc
gạch dưới
Định danh
![Page 26: Chủ đề 1: Giới thiệu NNLT JAVA - hienlth.info · hành vi riêng của nó . CD1-CNPM - JAVA HIENLTH • Lớp là mộtkhuôn mẫu củađốitượng • Trong đóbao](https://reader030.vdocuments.net/reader030/viewer/2022041209/5dd0701506d54218544523ea/html5/thumbnails/26.jpg)
CD1-CNPM - JAVA HIENLTH
• Tất cả toán tử được trình
biên dịch kiểm tra kiểu
để đảm bảo tính tương
thích về kiểu
• Có 8 kiểu dữ liệu nguyên
thuỷ cơ bản
Kiểu dữ liệu
![Page 27: Chủ đề 1: Giới thiệu NNLT JAVA - hienlth.info · hành vi riêng của nó . CD1-CNPM - JAVA HIENLTH • Lớp là mộtkhuôn mẫu củađốitượng • Trong đóbao](https://reader030.vdocuments.net/reader030/viewer/2022041209/5dd0701506d54218544523ea/html5/thumbnails/27.jpg)
CD1-CNPM - JAVA HIENLTH
Kiểu số nguyên
• Java định nghĩa 4 kiểu số nguyên byte, short, int và long
• Các kiểu số nguyên đều có số âm và số dương
• Java không hỗ trợ các kiểu số nguyên mà chỉ có số dương
![Page 28: Chủ đề 1: Giới thiệu NNLT JAVA - hienlth.info · hành vi riêng của nó . CD1-CNPM - JAVA HIENLTH • Lớp là mộtkhuôn mẫu củađốitượng • Trong đóbao](https://reader030.vdocuments.net/reader030/viewer/2022041209/5dd0701506d54218544523ea/html5/thumbnails/28.jpg)
CD1-CNPM - JAVA HIENLTH
Kiểu số thực
• Có hai kiểu số thực: float và double
• Kiểu float có kích thước 32 bit, double có kích thước 64 bit
![Page 29: Chủ đề 1: Giới thiệu NNLT JAVA - hienlth.info · hành vi riêng của nó . CD1-CNPM - JAVA HIENLTH • Lớp là mộtkhuôn mẫu củađốitượng • Trong đóbao](https://reader030.vdocuments.net/reader030/viewer/2022041209/5dd0701506d54218544523ea/html5/thumbnails/29.jpg)
CD1-CNPM - JAVA HIENLTH
Kiểu ký tự
Java sử dụng Unicode
Kiểu char là kiểu 16-bit không dấu có giá trị từ 0 đến 65536
![Page 30: Chủ đề 1: Giới thiệu NNLT JAVA - hienlth.info · hành vi riêng của nó . CD1-CNPM - JAVA HIENLTH • Lớp là mộtkhuôn mẫu củađốitượng • Trong đóbao](https://reader030.vdocuments.net/reader030/viewer/2022041209/5dd0701506d54218544523ea/html5/thumbnails/30.jpg)
CD1-CNPM - JAVA HIENLTH
Kiểu Boolean
Biến kiểu boolean chỉ có một trong hai giá trị true và false
![Page 31: Chủ đề 1: Giới thiệu NNLT JAVA - hienlth.info · hành vi riêng của nó . CD1-CNPM - JAVA HIENLTH • Lớp là mộtkhuôn mẫu củađốitượng • Trong đóbao](https://reader030.vdocuments.net/reader030/viewer/2022041209/5dd0701506d54218544523ea/html5/thumbnails/31.jpg)
CD1-CNPM - JAVA HIENLTH
Ví dụ
Dùng các ký tự đặc tả việc buộc phải xem xét trị thuộc 1 kiểu nào đó: i, I, l , L, f, F, d, D
nhưng L thường dùng thay cho l vì sợ nhầm với 1.
178 int (default) 45.62 double (default)
178L long 44.21f float
11.19e8 double (default)
‘z’ char , hằng ký tự để trong cặp nháy đơn (single quote character)
![Page 32: Chủ đề 1: Giới thiệu NNLT JAVA - hienlth.info · hành vi riêng của nó . CD1-CNPM - JAVA HIENLTH • Lớp là mộtkhuôn mẫu củađốitượng • Trong đóbao](https://reader030.vdocuments.net/reader030/viewer/2022041209/5dd0701506d54218544523ea/html5/thumbnails/32.jpg)
CD1-CNPM - JAVA HIENLTH
Hằng số (literals)
Hằng số có thể có kiểu là
một trong các kiểu nguyên
thuỷ
![Page 33: Chủ đề 1: Giới thiệu NNLT JAVA - hienlth.info · hành vi riêng của nó . CD1-CNPM - JAVA HIENLTH • Lớp là mộtkhuôn mẫu củađốitượng • Trong đóbao](https://reader030.vdocuments.net/reader030/viewer/2022041209/5dd0701506d54218544523ea/html5/thumbnails/33.jpg)
CD1-CNPM - JAVA HIENLTH
int i = 3;Kiểu int
long l = 12L;Kiểu long
Hằng số (literals)
double d = 10.19F;Kiểu
double
![Page 34: Chủ đề 1: Giới thiệu NNLT JAVA - hienlth.info · hành vi riêng của nó . CD1-CNPM - JAVA HIENLTH • Lớp là mộtkhuôn mẫu củađốitượng • Trong đóbao](https://reader030.vdocuments.net/reader030/viewer/2022041209/5dd0701506d54218544523ea/html5/thumbnails/34.jpg)
CD1-CNPM - JAVA HIENLTH
Ký tự đặc biệt (escape sequence)
• Một số ký tự như dấu nháy đơn, nháy kép có ý nghĩa đặc
biệt trong java nên không thể sử dụng trực tiếp
• Java cung cấp một số ký tự đặc biệt để thay thế cho các ký
tự đặc biệt
![Page 35: Chủ đề 1: Giới thiệu NNLT JAVA - hienlth.info · hành vi riêng của nó . CD1-CNPM - JAVA HIENLTH • Lớp là mộtkhuôn mẫu củađốitượng • Trong đóbao](https://reader030.vdocuments.net/reader030/viewer/2022041209/5dd0701506d54218544523ea/html5/thumbnails/35.jpg)
CD1-CNPM - JAVA HIENLTH
Khởi tạo giá trị cho biến
trước khi sử dụng biến
Biến có thể khởi tạo động
khi được gán giá trị trong
biểu thức
Biến
![Page 36: Chủ đề 1: Giới thiệu NNLT JAVA - hienlth.info · hành vi riêng của nó . CD1-CNPM - JAVA HIENLTH • Lớp là mộtkhuôn mẫu củađốitượng • Trong đóbao](https://reader030.vdocuments.net/reader030/viewer/2022041209/5dd0701506d54218544523ea/html5/thumbnails/36.jpg)
CD1-CNPM - JAVA HIENLTH
Phạm vi và vòng đời của biến
•Biến có thể khai báo trong các khối lệnh (block)
•Biến được khai báo trong khối lệnh sẽ không
thể truy cập ở ngoài khối lệnh đó
![Page 37: Chủ đề 1: Giới thiệu NNLT JAVA - hienlth.info · hành vi riêng của nó . CD1-CNPM - JAVA HIENLTH • Lớp là mộtkhuôn mẫu củađốitượng • Trong đóbao](https://reader030.vdocuments.net/reader030/viewer/2022041209/5dd0701506d54218544523ea/html5/thumbnails/37.jpg)
CD1-CNPM - JAVA HIENLTH
Toán tử
•Toán tử là các ký hiệu để thực hiện các thao tác
trên các toán hạng
•Bao gồm các toán tử số học, bit, quan hệ, logic,
và các toán tử khác
![Page 38: Chủ đề 1: Giới thiệu NNLT JAVA - hienlth.info · hành vi riêng của nó . CD1-CNPM - JAVA HIENLTH • Lớp là mộtkhuôn mẫu củađốitượng • Trong đóbao](https://reader030.vdocuments.net/reader030/viewer/2022041209/5dd0701506d54218544523ea/html5/thumbnails/38.jpg)
CD1-CNPM - JAVA HIENLTH
Chuyển đổi kiểu khi khởi tạo giá trị
•Giá trị của phần tử bên phải được chuyển đổi
thành kiểu của phần tử bên trái
![Page 39: Chủ đề 1: Giới thiệu NNLT JAVA - hienlth.info · hành vi riêng của nó . CD1-CNPM - JAVA HIENLTH • Lớp là mộtkhuôn mẫu củađốitượng • Trong đóbao](https://reader030.vdocuments.net/reader030/viewer/2022041209/5dd0701506d54218544523ea/html5/thumbnails/39.jpg)
CD1-CNPM - JAVA HIENLTH
Chuyển đổi kiểu tự động
•Hai kiểu tương thích với nhau
•Kiểu của phần tử bên phải biển thức lớn hơn
kiểu của phần tử bên trái
![Page 40: Chủ đề 1: Giới thiệu NNLT JAVA - hienlth.info · hành vi riêng của nó . CD1-CNPM - JAVA HIENLTH • Lớp là mộtkhuôn mẫu củađốitượng • Trong đóbao](https://reader030.vdocuments.net/reader030/viewer/2022041209/5dd0701506d54218544523ea/html5/thumbnails/40.jpg)
CD1-CNPM - JAVA HIENLTH
Chuyển đổi kiểu ép buộc
•Kiểu của phần tử bên phải biển thức nhỏ hơn
kiểu của phần tử bên trái
![Page 41: Chủ đề 1: Giới thiệu NNLT JAVA - hienlth.info · hành vi riêng của nó . CD1-CNPM - JAVA HIENLTH • Lớp là mộtkhuôn mẫu củađốitượng • Trong đóbao](https://reader030.vdocuments.net/reader030/viewer/2022041209/5dd0701506d54218544523ea/html5/thumbnails/41.jpg)
CD1-CNPM - JAVA HIENLTH
java.lang package
• Gói cơ bản của ngôn ngữ java (language)
• Tự động chèn chương trình
• Chứa các Lớp cơ bản hỗ trợ cho lập trình trong Java
• Lớp Math chứa các phương thức tĩnh (static) hỗ trợ
cho việc tính toán số học
![Page 42: Chủ đề 1: Giới thiệu NNLT JAVA - hienlth.info · hành vi riêng của nó . CD1-CNPM - JAVA HIENLTH • Lớp là mộtkhuôn mẫu củađốitượng • Trong đóbao](https://reader030.vdocuments.net/reader030/viewer/2022041209/5dd0701506d54218544523ea/html5/thumbnails/42.jpg)
CD1-CNPM - JAVA HIENLTH
java.lange package(tt)
• Một số hàm toán học (Lưu ý cách dùng hàm toán: Math.TênHàm(thamSố)abs(TrịSố) : lấy trị tuyệt đối
int n= -5, m ; m = Math.abs(n); // m=5
• Hàm ceil(x) Số tròn lên <=x (trần)
Math.ceil(8.02) 9.0 Math.ceil(-1.3) -1.0
Math.ceil(100) 100.0
• Hàm floor(x) làm tròn xuống (sàn)
Math.floor( -5.63 ) -6.0 Math.ceil(100) 100.0
• Hàm max(x,y) Trị lớn trong 2 số
• Hàm min(x,y)
• Hàm random() trả về 1 số ngẫu nhiên từ 0.0 đến 1.0
• Hàm round (sốthực) Math.round(34.5) 35
![Page 43: Chủ đề 1: Giới thiệu NNLT JAVA - hienlth.info · hành vi riêng của nó . CD1-CNPM - JAVA HIENLTH • Lớp là mộtkhuôn mẫu củađốitượng • Trong đóbao](https://reader030.vdocuments.net/reader030/viewer/2022041209/5dd0701506d54218544523ea/html5/thumbnails/43.jpg)
CD1-CNPM - JAVA HIENLTH
Cấu trúc điều khiển – Rẽ nhánh
•Cấu trúc if
if (Condition)
{
Statements;
}
else
{
Statement;
}
• Cấu trúc switch
switch (Expression)
{
case Cons1:
Statements; break;
case Cons2:
Statements; break;
. . .
default : Statements;
}
![Page 44: Chủ đề 1: Giới thiệu NNLT JAVA - hienlth.info · hành vi riêng của nó . CD1-CNPM - JAVA HIENLTH • Lớp là mộtkhuôn mẫu củađốitượng • Trong đóbao](https://reader030.vdocuments.net/reader030/viewer/2022041209/5dd0701506d54218544523ea/html5/thumbnails/44.jpg)
CD1-CNPM - JAVA HIENLTH
Cấu trúc điều khiển – Lặp
while (condition)
{
Statements;
}
do
{
Statements;
}
while (condition);
for ( varInit ; Condition ; Statements)
{
Statements1;
}
Cắt vòng lặp: break [ label_name];
Bỏ qua 1 lần lặp : continue;
![Page 45: Chủ đề 1: Giới thiệu NNLT JAVA - hienlth.info · hành vi riêng của nó . CD1-CNPM - JAVA HIENLTH • Lớp là mộtkhuôn mẫu củađốitượng • Trong đóbao](https://reader030.vdocuments.net/reader030/viewer/2022041209/5dd0701506d54218544523ea/html5/thumbnails/45.jpg)
CD1-CNPM - JAVA HIENLTH
Mảng – Array
• Mảng= Nhóm trị cùng kiểu, kề nhau, cùng tên gọi, truy xuất phần tử bằng chỉ số đi từ 0
• Định nghĩa có chỉ định số phần tử (size
char ch[] = new char [5];
• Khai báo và khởi tạo
int a[] = { 1,4,2,7,8}; // hoặc
int [] a = { 1,4,2,7,8};
• Phần tử được tham khảo qua chì số bắt đầu từ 0
ch[0] ch[1] ch[2] ch[3] ch[4]
• Chỉ khai báo: không chỉ định size : long a[];
• Khi sử dụng phải cấp bộ nhớ: a= new long [20];
• Trị mặc định : Toán tử new sẽ xóa bộ nhớ, các bit = 0)
![Page 46: Chủ đề 1: Giới thiệu NNLT JAVA - hienlth.info · hành vi riêng của nó . CD1-CNPM - JAVA HIENLTH • Lớp là mộtkhuôn mẫu củađốitượng • Trong đóbao](https://reader030.vdocuments.net/reader030/viewer/2022041209/5dd0701506d54218544523ea/html5/thumbnails/46.jpg)
CD1-CNPM - JAVA HIENLTH
Mảng 1 chiều - minh họa
// file ArrayDemo.java
import java.io.*;
class ArrayDemo
{
public static void main(String args[])
{ int a1[] = { 1, 2,3,4,5};
int a2[];
a2 = new int [5];
int i;
for (i=0;i<5;++i) a2[i] = 2*a1[i];
long S= 0;
for (i=0;i<5;++i) S+= a1[i] +a2[i];
System.out.print("Sum of 2 arrays:");
System.out.println(S);
}
}
Kết qủa:
Sum of 2
arrays:45
Press any key to
continue...
![Page 47: Chủ đề 1: Giới thiệu NNLT JAVA - hienlth.info · hành vi riêng của nó . CD1-CNPM - JAVA HIENLTH • Lớp là mộtkhuôn mẫu củađốitượng • Trong đóbao](https://reader030.vdocuments.net/reader030/viewer/2022041209/5dd0701506d54218544523ea/html5/thumbnails/47.jpg)
CD1-CNPM - JAVA HIENLTH
Mảng 2 chiều - Minh họaMẫu CT Java
![Page 48: Chủ đề 1: Giới thiệu NNLT JAVA - hienlth.info · hành vi riêng của nó . CD1-CNPM - JAVA HIENLTH • Lớp là mộtkhuôn mẫu củađốitượng • Trong đóbao](https://reader030.vdocuments.net/reader030/viewer/2022041209/5dd0701506d54218544523ea/html5/thumbnails/48.jpg)
CD1-CNPM - JAVA HIENLTH
Nhập xuất dữ liệu.
• Nhập xuất dữ liệu là tác vụ mức hệ thống• Gói java.io chứa các lớp cho việc xuất nhập.• Cần tham khảo gói này.• Java cung cấp class System mô tả hệ thống• System.out là đối tượng xuất mặc định (màn hình)• System.in là đối tượng nhập mặc định (bàn phím)
Methods xuất dữ liệu ra màn hình: System.out.print(Dữ liệu xuất);System.out.println(Dữ liệu xuất);
Dữ liệu xuất có thể là : ký tự, số, chuỗi,…
![Page 49: Chủ đề 1: Giới thiệu NNLT JAVA - hienlth.info · hành vi riêng của nó . CD1-CNPM - JAVA HIENLTH • Lớp là mộtkhuôn mẫu củađốitượng • Trong đóbao](https://reader030.vdocuments.net/reader030/viewer/2022041209/5dd0701506d54218544523ea/html5/thumbnails/49.jpg)
CD1-CNPM - JAVA HIENLTH
Đặc tả định dạng
•Định dạng thông tin xuất ra trên màn hình.
•Sử dụng:
• printf(String format, Object... args)
![Page 50: Chủ đề 1: Giới thiệu NNLT JAVA - hienlth.info · hành vi riêng của nó . CD1-CNPM - JAVA HIENLTH • Lớp là mộtkhuôn mẫu củađốitượng • Trong đóbao](https://reader030.vdocuments.net/reader030/viewer/2022041209/5dd0701506d54218544523ea/html5/thumbnails/50.jpg)
CD1-CNPM - JAVA HIENLTH
Ví dụ về đặc tả định dạng
![Page 51: Chủ đề 1: Giới thiệu NNLT JAVA - hienlth.info · hành vi riêng của nó . CD1-CNPM - JAVA HIENLTH • Lớp là mộtkhuôn mẫu củađốitượng • Trong đóbao](https://reader030.vdocuments.net/reader030/viewer/2022041209/5dd0701506d54218544523ea/html5/thumbnails/51.jpg)
CD1-CNPM - JAVA HIENLTH
Nhập giá trị - Read values
• Sử dụng lớp Scanner class (java.util package)• Cho phép đọc các giá trị của các kiểu dữ liệu khác nhau.
• Truyền theo kiểu InputStream tới hàm dựng
• Đọc chuỗi dùng phương thức next()
To read numerical values from user, use method
![Page 52: Chủ đề 1: Giới thiệu NNLT JAVA - hienlth.info · hành vi riêng của nó . CD1-CNPM - JAVA HIENLTH • Lớp là mộtkhuôn mẫu củađốitượng • Trong đóbao](https://reader030.vdocuments.net/reader030/viewer/2022041209/5dd0701506d54218544523ea/html5/thumbnails/52.jpg)
CD1-CNPM - JAVA HIENLTH
Ví dụ về lớp Scanner
![Page 53: Chủ đề 1: Giới thiệu NNLT JAVA - hienlth.info · hành vi riêng của nó . CD1-CNPM - JAVA HIENLTH • Lớp là mộtkhuôn mẫu củađốitượng • Trong đóbao](https://reader030.vdocuments.net/reader030/viewer/2022041209/5dd0701506d54218544523ea/html5/thumbnails/53.jpg)
CD1-CNPM - JAVA HIENLTH
Nhập xuất dữ liệu bằng hộp thoại
• Java cung cấp một số hộp thoại chuẩn (common dialog) giúp:
• Thông báo cho người dùng biết về một tình huống.
• Để nhận dữ liệu từ người dùng thông qua cách chọn lựa hoặc người dùng phải nhập liệu vào một ô text.
• Lớp JOptionPane trong gói javax.swing
![Page 54: Chủ đề 1: Giới thiệu NNLT JAVA - hienlth.info · hành vi riêng của nó . CD1-CNPM - JAVA HIENLTH • Lớp là mộtkhuôn mẫu củađốitượng • Trong đóbao](https://reader030.vdocuments.net/reader030/viewer/2022041209/5dd0701506d54218544523ea/html5/thumbnails/54.jpg)
CD1-CNPM - JAVA HIENLTH
Lớp JOptionPane- Cách dùng
• import javax.swing.*;
•Khi cần xuất một thông báo:
JOptionPane.showMessageDialog(this,”message");
Người dùng phải kích nút OK của hộp thoại
•Khi cần nhập 1 chuỗi:
String s= JOptionPane.showInputDialog(this,"Please
input","12");
* “12” là trị ta muốn làm trị mặc định.
* Sau khi có S, ta có thể đối sang kiểu khác tùy ý.
![Page 55: Chủ đề 1: Giới thiệu NNLT JAVA - hienlth.info · hành vi riêng của nó . CD1-CNPM - JAVA HIENLTH • Lớp là mộtkhuôn mẫu củađốitượng • Trong đóbao](https://reader030.vdocuments.net/reader030/viewer/2022041209/5dd0701506d54218544523ea/html5/thumbnails/55.jpg)
CD1-CNPM - JAVA HIENLTH
Lớp JOptionPane- Cách dùng
•Khi cần user xác nhận 1 điều gì:
int Response=JOptionPane.showConfirmDialog(null,"Confirm?");
Các hằng trả về:
JOptionPane.OK_OPTION // nút OK – trị 0
JOptionPane.NO_OPTION // nút NO – trị 1
JOptionPane.CANCEL_OPTION // nút Cancel – trị 2
![Page 56: Chủ đề 1: Giới thiệu NNLT JAVA - hienlth.info · hành vi riêng của nó . CD1-CNPM - JAVA HIENLTH • Lớp là mộtkhuôn mẫu củađốitượng • Trong đóbao](https://reader030.vdocuments.net/reader030/viewer/2022041209/5dd0701506d54218544523ea/html5/thumbnails/56.jpg)
CD1-CNPM - JAVA HIENLTH
Lớp JOptionPane- Cách dùng
Khi cần user chọn một trong nhóm trị:
Object Options[]= { "One", "Two", "Three", "Four"};
int Choice=JOptionPane.showOptionDialog(this,"Choose one","Options", JOptionPane.DEFAULT_OPTION,
JOptionPane.WARNING_MESSAGE,
null,Options,Options[0]);
Trả trị: số nguyên từ 0 trở lên mô tả vụ trí mục được chọn.
Trong thí dụ trên là 0,1,2,3
![Page 57: Chủ đề 1: Giới thiệu NNLT JAVA - hienlth.info · hành vi riêng của nó . CD1-CNPM - JAVA HIENLTH • Lớp là mộtkhuôn mẫu củađốitượng • Trong đóbao](https://reader030.vdocuments.net/reader030/viewer/2022041209/5dd0701506d54218544523ea/html5/thumbnails/57.jpg)
CD1-CNPM - JAVA HIENLTH
Thí dụ
![Page 58: Chủ đề 1: Giới thiệu NNLT JAVA - hienlth.info · hành vi riêng của nó . CD1-CNPM - JAVA HIENLTH • Lớp là mộtkhuôn mẫu củađốitượng • Trong đóbao](https://reader030.vdocuments.net/reader030/viewer/2022041209/5dd0701506d54218544523ea/html5/thumbnails/58.jpg)
CD1-CNPM - JAVA HIENLTH
Tóm tắt dạng câu hỏi
• Liệt kê 6 kiểu số cơ bản của Java và số bit bộ nhớ sẽ chiếm dụng của chúng khi lưu trữ trị.
• Kiểu luận lý (logic) trong java tên là gì?
• Kiểu ký tự tên là gì? chiếm mấy byte?
• Biến là gì? Hãy cho biết 3 tính chất của biến.
• Hãy liệt kê 4 loại toán tử trong java.
• Hãy cho biết kết qủa của biểu thức sau :
a) 4 && 7 b) 4&7 c) 0 || 8 d) 0 | 8 e) 8 ^ 3
f) 4 >> 3 g) 9 << 2 h ) (9 >>3) ? 5 : -3
• Trong java có phát biểu goto hay không ?
• Mảng là gì ? Mảng in-line là gì ?
• int a[] = new int { 1,2,3,9,0}; đúng hay sai?
• System.out.println( 12 & 9); sẽ xuất trị bao nhiêu?
• Phân tích dòng code: if (5&7>0 && 5|3) System.out(“Hello”) ;
• int m= System.in.read(); nếu gõ vào phím ‘C’, trị biến m là bao nhiêu?
![Page 59: Chủ đề 1: Giới thiệu NNLT JAVA - hienlth.info · hành vi riêng của nó . CD1-CNPM - JAVA HIENLTH • Lớp là mộtkhuôn mẫu củađốitượng • Trong đóbao](https://reader030.vdocuments.net/reader030/viewer/2022041209/5dd0701506d54218544523ea/html5/thumbnails/59.jpg)
CD1-CNPM - JAVA HIENLTH
Bài tập
Viết các chương trình sau:
(1) Xuất bảng cửu chương từ 2 đến 9.
(2) Xuất trị bình phương, lập phương từ 1 đến 10.
(3) Tạo 1 mảng số int dạng in-line 10 phần tử, xuất mảng này tăng dần.
(4) Nhập 1 mảng int các số mang trị là mã của các ký tự nhập từ bàn phím. Xuất mảng này dạng chữ rồi xuất mã của chúng.
(5) Xuất 100 số Fibonacci đầu tiên. Dãy Fibonacci : 1,1,2,3,5,8,… 2 số đầu là 1, các số sau bằng tổng 2 số trước nó.
![Page 60: Chủ đề 1: Giới thiệu NNLT JAVA - hienlth.info · hành vi riêng của nó . CD1-CNPM - JAVA HIENLTH • Lớp là mộtkhuôn mẫu củađốitượng • Trong đóbao](https://reader030.vdocuments.net/reader030/viewer/2022041209/5dd0701506d54218544523ea/html5/thumbnails/60.jpg)
CD1-CNPM - JAVA HIENLTH
Nhắc về Hướng đối tượng
![Page 61: Chủ đề 1: Giới thiệu NNLT JAVA - hienlth.info · hành vi riêng của nó . CD1-CNPM - JAVA HIENLTH • Lớp là mộtkhuôn mẫu củađốitượng • Trong đóbao](https://reader030.vdocuments.net/reader030/viewer/2022041209/5dd0701506d54218544523ea/html5/thumbnails/61.jpg)
CD1-CNPM - JAVA HIENLTH
Hướng đối tượng
•Đóng gói
•Kế thừa
•Đa hình
![Page 62: Chủ đề 1: Giới thiệu NNLT JAVA - hienlth.info · hành vi riêng của nó . CD1-CNPM - JAVA HIENLTH • Lớp là mộtkhuôn mẫu củađốitượng • Trong đóbao](https://reader030.vdocuments.net/reader030/viewer/2022041209/5dd0701506d54218544523ea/html5/thumbnails/62.jpg)
CD1-CNPM - JAVA HIENLTH
Thừa kế - Bài tập làm tại chỗ
Phân tích phân cấp thừa kế cho các lớp:
•Hàng điện máy <mã hàng, tên hàng, nhà sản xuất, giá, thời gian bảo hành, điện áp, công suất>
•Hàng sành sứ < mã hàng, tên hàng, nhà sản xuất, giá, loại nguyên liệu>
•Hàng thực phẩm <mã hàng, tên hàng, nhà sản xuất, giá, ngày sản xuất, ngày hết hạn dùng>
![Page 63: Chủ đề 1: Giới thiệu NNLT JAVA - hienlth.info · hành vi riêng của nó . CD1-CNPM - JAVA HIENLTH • Lớp là mộtkhuôn mẫu củađốitượng • Trong đóbao](https://reader030.vdocuments.net/reader030/viewer/2022041209/5dd0701506d54218544523ea/html5/thumbnails/63.jpg)
CD1-CNPM - JAVA HIENLTH
Thừa kế- Bài tập về nhà
Phân tích phân cấp thừa kế cho các đối tượng trong một học viện:
•Nhân viên quản lý <mã nv, tên nv, năm sinh, trình độ, trường đào tạo, chuyên môn, lương cb, phụ cấp chức vụ>
•Nhân viên nghiên cứu <mã nv, tên nv, năm sinh, trình độ, trường đào tạo, chuyên môn, lương cb, phụ cấp độc hại>
•Nhân viên phục vụ<mã nv, tên nv, năm sinh, trình độ, lương cb>
![Page 64: Chủ đề 1: Giới thiệu NNLT JAVA - hienlth.info · hành vi riêng của nó . CD1-CNPM - JAVA HIENLTH • Lớp là mộtkhuôn mẫu củađốitượng • Trong đóbao](https://reader030.vdocuments.net/reader030/viewer/2022041209/5dd0701506d54218544523ea/html5/thumbnails/64.jpg)
CD1-CNPM - JAVA HIENLTH
Toán tử new có thể không
tạo mới đối tượng thành
công vì thiếu bộ nhớ
Garbage collection sẽ tự
động dọn dẹp bộ nhớ
không cần thiết mà không
cần can thiệp bằng code
Garbage collection và Finalizer
![Page 65: Chủ đề 1: Giới thiệu NNLT JAVA - hienlth.info · hành vi riêng của nó . CD1-CNPM - JAVA HIENLTH • Lớp là mộtkhuôn mẫu củađốitượng • Trong đóbao](https://reader030.vdocuments.net/reader030/viewer/2022041209/5dd0701506d54218544523ea/html5/thumbnails/65.jpg)
CD1-CNPM - JAVA HIENLTH
Phương thức finalize() được gọi
trước khi đối tượng bị hủy bởi
garbage collection
Trong phương thức finalize xác
định các hành động phải thực
hiện trước khi hủy đối tượng
Garbage collection và Finalizer
![Page 66: Chủ đề 1: Giới thiệu NNLT JAVA - hienlth.info · hành vi riêng của nó . CD1-CNPM - JAVA HIENLTH • Lớp là mộtkhuôn mẫu củađốitượng • Trong đóbao](https://reader030.vdocuments.net/reader030/viewer/2022041209/5dd0701506d54218544523ea/html5/thumbnails/66.jpg)
CD1-CNPM - JAVA HIENLTH
Từ khóa this
this tham chiếu tới lớp mà
phương thức được gọi
![Page 67: Chủ đề 1: Giới thiệu NNLT JAVA - hienlth.info · hành vi riêng của nó . CD1-CNPM - JAVA HIENLTH • Lớp là mộtkhuôn mẫu củađốitượng • Trong đóbao](https://reader030.vdocuments.net/reader030/viewer/2022041209/5dd0701506d54218544523ea/html5/thumbnails/67.jpg)
CD1-CNPM - JAVA HIENLTH
super
Truy cập đến các thành viên của lớp cha bằng
cách sử dụng từ khóa super
Có thể sử dụng super để truy cập đến hàm tạo
của lớp cha
![Page 68: Chủ đề 1: Giới thiệu NNLT JAVA - hienlth.info · hành vi riêng của nó . CD1-CNPM - JAVA HIENLTH • Lớp là mộtkhuôn mẫu củađốitượng • Trong đóbao](https://reader030.vdocuments.net/reader030/viewer/2022041209/5dd0701506d54218544523ea/html5/thumbnails/68.jpg)
CD1-CNPM - JAVA HIENLTH
Xử lý lỗi và ngoại lệ
![Page 69: Chủ đề 1: Giới thiệu NNLT JAVA - hienlth.info · hành vi riêng của nó . CD1-CNPM - JAVA HIENLTH • Lớp là mộtkhuôn mẫu củađốitượng • Trong đóbao](https://reader030.vdocuments.net/reader030/viewer/2022041209/5dd0701506d54218544523ea/html5/thumbnails/69.jpg)
CD1-CNPM - JAVA HIENLTH
Phân loại Error - Exception• Error :
• Các lỗi biên dịch: lỗi logic, lỗi cú pháp.
• các lỗi không bình thường, khó dự đoán, không có khả năng phục
hồi: hết bộ nhớ, lỗi hệ thống, môi trường
• Exception (ngoại lệ): tình huống bất bình thường xảy ra trong quá
trình thực thi chương trình và khiến chương trình bị ngắt đột ngột. VD:
thực hiện phép chia cho 0, đọc một file không tồn tại, thao tác vượt
quá chỉ số mảng, đối số không hợp lệ…
69
![Page 70: Chủ đề 1: Giới thiệu NNLT JAVA - hienlth.info · hành vi riêng của nó . CD1-CNPM - JAVA HIENLTH • Lớp là mộtkhuôn mẫu củađốitượng • Trong đóbao](https://reader030.vdocuments.net/reader030/viewer/2022041209/5dd0701506d54218544523ea/html5/thumbnails/70.jpg)
CD1-CNPM - JAVA HIENLTH
Cách xử lý lỗi truyền thống - VD
70
![Page 71: Chủ đề 1: Giới thiệu NNLT JAVA - hienlth.info · hành vi riêng của nó . CD1-CNPM - JAVA HIENLTH • Lớp là mộtkhuôn mẫu củađốitượng • Trong đóbao](https://reader030.vdocuments.net/reader030/viewer/2022041209/5dd0701506d54218544523ea/html5/thumbnails/71.jpg)
CD1-CNPM - JAVA HIENLTH
Cách xử lý lỗi truyền thống
• Cài đặt mã xử lý tại nơi phát sinh lỗi
• Làm chương trình trở nên khó hiểu
• Không phải lúc nào cũng đầy đủ thông tin để xử lý
• Không nhất thiết phải xử lý
• Truyền trạng thái lên mức trên
• Thông qua tham số, giá trị trả lại hoặc biến tổng thể (flag)
• Dễ nhầm
• Khó hiểu
• Khó kiểm soát được hết các trường hợp
• Lập trình viên thường quên không xử lý lỗi
71
![Page 72: Chủ đề 1: Giới thiệu NNLT JAVA - hienlth.info · hành vi riêng của nó . CD1-CNPM - JAVA HIENLTH • Lớp là mộtkhuôn mẫu củađốitượng • Trong đóbao](https://reader030.vdocuments.net/reader030/viewer/2022041209/5dd0701506d54218544523ea/html5/thumbnails/72.jpg)
CD1-CNPM - JAVA HIENLTH
Xử lý ngoại lệ (Exception Handling)
• Dựa trên cơ chế ném và bắt ngoại lệ
• Ném ngoại lệ: dừng chương trình và chuyển điều khiển lên
mức trên (nơi bắt ngoại lệ).
• Bắt ngoại lệ: xử lý ngoại lệ.
• Ngoại lệ là đối tượng mang thông tin về lỗi đã xảy ra
• Ngoại lệ có thể được ném tự động.
• Hoặc ném tường minh.
72
![Page 73: Chủ đề 1: Giới thiệu NNLT JAVA - hienlth.info · hành vi riêng của nó . CD1-CNPM - JAVA HIENLTH • Lớp là mộtkhuôn mẫu củađốitượng • Trong đóbao](https://reader030.vdocuments.net/reader030/viewer/2022041209/5dd0701506d54218544523ea/html5/thumbnails/73.jpg)
CD1-CNPM - JAVA HIENLTH
Xử lý ngoại lệ trong Java
• Các loại lỗi & ngoại lệ đều được biểu diễn bởi các lớp Error
& Exception kế thừa từ lớp java.lang.Throwable
• Exception chứa thông tin về tình huống lỗi, bao gồm kiểu lỗi,
trạng thái của chương trình khi lỗi xảy ra.
• Hệ thống JVM chịu trách nhiệm tìm kiếm mã chương trình
dành cho việc xử lý ngoại lệ
73
Object
Throwable
ExceptionError
AWTError
ThreadDead
…
SQLException
ClassNotFoundException
…
RuntimeException
ArithmeticException
NullPointerException
NumberFormatException
…
![Page 74: Chủ đề 1: Giới thiệu NNLT JAVA - hienlth.info · hành vi riêng của nó . CD1-CNPM - JAVA HIENLTH • Lớp là mộtkhuôn mẫu củađốitượng • Trong đóbao](https://reader030.vdocuments.net/reader030/viewer/2022041209/5dd0701506d54218544523ea/html5/thumbnails/74.jpg)
CD1-CNPM - JAVA HIENLTH
Ưu điểm cơ chế xử lý ngoại lệ của Java
• Dễ sử dụng
• Dễ dàng chuyển điều khiển đến nơi có khả năng xử lý ngoại lệ.
• Có thể ném nhiều loại ngoại lệ.
• Tách xử lý ngoại lệ khỏi thuật toán → Làm chương trình dễ đọc
hơn
• Tách mã xử lý.
• Sử dụng cú pháp khác.
• Không bỏ sót ngoại lệ → Làm chương trình an toàn hơn.
74
![Page 75: Chủ đề 1: Giới thiệu NNLT JAVA - hienlth.info · hành vi riêng của nó . CD1-CNPM - JAVA HIENLTH • Lớp là mộtkhuôn mẫu củađốitượng • Trong đóbao](https://reader030.vdocuments.net/reader030/viewer/2022041209/5dd0701506d54218544523ea/html5/thumbnails/75.jpg)
CD1-CNPM - JAVA HIENLTH
Xử lý ngoại lệ trong Java
• Có 2 cách để xử lý ngoại lệ trong Java:
• Dùng khối try… catch… finally
• Tuyên bố ném ngoại lệ dùng khai báo throw (ném ngoại lệ
tường minh)
75
![Page 76: Chủ đề 1: Giới thiệu NNLT JAVA - hienlth.info · hành vi riêng của nó . CD1-CNPM - JAVA HIENLTH • Lớp là mộtkhuôn mẫu củađốitượng • Trong đóbao](https://reader030.vdocuments.net/reader030/viewer/2022041209/5dd0701506d54218544523ea/html5/thumbnails/76.jpg)
CD1-CNPM - JAVA HIENLTH
Khối Try… Catch… Finally
try{
//- Đoạn lệnh có nguy cơ phát sinh Exception
//- Sẽ kết thúc thi hành các lệnh còn lại để nhảy sang khối catch
// khi có lỗi xảy ra
}catch (Exception e){
//- Xử lý tương ứng khi có ngoại lệ
//- Thông tin về lỗi lưu trữ trong e
//- Nếu có nhiều loại Exception thì có thể dùng nhiều khối catch
}
finally{ //optional
//Luôn được thực hiện bất kể có lỗi xảy ra hay không, thường
//để thực hiện các công việc “dọn dẹp”
}
76
![Page 77: Chủ đề 1: Giới thiệu NNLT JAVA - hienlth.info · hành vi riêng của nó . CD1-CNPM - JAVA HIENLTH • Lớp là mộtkhuôn mẫu củađốitượng • Trong đóbao](https://reader030.vdocuments.net/reader030/viewer/2022041209/5dd0701506d54218544523ea/html5/thumbnails/77.jpg)
CD1-CNPM - JAVA HIENLTH
Các loại Exception
Exception Description
Exception Root class of exception hierachy
RuntimeException Base class for many java.lang exceptions
ArithmeticException Arimetic error condition, such as devide by zero
IllegalArgumentException Method received illegal argument
ArrrayIndexOutOfBoundsException Array size <0 or greater than actual array size
NullPointerException Attempt to access null object member
SecurityException Security settings do not allow operation
ClassNotFoundException Unable to load requested class
NumberFormatException Invalid conversion of a string to a numeric float
AWTException Exception in AWT
IOException Root class for I/O exceptions
FileNotFoundException Unable to locate a file
EOFException End of file
…
![Page 78: Chủ đề 1: Giới thiệu NNLT JAVA - hienlth.info · hành vi riêng của nó . CD1-CNPM - JAVA HIENLTH • Lớp là mộtkhuôn mẫu củađốitượng • Trong đóbao](https://reader030.vdocuments.net/reader030/viewer/2022041209/5dd0701506d54218544523ea/html5/thumbnails/78.jpg)
CD1-CNPM - JAVA HIENLTH
Ví dụ - Bẫy lỗi tổng quát
Dùng đối tượng mức tổng
quát ( lớp Exception). Xem
lại hình vẽ về cấu trúc quản
lý lỗi của Java trong các
slide trước
78
![Page 79: Chủ đề 1: Giới thiệu NNLT JAVA - hienlth.info · hành vi riêng của nó . CD1-CNPM - JAVA HIENLTH • Lớp là mộtkhuôn mẫu củađốitượng • Trong đóbao](https://reader030.vdocuments.net/reader030/viewer/2022041209/5dd0701506d54218544523ea/html5/thumbnails/79.jpg)
CD1-CNPM - JAVA HIENLTH
Ví dụ - bẫy lỗi không đúng dạng số
79
![Page 80: Chủ đề 1: Giới thiệu NNLT JAVA - hienlth.info · hành vi riêng của nó . CD1-CNPM - JAVA HIENLTH • Lớp là mộtkhuôn mẫu củađốitượng • Trong đóbao](https://reader030.vdocuments.net/reader030/viewer/2022041209/5dd0701506d54218544523ea/html5/thumbnails/80.jpg)
CD1-CNPM - JAVA HIENLTH
Ví dụ - multiple catch Class MultipleCatch{
public static void main (String args[]) {
try{
String num = args[0];
int numValue = Integer.parseInt(num);
System.out.println(“The square is: “ + numValue*numValue);
}
catch (ArrayIndexOutOfBoundsException ne){
System.out.println(“No arguments given!”);
}
catch (NumberFormatException nb){
System.out.println(“Not a number !”);
}
}
}
![Page 81: Chủ đề 1: Giới thiệu NNLT JAVA - hienlth.info · hành vi riêng của nó . CD1-CNPM - JAVA HIENLTH • Lớp là mộtkhuôn mẫu củađốitượng • Trong đóbao](https://reader030.vdocuments.net/reader030/viewer/2022041209/5dd0701506d54218544523ea/html5/thumbnails/81.jpg)
CD1-CNPM - JAVA HIENLTH
Mệnh đề throws - throw
• Mệnh đề throws – throw dùng để ném ngoại lệ.
• Có thể không xử lý ngoại lệ ngay trong phương thức do:
• Không đủ thông tin để xử lý
• Không đủ quyền
• Sử dụng từ khóa throws để liệt kê các ngoại lệ mà phương
thức muốn ném.
throws ThrowableInstance_1, ThrowableInstance_2,…
• Sử dụng từ khóa throw để chỉ có exeption đã xảy ra.
throw ThrowableInstance
81
![Page 82: Chủ đề 1: Giới thiệu NNLT JAVA - hienlth.info · hành vi riêng của nó . CD1-CNPM - JAVA HIENLTH • Lớp là mộtkhuôn mẫu củađốitượng • Trong đóbao](https://reader030.vdocuments.net/reader030/viewer/2022041209/5dd0701506d54218544523ea/html5/thumbnails/82.jpg)
CD1-CNPM - JAVA HIENLTH
Ném ngoại lệ khỏi phương thức - VD
pucblic class ThrowExample
{
public void exceptionExample(){
try
{check();
}catch (Exception e)
{//…}
}
void check() throws NullPointerException, NegativeArraySizeException
{
if(flag < 0)
throw new NullPointerException();
if(arrSize < 0 )
throw new NegativeArraySizeException();
}
}
82
![Page 83: Chủ đề 1: Giới thiệu NNLT JAVA - hienlth.info · hành vi riêng của nó . CD1-CNPM - JAVA HIENLTH • Lớp là mộtkhuôn mẫu củađốitượng • Trong đóbao](https://reader030.vdocuments.net/reader030/viewer/2022041209/5dd0701506d54218544523ea/html5/thumbnails/83.jpg)
CD1-CNPM - JAVA HIENLTH
Ném lại ngoại lệ
• Sau khi bắt ngoại lệ, nếu thấy cần thiết chúng ta có thể ném
lại chính ngoại lệ vừa bắt được để cho chương trình mức trên
tiếp tục xử lý
83
![Page 84: Chủ đề 1: Giới thiệu NNLT JAVA - hienlth.info · hành vi riêng của nó . CD1-CNPM - JAVA HIENLTH • Lớp là mộtkhuôn mẫu củađốitượng • Trong đóbao](https://reader030.vdocuments.net/reader030/viewer/2022041209/5dd0701506d54218544523ea/html5/thumbnails/84.jpg)
CD1-CNPM - JAVA HIENLTH
Lan truyền ngoại lệ
• Lỗi lan truyền từ trong ra cho đến khi gặp bẫy lỗi hoặc tới main và ứng dụng bị ngưng nếu ngoại lệ vẫn chưa được xử lý.
84
main()
A()
B()
C() Exception
Chiều gọi hàm
Chiều lan truyền lỗi
catch(...)
![Page 85: Chủ đề 1: Giới thiệu NNLT JAVA - hienlth.info · hành vi riêng của nó . CD1-CNPM - JAVA HIENLTH • Lớp là mộtkhuôn mẫu củađốitượng • Trong đóbao](https://reader030.vdocuments.net/reader030/viewer/2022041209/5dd0701506d54218544523ea/html5/thumbnails/85.jpg)
CD1-CNPM - JAVA HIENLTH
Lần vết ngoại lệ - printStackTrace()
• Phương thức printStackTrace() thuộc lớp Exception dùng để
lần vết vị trí phát sinh ngoại lệ.
• Phương thức printStackTrace() giúp in ra các thông tin liên
quan đến ngoại lệ như:
• Nguyên nhân gây ra ngoại lệ
• Ngoại lệ được phát sinh tại những hàm nào, dòng code
nào.
85
![Page 86: Chủ đề 1: Giới thiệu NNLT JAVA - hienlth.info · hành vi riêng của nó . CD1-CNPM - JAVA HIENLTH • Lớp là mộtkhuôn mẫu củađốitượng • Trong đóbao](https://reader030.vdocuments.net/reader030/viewer/2022041209/5dd0701506d54218544523ea/html5/thumbnails/86.jpg)
CD1-CNPM - JAVA HIENLTH
Tự định nghĩa ngoại lệ
• Chúng ta có thể tự tạo lớp định nghĩa ngoại lệ để
phục vụ các mục đích riêng.
• Lớp ngoại lệ mới phải được kế thừa từ lớp
Exception hoặc các lớp dẫn xuất của lớp này.
86
![Page 87: Chủ đề 1: Giới thiệu NNLT JAVA - hienlth.info · hành vi riêng của nó . CD1-CNPM - JAVA HIENLTH • Lớp là mộtkhuôn mẫu củađốitượng • Trong đóbao](https://reader030.vdocuments.net/reader030/viewer/2022041209/5dd0701506d54218544523ea/html5/thumbnails/87.jpg)
CD1-CNPM - JAVA HIENLTH
Tự định nghĩa ngoại lệ - VD
Class ArraySizeException extends NegativeArraySizeException{
ArraySizeException() {
super(“You have passed illegal array size”);
}
}//end of ArraySizeException class
Class UserDefineException{
int size, array[];
UserDefineException(int val) {
size = val;
try{
checkSize();
}
catch (ArraySizeException e){
System.out.println(e);
}
}
// còn ở slide tiếp87
![Page 88: Chủ đề 1: Giới thiệu NNLT JAVA - hienlth.info · hành vi riêng của nó . CD1-CNPM - JAVA HIENLTH • Lớp là mộtkhuôn mẫu củađốitượng • Trong đóbao](https://reader030.vdocuments.net/reader030/viewer/2022041209/5dd0701506d54218544523ea/html5/thumbnails/88.jpg)
CD1-CNPM - JAVA HIENLTH
Tự định nghĩa ngoại lệ - VD
void checkSize() throws ArraySizeException {
if (size < 0)
throw new ArraySizeException ();
array = new int[3];
for(int count = 0; count<3; count++)
array[count] = count + 1;
}
public static void main (String arg[])
{
new UserDefineException (Integer.parseInt(arg[0]));
}
}//end of UserDefineException class
88
![Page 89: Chủ đề 1: Giới thiệu NNLT JAVA - hienlth.info · hành vi riêng của nó . CD1-CNPM - JAVA HIENLTH • Lớp là mộtkhuôn mẫu củađốitượng • Trong đóbao](https://reader030.vdocuments.net/reader030/viewer/2022041209/5dd0701506d54218544523ea/html5/thumbnails/89.jpg)
CD1-CNPM - JAVA HIENLTH
Bài tập
1. Viết chương trình cho phép tính giá trị của biểu
thức:
A =
Yêu cầu xử lý các ngoại lệ có thể xảy ra.
2. Viết chương trình cho phép tạo một mảng 2 chiều
cỡ mxn với m,n nhập từ bàn phím. Cài đặt các xử
lý ngoại lệ cần thiết.
89
5x - y
2x + 7y
![Page 90: Chủ đề 1: Giới thiệu NNLT JAVA - hienlth.info · hành vi riêng của nó . CD1-CNPM - JAVA HIENLTH • Lớp là mộtkhuôn mẫu củađốitượng • Trong đóbao](https://reader030.vdocuments.net/reader030/viewer/2022041209/5dd0701506d54218544523ea/html5/thumbnails/90.jpg)
CD1-CNPM - JAVA HIENLTH
Bài tập
3. Xây dựng lớp ngoại lệ DateException cho các lỗi
về ngày tháng.
4. Viết chương trình cho phép người dùng nhập vào
ngày, tháng năm, nếu thông tin này không hợp lệ
sẽ tung ra một ngoại lệ DateException, sau đó
thông báo cho người nhập biết và cho phép người
dùng nhập lại.90
![Page 91: Chủ đề 1: Giới thiệu NNLT JAVA - hienlth.info · hành vi riêng của nó . CD1-CNPM - JAVA HIENLTH • Lớp là mộtkhuôn mẫu củađốitượng • Trong đóbao](https://reader030.vdocuments.net/reader030/viewer/2022041209/5dd0701506d54218544523ea/html5/thumbnails/91.jpg)
CD1-CNPM - JAVA HIENLTH
Câu hỏi và thảo luận
![Page 92: Chủ đề 1: Giới thiệu NNLT JAVA - hienlth.info · hành vi riêng của nó . CD1-CNPM - JAVA HIENLTH • Lớp là mộtkhuôn mẫu củađốitượng • Trong đóbao](https://reader030.vdocuments.net/reader030/viewer/2022041209/5dd0701506d54218544523ea/html5/thumbnails/92.jpg)
CD1-CNPM - JAVA HIENLTH