chủ đề 1: giới thiệu nnlt java - hienlth.info · hành vi riêng của nó . cd1-cnpm -...

92
CD1-CNPM - JAVA HIENLTH Chủ đề 1: Giới thiệu NNLT JAVA

Upload: others

Post on 29-Aug-2019

3 views

Category:

Documents


0 download

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

CD1-CNPM - JAVA HIENLTH