Trình xử lý ngoại lệ trong Java Các lớp Error và Exception xử lý các lỗi trong Java Khi một ngoại lệ xảy ra: ◦ một thể hiện biểu diễn ngoại lệ đó được tạo ra.. ◦ Thể hiện này sau đó đ
Trang 1Chapter 3
CÁC THÀNH PHẦN CƠ BẢN CỦA NGÔN NGỮ JAVA
Trang 2Java Simplified / Session 22 / 2 of 45
◦ Biến, hằng, toán tử, kiểu dữ liệu
◦ Cấu trúc điều khiển
Trang 4Java Simplified / Session 22 / 4 of 45
if implements import Instanceof inner
static Super switch synchronized this
threadsafe Throw throws transient true
Keywords
4
Trang 5 /* Here is comment which
extends across two lines */
/* * This comment has especial meaning for the javadoc unitily.It will be part of
Trang 6Java Simplified / Session 22 / 6 of 45
// A program to display the message
// "Hello World!" on standard output
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello World!");
}
} // end of class HelloWorld
Command line and block
6
Trang 7Data Type
Xác định loại dữ liệu được lưu trữ trong biến
Xác định những tác vụ có thể thực hiện trên dữ liệu
Có 2 loại kiểu dữ liệu trong Java:
1. Primitive data types (kiểu cơ bản/nguyên thủy)
2. Reference data types (kiểu tham chiếu)
Trang 8Java Simplified / Session 22 / 8 of 45
Các kiểu dữ liệu cơ bản( nguyên thủy)
8
Trang 9Các kiểu dữ liệu cơ bản( nguyên thủy)
Trang 10Java Simplified / Session 22 / 10 of 45
Các kiểu dữ liệu tham chiếu
• Một biến thuộc kiểu dữ liệu tham chiếu chỉ chứa tham khảo đến giá trị thực sự được biểu diễn bởi biến đó.
Trang 11Hằng ký tự
• Dãy ký tự đặc biệt dùng để biểu diễn các ký tự không thể nhập trực tiếp
vào một chuỗi.
Trang 12Java Simplified / Session 22 / 12 of 45
Variables must be declared before using,
datatype identifier [=value][, identifier[=value] ];
Three components of a declaration are:
Trang 13double len = 5.0, wide = 7.0;
double num = Math.sqrt(len * len + wide * wide);
System.out.println("Value of num after dynamic initialization is " + num);
}
}
Trang 14Java Simplified / Session 22 / 14 of 45
Biến cục bộ có thời gian tồn tại giới hạn và quan hệ chỉ trong phần nhỏ của
// num is available in inner scope
int num1 = num * num;
System.out.println("Value of num and num1 are " + num + " " + num1);
}
//num1 = 10; ERROR ! num1 is not known
System.out.println("Value of num is " + num);
}
}
Trang 15 JAVA có 4 loại biến :
◦ Biến thành phần: là các thành phần của lớp và được khởi tạo giá trị khi một đối
tượng của lớp được tạo ra
◦ Biến tĩnh: là các thành viên của lớp, đại diện cho cả lớp
◦ Biến tham chiếu: được sử dụng để xử lý các đối tượng
◦ Biến cục bộ: được khai báo trong các phương thức và các khối, khai báo trước khi dùng
Variables
Trang 16Java Simplified / Session 22 / 16 of 45
Giá trị mặc định
Chuyển đổi kiểu
Khởi tạo giá trị
16
Trang 17Dữ liệu cơ bản
Cú pháp: (NewType) Value;
Ex: float f= (float) 100.15D (double->float)
Các đối tượng: thành 1 đối tượng của một lớp khác
◦ Với điều kiện các đối tượng muốn đổi kiểu phải thuộc các lớp thừa kế nhau.
◦ Cú pháp : (NewClass) Object ;
Dữ liệu cơ bản sang đối tượng và ngược lại:
◦ Trong gói java.lang có sẵn những lớp đặc biệt tương ứng với từng kiểu nguyên thủy: lớp Integer, Float, Tạo đối tượng, ex: int Intobj = new Integer (32);
◦ Khi muốn lấy lại giá trị ban đầu ta dùng phương thức có sẵn trong lớp tương đương Như intValue() cho kiểu int
Chuyển đổi kiểu dữ liệu: 3 dạng
Trang 18Java Simplified / Session 22 / 18 of 45
Trang 20Java Simplified / Session 22 / 20 of 45
Ép kiểu tường minh
Chuyển kiểu có độ chính xác cao hơn sang kiểu có độ
Trang 22Java Simplified / Session 22 / 22 of 45
Toán tử toán học
22
Trang 23Toán tử một ngôi
“++”, “ ” : có thể dùng:
• trước (prefix) hoặc
• sau (postfix) toán hạng
Trang 24Java Simplified / Session 22 / 24 of 45
Toán tử quan hệ
• Kiểm tra mối quan hệ giữa hai toán hạng.
• Luôn trả về một giá trị luận lý (true hay false)
Trang 25Toán tử điều kiện
“&&”, “||” : làm việc trên hai toán hạng luận lý
“ ? : ” : toán tử điều kiện chấp nhận 3 toán hạng
Trang 26Java Simplified / Session 22 / 26 of 45
Toán tử trên bit
Làm việc trên dạng biểu diễn nhị phân của dữ liệu
Trang 27Độ ưu tiên toán tử
Trang 28Java Simplified / Session 22 / 28 of 45
Sự kết hợp của toán tử
Trang 29 Class declaration Syntax
Trang 30Java Simplified / Session 22 / 30 of 45
Lớp cơ bản trong Java
30
Trang 31 Input: System.in (ko cho nhập “ “)
◦ Scanner nhap = new Scanner(System.in);
◦ int x = nhap.nextInt();
◦ String e= nhap.next();
Input: Luồng ký tự: BufferedReader (cho “ ”)
BufferedReader in =
new BufferedReader (new InputStreamReader (System.in));
String name = in.readLine ();
int hours = Integer.parseInt (in.readLine());
Double rate = Double.parseDouble (in.readLine());
Output: System.out
◦ System.out.println (“Hello”);
Input/ Output
Trang 32Java Simplified / Session 22 / 32 of 45
Có các loại biểu thức như biểu thức logic, biểu thức số học, biểu thức gán
◦ Ví dụ : a <= 10;
◦ Biểu thức gán: Variable1= Variable2= =Value;
◦ Biểu thức điều kiện :
Expression ? Expression_true : Expression_false;
Express
32
Trang 33 All application development environments provide a decision making process called control flow
statements that direct the application execution.
Flow control enables a developer to create an application that can examine the existing
conditions, and decide a suitable course of action
Loops or iteration are an important programming construct that can be used to repeatedly
execute a set of actions
Jump statements allow the program to execute in a non-linear fashion
5 Control Flow
Trang 34Java Simplified / Session 22 / 34 of 45
Trang 36Java Simplified / Session 22 / 36 of 45
Trang 37If
Trang 38Java Simplified / Session 22 / 38 of 45
Expression : Biểu thức điều kiện phụ thuộc vào kiểu dữ
liệu cơ bản (byte, int )
switch – case statement
38
Trang 39switch – case statement
Trang 40Java Simplified / Session 22 / 40 of 45
} }
Example
40
Trang 41 while loops are used for situations when a loop has to be executed as long as certain
while Loop
Trang 42Java Simplified / Session 22 / 42 of 45
Example
42
Trang 43 The do-while loop executes certain statements till the specified condition is True
These loops are similar to the while loops, except that a do-while loop executes at least once, even if the specified condition is False The syntax is:
Trang 44Java Simplified / Session 22 / 44 of 45
Example
44
Trang 46Java Simplified / Session 22 / 46 of 45
Example
46
Trang 47 Three jump statements are:
◦ break
◦ continue
◦ return
The three uses of break statements are:
◦ It terminates a statement sequence in a switch statement
◦ It can be used to exit a loop
◦ It is another form of goto
Jump Statements
Trang 48Java Simplified / Session 22 / 48 of 45
Example
48
Trang 49Ngoại lệ là gì?
Khi một ngoại lệ xảy ra, chương trình kết thúc đột ngột, điều khiển
được trả về cho OS
Trình xử lý ngoại lệ được thực hiện để xác định lỗi và bẫy nó
Nếu gặp phải một lỗi khi thực thi chương trình, một ngoại lệ sẽ xảy ra
ERROR !!
Ví dụ: 5/ 0 =
Trang 50Java Simplified / Session 22 / 50 of 45
Trang 51Trình xử lý ngoại lệ trong Java
Các lớp Error và Exception xử lý các lỗi trong Java
Khi một ngoại lệ xảy ra:
◦ một thể hiện biểu diễn ngoại lệ đó được tạo ra
◦ Thể hiện này sau đó được truyền cho phương thức rút trích và xử lý thông tin
Trình xử lý ngoại lệ Java được quản lý thông qua năm từ khoá: try,
catch, throw, throws, và finally
Trang 52Java Simplified / Session 22 / 52 of 45
Trình xử lý ngoại lệ trong Java
khối try : chứa các lệnh trong chương trình cần được khảo sát ngoại lệ
Từ khoá catch: có thể bắt ngoại lệ và xử lý nó một cách hợp lý
Throw: Để ném bằng tay một ngoại lệ
thức này sẽ ném một ngoại lệ
Khối finally: ta có thể xác định mã lệnh thực sự cần thực thi trước khi một phương thức trả về
Trang 53Phân cấp các lớp Exception
Trang 54Java Simplified / Session 22 / 54 of 45
Mô hình xử lý ngoại lệ
Hai cách xử lý ngoại lệ trong Java
◦ Các lệnh có thể ném các ngoại lệ nằm trong khối try và các lệnh xử lý ngoại
lệ trong khối catch
◦ Một phương thức có thể được đặc tả theo cách sao cho khi ngoại lệ xảy ra thì
việc thực thi nó bị cấm
Trang 55Khối try và catch – Ví dụ
Trang 56Java Simplified / Session 22 / 56 of 45
Trang 57Các phương thức trong ví dụ
toString() rút trích biểu diễn thông tin lưu trong một đối tượng
Exception dưới dạng String
printStackTrace() dùng để in ra nguyên nhân gây ngoại lệ và dòng
lệnh tạo ra nó
Trang 58Java Simplified / Session 22 / 58 of 45
……….
try{
} catch(ArrayIndexOutOfBoundsException e) { }
catch(Exception e) { }
……….
Nhiều khối catch
ArrayIndexOutOfBoundsException là một lớp con của lớp Exception được xử
lý đầu tiên
Một đoạn code có thể tạo ra nhiều lỗi
Nhiều khối catch phải được cung cấp
Mỗi lệnh catch có thứ tự xuất hiện của nó
Trang 59String num = args[0];
int numValue = Integer.parseInt(num);
System.out.println("The square is: " + numValue * numValue);
Trang 60Java Simplified / Session 22 / 60 of 45
Khối try - catch lồng nhau
Trong trường hợp đó, các trình xử lý ngoại lệ phải lồng nhau
Khi các khối try lồng nhau được dùng, khối try bên trong sẽ thực thi
trước
Đôi khi một phần của khối có thể gây ra một lỗi và toàn bộ khối có thể gây ra một lỗi khác
Trang 61int numValue = Integer.parseInt( args[0]);
System.out.println("The square is " + numValue * numValue);
Trang 62Java Simplified / Session 22 / 62 of 45
Khối finally
Đảm bảo rằng tất cả các việc dọn dẹp được thực hiện khi một ngoại lệ xảy ra
Dùng kết hợp với khối try
Được đảm bảo thực thi bất kể ngoại lệ có xảy ra hay không
catch block finally
Exception
finally
No exception
try block
Trang 63Khối finally
try {
… } catch(Exception1 e1) {
… } catch(Exception2 e2) {
… } finally {
…
Trang 64Java Simplified / Session 22 / 64 of 45
System.out println( "Exception occured" );
System.out println( "C" );
static void staticLengthmethod() {
System.out println( str length());
}
Trang 65Sử dụng throw
Một phương thức có thể ném ra nhiều ngoại lệ
Ngoại lệ được ném ra dùng từ khoá throw
try {
if(flag<0) {
throw new NullPointerException();
} }
Trang 66Java Simplified / Session 22 / 66 of 45 Java Simplified / Session 12 / 66 of 27
Sử dụng throws
Tửừ khoá throws liệệt kệ các ngoaệi lệệ mà phửơng thửức chặện
public static void main (String[] args) throws IOException
{
BufferedReader in =
new BufferedReader ( new InputStreamReader (System.in ));
int num1;
double num2, Mul;
System.out print ( "Enter the number 1: " );
num1 = Integer.parseInt (in.readLine());
System.out print ( "Enter the number 2: " );
num2 = Double.parseDouble (in.readLine());
Mul = num1 * num2;
System.out println ( "Mul is: " + Mul);
}
Trang 67Ngoại lệ do người dùng định nghĩa
Cần có lớp ngoại lệ do người dùng định nghĩa:
◦ Nên là lớp con của lớp Exception
◦ Kiểu ngoại lệ mới có thể được bắt độc lập với những lớp con khác của
Throwable
◦ Được tạo ra sẽ có tất cả các phương thức của lớp Throwable
Những ngoại lệ xây dựng sẵn không phải lúc nào cũng đủ để bẫy tất cả lỗi
Trang 68Java Simplified / Session 22 / 68 of 45 Java Simplified / Session 12 / 68 of 27
class ArraySizeException extends NegativeArraySizeException
checkSize();
} catch(ArraySizeException e) {
System.out.println(e);
} }
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 UserDefinedException(Integer.parseInt(arg[0]));
} }
Trang 69RuntimeException Lớp cơ sở cho nhiều ngoại lệ java.lang
ArthmeticException Trạng thái lỗi về số, ví dụ như ‘chia cho 0’
IllegalAccessException Lớp không thể truy cập
IllegalArgumentException Phương thức nhận một đối số không hợp lệ
ArrayIndexOutOfBoundsExeption Kích thước của mảng lớn hơn 0 hay lớn hơn kích thước thật sự của mảng NullPointerException Khi muốn truy cập đối tượng null
SecurityException Việc thiết lập cơ chế bảo mật không được hoạt động
ClassNotFoundException Không thể nạp lớp yêu cầu
NumberFormatException Việc chuyển đối không thành công từ chuỗi sang số thực
FileNotFoundException Không thể định vị tập tin
Trang 70Java Simplified / Session 22 / 70 of 45
Dễ sử dụng
◦ dàng chuyển điều khiển đếnnơ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ạilệ khỏi thuật toán
◦ tách mã xử lý
◦ sử dụng cú pháp khác
Không bỏ sót ngoại lệ (ném tự động)
Làm chương trình dễ đọc hơn, an toàn hơn
Ưu điểm của ném bắt ngoại lệ
70
Trang 71 Khai báo:
◦ <Type>[] <arrayname>;
◦ <Type> <arrayname>[];
◦ <Type>: kiểu nguyên thủy hoặc kiểu lớp
◦ Ex: int [] IntArray, IntVariable;
Poly[] recArray, squArray, ovalArray;
Tạo lập đối tượng: dùng new
◦ <Arrayname> = new <Type>[size];
◦ Ex: IntArray=new Int[10]; recArray=new Poly[5];
Kết hợp: <Type1>[] <arrayname> = new <Type2>[size];
Khởi tạo: khai báo, tạo lập, gán gtri
◦ <Type>[] <arrayname>={value1, value2 }
Cấu trúc mảng
Trang 72Java Simplified / Session 22 / 72 of 45
Truy xuất mảng: <Arrayname>.[index]
◦ index: 0-> Arrayname.length-1
Ngoại lệ: ArrayIndexOutOfBoundsExceptin
Array
72
Trang 73for ( int i=0; i < mangA length ; i++)
System.out print( " " + mangA [i]);
System.out println();
}
Trang 74Java Simplified / Session 22 / 74 of 45
int[] myCopy(int[] a) {
int b[] = new int[a.length];
for (i=0; i<a.length; i++)
Trang 75 Khai báo
◦ <Type>[] [] []… <arrayname>;
◦ <Type> <arrayname>[][]…;
Khai báo,tạo lập:
◦ Ex: int [][] A=new int[4][5];
Khởi tạo: khai báo, tạo lập, gán gtri
Ex: int [] [] matrix = { {3,5,6,0}, {1,2,0,3}, {0,1,2,4}}
int c[][] = new int[2][];
c[0] = new int[5];
Multi Dimensional Array
Trang 76Java Simplified / Session 22 / 76 of 45
import java.util.Scanner;
class vd_math {
public static int n =2;
public static int m =3;
public static int [][] A;
public static void nhap() {
int i,j;
Scanner nhap = new Scanner(System.in);
for ( i=0; i<=n-1; i++)
Trang 77public static void xuat() {
Trang 78Java Simplified / Session 22 / 78 of 45
System.arraycopy(src, s_off, des, d_off, len)
◦ src/ des : mảng nguồn,
◦ s_off/ d_off : offset của mảng nguồn/đích
◦ len: số phầntử cần copy
Copy nội dung của dữ liệu nguyên thủy, copy tham chiếu đối với đối tượng
Cung cấp 4 phương thức static
◦ fill(): khởi tạo các phần tử của mảng vớimột giá trị như nhau
Trang 79int b[] = new int[a.length];
System.out.println( Arrays.equals (a,b));
Trang 80Java Simplified / Session 22 / 80 of 45
◦ Math.E
◦ Math.PI
Các phương thức static
◦ type abs(type), sqrt(double)
◦ double ceil(double), double floor(double)
◦ int round(float), long round(double)
◦ type max(type, type), type min(type, type)
◦ double random(): sinh số ngẫu nhiên trong đoạn [0.0,1.0]
Xử lý toán học: Math class
80
Trang 82Java Simplified / Session 22 / 82 of 45
Trang 83 Khởi tạo xâu:
◦ String str=“cong hoa xa hoi” (ko dung constructor)
◦ Dùng toán tử new:
◦ String str= new String(“cong hoa”);
◦ String str= new String(mang); nhập xâu từ mảng
◦ String str= new String(buff); buff là chuỗi động
Độ dài xâu: int length()
Ký tự thứ i: char charAt(int i)
Hoa: String toUperCase(),
Chữ thường: String toLowerCase()
Xâu bắt đầu là s: boolean startWith(String s)
Xâu kết thúc là s: boolean endWith(String s)
String class
Trang 84Java Simplified / Session 22 / 84 of 45
Ghép xâu: String concat(String s) hoặc dùng +
String str1=new String("hello");
String str2=new String("Hello");
String str3=new String("hello all");
Trang 85 Vị trí xuất hiện đầu tiên/cuối cùng của ch (bắt đầu từ start)
◦ indexOf(int ch); lastindexOf(int ch);
◦ indexOf(int ch, int start); lastindexOf(int ch, int start)
Vị trí xuất hiện đầu tiên/cuối cùng của xâu con str (bắt đầu từ start)
◦ indexOf(String str); lastindexOf(String str);
◦ indexOf(String str, int start); lastindexOf(String str, int start);
Thay thế:
◦ String replace(char old, char new);
◦ String replaceAll(String src, String dst)
Method: xâu con