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ệ