Sơ Đồ Thực Hiện Của Xử Lý Ngoại Lệ

}

abstract public void Nhap(); abstract public void HienThi();

}


Lớp con cán bộ kế thừa lớp giảng viên import java.util.Scanner;

public class CanBo extends GiangVien{ private String ChucVu;

private double HeSo;

static Scanner s=new Scanner(System.in); public String getChucVu() {

return ChucVu;


}


public double getHeSo() { return HeSo;

}

public void setChucVu(String ChucVu) { this.ChucVu = ChucVu;

}

public void setHeSo(double HeSo) { this.HeSo = HeSo;

}

public CanBo() {

}

public CanBo(String ChucVu, double HeSo, String Ma, String HoTen, String DiaChi)

{

super(Ma, HoTen, DiaChi); this.ChucVu = ChucVu; this.HeSo = HeSo;

}

@Override

public void Nhap() {

System.out.print("Nhap Ma:");String Ma = s.nextLine(); System.out.print("Nhap Ten:");String Ten = s.nextLine(); System.out.print("Diachi:");String DiaChi = s.nextLine(); System.out.print("Chuc vu:");String Chucvu = s.nextLine(); System.out.print("He so:");double HeSo = s.nextDouble(); this.setMa(Ma);

this.setHoTen(Ten); this.setDiaChi(DiaChi); this.setChucVu(Chucvu); this.setHeSo(HeSo);

}

@Override

public void HienThi() {

System.out.println(" | " + this.getMa() + " | "+this.getHoTen()+" | "+this.getDiaChi()+" | "+ this.getChucVu()+"|"+this.getHeSo()+"|");

}

public boolean KiemTra(String HoTen)

{


if(this.getHoTen().equals(HoTen)) return true;

else

return false;

}


public static void main(String[] args) { CanBo[] dscb = new CanBo[100]; char tiep='y'; int k=0; while(tiep=='y')

{

CanBo cb = new CanBo(); cb.Nhap();

dscb[k]=cb; k++;

System.out.print("Nhap tiep(y/n)");tiep=s.next().charAt(0); String s1 = s.nextLine();

}


for(int i=0;i<k;i++)

{


CanBo cb = new CanBo(); cb = dscb[i]; cb.HienThi();

}


System.out.print("Nhap ho ten can bo can tim");String Hoten =s.nextLine(); for(int i=0;i<k;i++)

{


CanBo cb = new CanBo(); cb = dscb[i]; if(cb.KiemTra(Hoten))

cb.HienThi();

}

}

}


Ở đây ta thấy có 2 phương thức Nhap() và HienThi() là các phương thức trừu tượng được tạo ở lớp GiangVien và nó được định nghĩa chồng ở lớp cán bộ và để định nghĩa nó là một cài đặt của một phương thức trừu tượng ta dùng từ khóa @Override ở trước phương thức đó.

2.7. Xử lý ngoại lệ

Đối với người lập trình họ có thể gặp một trong các lỗi sau:

- Lỗi cú pháp (syntax error)

- Lỗi logic thuật toán

- Lỗi lúc thực thi ( runtime error)

- Đối với lỗi cú pháp người lập trình có thể phát hiện và sửa lỗi, dựa vào trình biên dịch, đây là lỗi dễ phát hiện và sửa chữa, tuy nhiên đây cũng là lỗi gây khó khăn và chán nản đối với người mới học lập trình.

- Đối với lỗi thuật toán, đây là lỗi khó phát hiện và sửa chữa nhất

- Đối với lỗi lúc thực thi, ta hoàn toàn có thể kiểm soát được chúng, thông thường lỗi runtime thường do nguyên nhân khách quan như: truy cập vào một ổ đĩa nhưng ổ đĩa này lại chưa sẵn sàng, hay thực hiện phép chia nhưng mẫu số lại bằng 0, kết nối với máy tính ở xa nhưng máy đó lại không tồn tại…, khi một lỗi runtime xảy ra JVM sẽ phát sinh một ngoại lệ, nếu một chương trình không cung cấp mã sử lý ngoại lệ có thể kết thúc không bình thường.

- Mọi lớp ngoại lệ trong java đều được dẫn xuất từ lớp cơ sở Throwable, ta có thể tạo ra lớp ngoại lệ riêng bằng cách mở rộng lớp Throwable

Việc trả về ngoại lệ của Java gọi là throwing, còn việc nắm bắt đối tượng trả về của chương trình gọi là catching.

Một ngoại lệ (exception) trong chương trình Java là dấu hiệu chỉ ra rằng có sự xuất hiện một điều kiện không bình thường nào đó.

Khi một ngoại lệ xảy ra, đối tượng tương ứng với ngoại lệ đó được tạo ra. Đối tượng này sau đó được truyền cho phương thức là nơi mà ngoại lệ xảy ra. Đối tượng này chứa thông tin chi tiết về ngoại lệ. Thông tin này có thể được nhận về và được xử lý. Các ngoại lệ này có thể là một ngoại lệ chuẩn của Java hoặc có thể là một ngoại lệ do ta tạo ra. Lớp „Throwable‟ được Java cung cấp là cha của tất cả các ngoại lệ trong Java (lớp đầu tiên trong cây thừa kế).

Sau khi bạn đã biết cách khai báo và ném ra biệt lệ, thì phần việc quan trọng nhất là bắt và xử lý biệt lệ.

Vấn đề đối với người lập trình java là phải biết được đoạn mã nào của anh ta có thể gây ra lỗi. Khi họ đã khoanh vùng được đoạn mã có thể gây ra lỗi họ sẽ đặt đoạn mã, có khả năng gây ra lỗi đó trong khối try ( thử làm), và đặt đoạn mã xử lý lỗi trong khối catch ( bắt giữ). Khuôn dạng tổng quát như sau:

