Transcript Session 9

Session 9
Interface
Exception
Interface – giao diện
 Khai báo với từ khoá interface
 Không được khởi tạo với new
 Các phương thức mặc định là public và abstract
 Các phương thức được override trong các class con
 Class có thể cài đặt nhiều interface
 Interface có thể kế thừa interface khác
Ví dụ
interface Cal {
public int add(int a, int b);
public int sub(int a, int b);
}
interface Calcular extends Cal {
public int mul(int a, int b);
public float div(int a, int b);
}
class Calculation implements Calcular{
public int add(int a, int b) { return a + b; }
public int sub(int a, int b) { return a – b; }
public int mul(int a, int b) { return a*b; }
public float div(int a, int b) { return (float) a/b; }
}
Exception (Ngoại lệ)
 Ngoại lệ là các lỗi xảy ra trong chương trình
 Chương trình sẽ kết thúc bất thường khi có lỗi xảy ra,
ví dụ:
ERROR !!
 Quyền điều khiển chương trình không trả về cho hệ
điều hành
Nguyên nhân sinh ra ngoại lệ
 Lỗi chương trình
 Chia cho 0
 Vượt quá chỉ số của mảng
 Dùng đối tượng nhưng chưa khởi tạo
 …
 Lỗi chương trình khách
 Mở file không tồn tại
 …
 Lỗi phát sinh trong quá trình thực thi chương trình
 Tràn vùng nhớ
 Lỗi kết nối mạng
 …
Phân loại ngoại lệ
 Khi lỗi xảy ra trong chương trình, một đối tượng
Exception tự động sinh ra
 Throwable là lớp cha tất cả các ngoại lệ
 Có 2 loại ngoại lệ
 Ngoại lệ được kiểm tra (checked exception), lớp con của lớp
Exception
 Ngoại lệ không được kiểm tra (unchecked exception), lớp
con của RuntimeException
Ngoại lệ được kiểm tra
 InstantiationException: xảy ra khi khởi tạo đối tượng
abstract
 InterruptedException: xảy ra khi một luồng kết thúc
bất thường
 NoSuchMethodException: gọi phương thức không cho
phép
 RuntimeException: xảy ra trong quá trình thực thi
chương trinh
Ngoại lệ không được kiểm tra
 ArithmeticException: lỗi chia cho 0
 ArrayIndexOutOfBoundsException: chỉ mục phần tử trong





mảng < 0 hay vượt quá chiều dài mảng
IllegalArgumentException: đối số phương thức không hợp lệ
NegativeArraySizeException: kích thước mảng < 0
NullPointerException: đối tượng chưa được khởi tạo
NumberFormatException: lỗi chuyển đổi chuỗi sang số
StringIndexOutOfBoundsException: chỉ mục < 0 hay vượt quá
chiều dài mảng
Xử lý ngoại lệ trong Java
 Xử lý ngoại lệ trong Java được quản lý thông qua 5 từ khoá: try,
catch, throw, throws, và finally.
 Đoạn chương trình có khả năng gây ra lỗi sẽ được đặt trong khối
try
 Ngoại lệ xảy ra sẽ được xử lý trong khối catch
Xử lý ngoại lệ trong Java (t.t)
 Khi gặp ngoại lệ:
 Nếu không xử lý: chương trình sẽ kết thúc, JVM sẽ xử lý
 Nếu có xử lý thì các câu lệnh tiếp theo không thực hiện, điều
khiển chuyển vào khối lệnh catch. Khối lệnh sau catch sẽ tiếp
tục thực hiện
class ExceptionDemo{
public static void main(String args[])
{
try {
String text = args[0];
System.out.println(text); //khong thuc hien khi co exception
}
catch(ArrayIndexOutOfBoundException e){
System.out.println("No arguments given! ");
}
}
}
Khối finally
 Khối finally không bắt buộc sử dụng trong try … catch nhưng phải sử
dụng khi try không có catch
 Có thể đặt finally sau try hoặc sau catch
 Khối finally luôn được thực hiện bất chấp ngoại lệ xảy ra hay không, thường
dùng để đóng file, kết nối database, giải phóng vùng nhớ
No exception
finally
try block
Exception
catch block
finally
Ví dụ
class ExceptionDemo{
public static void main(String args[]) {
try
{
String text = args[0];
System.out.println(text); //khong thuc hien khi co exception
} catch(ArrayIndexOutOfBoundException e){
System.out.println("No arguments given! ");
} finally {
System.out.println(“Finally”);
}
}
}
Từ khoá throw và throws
 Throw chỉ ra một ngoại lệ vừa mới xảy ra trong phương
thức
if(đk) throw new exception
int div(int a, int b) {
if(a < 0) throw new ArithmeticException(“a is not 0”);
}
 Throws liệt kê danh sách các ngoại lệ có khả năng xảy ra,
dùng trong chữ kí phương thức
int div(int a, int b) throws ArithmeticException{
if(a < 0) throw new ArithmeticException(“a is not 0”);
}
Sử dụng nhiều khối catch
 Một khối try có thể có nhiều khối catch
 Mỗi khối catch chỉ xử lý duy nhất một ngoại lệ, các khối catch
khác sẽ không được thực thi
 Nếu không có khối catch nào xử lý ngoại lệ, JVM sẽ xử lý
 Khối catch với ngoại lệ là lớp con sẽ được khai báo trước lớp
cha
Ví dụ
FileNotFoundException, IOException là lớp con của Exception nên được khai báo trước, thứ tự 2
exception này không quan trọng. Nếu FileNotFoundException xảy ra, khối cat thứ nhất được xử lý,
2 catch còn lại bị bỏ qua
try - catch lồng nhau
 Là khối try … catch nằm bên trong khối try … catch khác
 Khi gặp ngoại lệ, khối catch bên trong được xử lý trước. Nếu
catch chỉ ra không đúng ngoại lệ, ngoại lệ sẽ được đẩy ra cho
catch bên ngoài. Nếu catch bên ngoài chỉ ra không đúng ngoại lệ,
JVM sẽ xử lý ngoại lệ này
Ví dụ
class NestedTry
{
public static void main(String args[])
{
try
{
int num = args.length;
try
{
int numValue = Integer.parseInt( args[0]);
System.out.println("The square is " + numValue * numValue);
} catch(NumberFormatException nb) {
System.out.println("Not a number! ");
}
} catch(ArrayIndexOutOfBoundsException ne)
{
System.out.println("No arguments given! ");
}
}
}
Các phương thức của ngoại lệ
 getMessage(): thông tin về ngoại
 toString(): tên ngoại lệ cộng với
kết quả phương thức getMessage()
 printStackTrace() : dấu vết ngoại lệ