CHƢƠNG 3 XỬ LÝ NGOẠI LỆ EXCEPTION HANDLING
3.4. Định nghĩa một ngoại lệ mới
Trong một số trường hợp, các ngoại lệ của Java khơng đủ để kiểm sốt tất cả các lỗi. Cần phải có các lớp ngoại lệ do người dùng định nghĩa.
Ngoại lệ tự định nghĩa là class kế th a t class Exception hoặc lớp con của class Exception. Lớp ngoại lệ mới này có tất cả các phương thức của lớp Throwable.
1 public class MyException extends Exception {
2 public MyException(String msg) { 3 super(msg);
4 }
5 public MyException(String msg, Throwable cause) { 6 super(msg, cause);
7 } 8 }
9 public class MyException extends Exception { 10 public MyException(String msg) {
1 public class FileExample {
2 public void copyFile(String fName1, String fName2) throws MyException {
3 if (fName1.equals(fName2))
4 throw new MyException("File trung ten");
5 // các lệnh thực hiện copy file 6 System.out.println("Copy completed");
7 } 8 }
Case Study Quản Lý Sinh Viên
1. Bổ sung code, xử lý và thông báo khi nhập các trường số là số âm, các trường String không được null.
1 public MonHoc(String maMonHoc, String tenMonHoc, int soTinchi) {
2 if (maMonHoc == null || tenMonHoc == null) {
3 throw new IllegalArgumentException("MaMonHoc va TenMonHoc khong la null"); 4 }
5 if (soTinchi < 0) {
6 throw new IllegalArgumentException("SoTinChi khong duoc la so am"); 7 }
8 this.maMonHoc = maMonHoc; 9 this.tenMonHoc = tenMonHoc; 10 this.soTinchi = soTinchi; 11 }
2. Tạo ngoại lệ mới để báo lỗi khi nhập điểm không hợp lệ. Điều kiện điểm phải nằm trong khoảng t 0 đến 10. Điều chỉnh code trong lớp DangKyHocPhan để kiểm lỗi nhập điểm.
1 public class InvalidMarkException extends Exception {
2 public InvalidMarkException(String msg) { 3 super(msg);
4 }
5 public InvalidMarkException(String msg, Throwable cause) { 6 super(msg, cause);
7 } 8 }
1 public void setDiemQuaTrinh(float diemQuaTrinh) throws InvalidMarkException {
2 if (diemQuaTrinh < 0 || diemQuaTrinh > 10)
3 throw new InvalidMarkException("Diem phai tu 0 den 10"); 4 this.diemQuaTrinh = diemQuaTrinh;
5 }
3. Viết TestCase để test các trường hợp bắt lỗi dữ liệu. 1 @Test(expected = IllegalArgumentException.class)
2 public void testConstructorException() {
3 MonHoc monHoc1 = new MonHoc("CNC1900111", null, -5); 4 }
Bài tập
Bài 1. Thêm phần xử lý ngoại lệ cho các bài tập ở các chương trước.
Bài 2. Viết chương trình thực hiện phép chia, có xử lý lỗi ngoại lệ với trường hợp số bị
chia bằng 0.
Bài 3. Viết chương trình cho nhập vào 2 số nguyên (dùng Scanner hoặc JoptionPane),
xuất kết quả phép chia 2 số này. Yêu cầu kiểm tra việc nhập số (tử và mẫu không được nhập chữ, mẫu khơng được bằng 0). Chương trình sẽ hiển thị thơng báo khi người dùng nhập sai dạng dữ liệu toán hạng và cho nhập lại đến khi nhập đúng.
(NumberFormatException)
Bài 4. Một lớp HinhTamGiac với 3 cạnh. Trong một hình tam giác, tổng 2 cạnh ln lớn
hơn cạnh còn lại. Hãy xây dựng lớp IllegalTriangleException chỉnh sửa lại Constructor HinhTamGiac tung (throws) ra ngoại lệ IllegalTriangleException khi các cạnh truyền vào vi phạm luật trên.
publicTriangle(int a, int b, int c) throws IllegalTriangleException { // Implement it
}
Bài 5. Viết chương trình khởi tạo mảng 50 số nguyên ngẫu nhiên, người dùng nhập vào
một chỉ số và chương trình hiển thị giá trị của phần tử tại chỉ số đó. Trường hợp người dùng nhập vào chỉ số nằm ngồi mảng, chương trình hiển thị thơng báo: “Out of Bounds”