try{

// Các lệnh của chương trình

}

catch ( TypeException1 ex){

// mã được thực thi khi một ngoại lệ TypeException1 được phát hiện

}

catch ( TypeException2 ex){

// mã được thực thi khi một ngoại lệ TypeException2 được phát hiện

}

...

catch ( TypeExceptionN ex){

// // mã được thực thi khi một ngoại lệ TypeExceptionN được phát hiện

} finally{

// khối này luôn được thực hiện cho dù có phát sinh ngoại lệ hay không

}

Sơ đồ thực hiện của xử lý ngoại lệ


Hình 2 1 Sơ đồ thực hiện của xử lý ngoại lệ Ví dụ 2 14 Xử lý ngoại lệ 1

Hình 2.1. Sơ đồ thực hiện của xử lý ngoại lệ

Ví dụ 2.14: Xử lý ngoại lệ bắt lỗi chia cho 0

class TryClass{

public static void main(String args[]) { int n=0;

try{


}


System.out.println(1/n);


catch(ArithmeticException ex){ System.out.println(“Loi chia cho 0”);

}

}

}


Khi chạy chương trình này ta se thu được một dòng in ra màn hình như sau: Loi chia cho 0

Bảng liệt kê các exception thường gặp:


Exception

Lý do

ArithmeticException

Lỗi do tính toán, thường là chia cho 0

ArrayIndexOutOfBoundsException

Lỗi do định chỉ số các phần tử của dãy

ArrayStoreException

Chương trình lưu dữ liệu không đồng kiểu trên dãy

FileNotFoundException

Truy cập một tập tin không có (theo đường dẫn)

IOException

Lỗi nhập xuất tổng quát, thường là truy cập một tập tin bị cấm

NullPointerException

Tham khảo đến một đối tượng rỗng

NumberFormatException

Lỗi khi chuyển đổi ký tự thành số

OutOfMemoryException

Không đủ bộ nhớ

SecurityException

Một Applet thực hiện một thao tác bị trình duyệt cấm

StackOverflowException

Hệ thống bị tràn

StringIndexOutOfBoundsException

Chương trình truy cập đến ký tự không có trong chuỗi.

Có thể bạn quan tâm!

Xem toàn bộ 267 trang tài liệu này.

Bảng 2.3. Các exception thường gặp

Trong lớp Throwable có 3 phương thức rất thông dụng cho phép ta hiểu được chi tiết của từng ngoại lệ:

Phương thức

Ý nghĩa

getMessage()

Nhận về một chuỗi là thông tin chi tiết của ngoại lệ

toString()

Chuyển đối tượng thành chuỗi

PrintStackTrace()

Trình bày hệ thống việc gọi các phương thức cho phép dò tìm ngoại lệ

Bảng 2.4. Các phương thức thông dụng của Throwable

Câu hỏi và bài tập chương 2

1. Cho lớp Shape và lớp Tamgiac gồm các thuộc tính và phương thức như sau:


a) Viết chương trình tạo lớp ảo Shape trong đó:

- Các thuộc tính Mau - màu của đối tượng, FillMau- đổ màu cho đối tượng.

- Các phương thức gồm: các setters/getters cho các thuôc tính; các Constructor và Kiemtra(), tinhdientich(), tichchuvi() là 3 phương thức ảo.

b) Viết chương trình tạo lớp Tamgiac kế thừa từ lớp Shape trong đó:

- Các thuộc tính canh1, canh2, canh3 là độ dài các cạnh của tam giác.

- Các phương thức gồm: các setters /getters cho các thuôc tính, các Constructor, phương thức KiemTra() đùng để kiểm tra 3 cạnh có tạo thành một tam giác không, phương thức TinhDienTich() để tính diện tích của tàm giác và TinhChuVi() để tính chu vi của tam giác.

c) Viết lớp Test chạy thử nghiệm cho các lớp vừa tạo để nhập vào các thuộc tính của một tam giác, tính điện tích, chu vi nếu 3 cạnh tạo thành tam giác và hiển thị kết quả ra màn hình.

2.Cho lớp HocVien và lớp Test gồm các thuộc tính và phương thức như sau:


a) Viết chương trình tạo lớp HocVien trong đó:

- Các thuộc tính gồm: Mahv là mã học viên, Hoten là họ tên học viên, Quequan là quê quán của học viên, DiemThi là diểm thi của học viên.

- Các phương thức gồm: các setters/getters cho các thuộc tính, các Constructor.

b) Xây dựng lớp thử nghiệm Test để tạo danh sách học viên(dshv) gồm:

- Các thuộc tính:

n đùng để lưu trữ độ dài của danh sách 0<n <=100.

k dùng để lưu trữ số lượng học viên hiện có trong danh sách.

dshv dùng để lưu trữ danh sách học viên.

s là biến Scanner dùng trong nhập dữ liệu.

- Tạo các phương thức:

NhapHocVien() để nhập một học viên vào danh sách.

HienThiHocVien() để hiển thịcác thông tindanh sách học viên.

TimKiemHocVien() để tìm kiếm một học viên theo họ tên.

c) Viết phương thức main() chạy thử nghiệm các phương thức trên sao cho lặp lại nhập học viên vào danh sách cho đến khi ấn phín „n‟ để kết thúc; hiển thị lại danh sách học viên; nhập vào tên một học viên, tìm kiếm rồi hiển thị lại các thông tin về học viên đó.

3.Cho 2 lớp MatHang và lớp Tivi gồm các thuộc tính và phương thức như sau:

Ngày đăng: 15/07/2022