}catch(ArithmeticException a){ System.out.println(“Cannot Divide by zero”);
}
}
}
Kết xuất của chương trình:
Trong chương trình này, một số được chia cho 0. Đây không là phép toán số học hợp lệ. Do đó một ngoại lệ xảy ra và được bắt giữ trong khối catch. Khi nhận biết được loại ngoại lệ nào có thể xảy ra, ta viết lệnh trong khối ‘catch’ tương ứng. Ở đây, ‘a’ được sử dụng như một đối tượng của ArithmeticException để in các chi tiết về ngoại lệ.
Nếu thay thế lệnh ‘System.out.println’ của khối ‘catch’ bằng “System.out.println (a.getMessage())” thì kết xuất của chương trình như sau:
Khi các khối ‘try’ được sử dụng mà không có các khối ‘catch’ nào, chương trình sẽ biên dịch mà không gặp lỗi nào nhưng sẽ bị ngắt khi thực thi. Vì ngoại lệ đã xảy ra khi thực thi chương trình mà không được xử lý.
3.8.7. Khối ‘finally’
Khối ‘finally’ thực hiện việc thu dọn khi ngoại lệ xảy ra. Khối này có thể kết hợp với khối ‘try’. Khối ‘finally’ chứa các câu lệnh thu hồi tài nguyên hoặc in ra các câu lệnh thông báo. Các lệnh này bao gồm:
Đóng tập tin.
Đóng ResultSet (được sử dụng trong chương trình cơ sở dữ liệu).
Đóng lại các kết nối được tạo trong cơ sở dữ liệu.
try{ doSomethingThatMightThrowAnException();
}finally{ cleanup();
}
Phương thức ‘cleanup()’ được gọi nếu phương thức ‘doSomething That Might Throw AnException()’ gây ra ngoại lệ. Mặt khác ‘cleanup()’ cũng được gọi ngay khi không có ngoại lệ nào xảy ra và thực hiện tiếp phần sau khối lệnh ‘finally’.
Khối ‘finally’ là tuỳ ý, không bắt buộc. Khối này đặt sau khối ‘catch’ cuối cùng. Chương trình sẽ thực thi câu lệnh đầu tiên của khối ‘finally’ ngay sau khi gặp câu lệnh ‘return’ hay lệnh ‘break’ trong khối ‘try’. Khối ‘finally’ bảo đảm lúc nào cũng được thực thi, bất chấp có ngoại lệ xảy ra hay không.
Ví dụ 3.28:
class FinallyDemo{
String name; FinallyDemo(String args[]){
try{
name=new String(“Aptech Limited”); System.out.println(name); System.out.println(“Division Result is” + no1/no2);
}catch(ArithmeticException i){ System.out.println(“Cannot Divide by zero”);
}finally{
name=null; // clean up code System.out.println(“Finally executed”);
}
}
public static void main(String args[]{ new FinallyDemo(args);
} }
Kết xuất của chương trình:
3.8.8. Các ngoại lệ được định nghĩa với lệnh ‘throw’ và ‘throws’
Các ngoại lệ có thể được tạo ra bằng cách sử dụng từ khoá ‘throw’. Toán hạng của throw là một đối tượng thuộc lớp được thừa kế từ ‘Throwable’.
Đoạn lệnh sau chỉ ra cách sử dụng của lệnh ‘throw’:
try{
if (flag<0){
throw new MyException(); // user-defined
}
}
Một phương thức có thể tạo ra nhiều ngoại lệ. Để làm được điều này, chỉ cần liệt kê danh sách các ngoại lệ mà phương thức có thể tạo ra trong phần định nghĩa phương thức. Đoạn mã sau minh họa cách sử dụng của từ khoá ‘throws’ để tạo nhiều ngoại lệ:
public class Example{
// Các ngoại lệ cách nhau bởi dấu phẩy
public void exceptionExample() throws ExException, LookupException{ try{
// các lệnh
}catch(ExException exmp){
}catch(LookupException lkpex){
}
}
}
Ví dụ 3.29:
class ArraySizeException extends NegativeArraySizeException{
ArraySizeException(){ // constructor
super(“You have passed an illegal array size”);
}
}
class ThrowDemo{
int size, array[]; ThrowDemo(int s){
size=s; try{
checkSize();
}catch(ArraySizeException e){ System.out.println(e);
}
}
void checkSize() throws ArraySizeException{ if (size < 0)
throw new ArraySizeException();
else
System.out.println(“The array size is ok.”); array = new int[3];
for (int i=0; i<3; i++) array[i] = i+1;
}
public static void main(String arg[]){
new ThrowDemo(Integer.parseInt(arg[0]));
}
}
3.8.9. Danh sách các ngoại lệ
Lớp cha của thứ tự phân cấp ngoại lệ | |
RuntimeException | Lớp cơ sở cho nhiều ngoại lệ Java.lang |
Có thể bạn quan tâm!
- Công nghệ Java - 8
- Công nghệ Java - 9
- So Sánh Giao Diện Và Lớp Trừu Tượng
- Cấu Trúc Phân Cấp Theo Quan Hệ Kế Thừa Của Các Giao Diện Lõi
- Sử Dụng Phương Thức Isalive() Và Join()
- Xây Dựng Lớp Quanlysach Cài Đặt Các Phương Thức Thực Hiện Các Công Việc Sau:
Xem toàn bộ 232 trang tài liệu này.
Lỗi về số học, ví dụ như ‘chia cho 0’. | |
IllegalAccessException | Lớp không thể truy cập. |
IllegalArgumentException | Đối số không hợp lệ. |
ArrayIndexOutOfBoundsExeption | Lỗi tràn mảng. |
NullPointerException | Khi truy cập đối tượng null. |
ClassNotFoundException | Không thể nạp lớp yêu cầu. |
NumberFormatException | Việc chuyển đối từ chuỗi sang số thực không thành công. |
AWTException | Ngoại lệ về AWT |
IOException | Lớp cha của các lớp ngoại lệ I/O |
FileNotFoundException | Không thể định vị tập tin |
ArthmeticException
3.9. Giao diện Collection
3.9.1. Giới thiệu
Cấu trúc tập hợp (collection) cho phép tập hợp các đối tượng lại để xử lý như một đơn vị. Các đối tượng bất kỳ có thể được lưu trữ, tìm kiếm và được thao tác như là các phần tử của tuyển tập và các phần tử là không thuần nhất.
3.9.2. Các kiểu collection
3.9.2.1. List (danh sách)
Cấu trúc list là dạng tập hợp các phần tử được sắp xếp theo thứ tự trong đó cho phép lặp (hai phần tử giống nhau). Ngoài những hàm mà nó được kế thừa từ Collection, List còn bổ sung thêm những hàm sau:
- Object get (int index): Trả lại phần tử xác định bởi index.
- Object set (int index,Object elem) : Thay thế phần tử được xác định bới index bằng elem.
- Void add (int index,Object elem) : Chèn elem vào sau mỗi phần tử được xác định bởi index.
- Object remove (int index): Bỏ đi phần tử xác định bởi index
- Boolean addAll (int index,Collection c): Chèn các phần tử của tập hợp c vào vị trí được xác định bới index.
- Int indexOf(Object elem): Cho biêt vị trí xuất hiện lần đầu tiên của elem trong danh sách.
- Int lastdexOf(Object elem): Cho biêt vị trí xuất hiện cuối cùng của elem trong danh sách.
- ListIterator ListIterator (): Trả về các phần tử liên tiếp bắt đầu từ phần tử đầu tiên.
Lớp ArrayList
ArrayList là lớp kiểu mảng động (kích thước thay đổi được). ArrayList là cấu trúc hiệu quả nhất để cài đặt cấu trúc danh sách List. Lớp này được ưa chuộng trong java vì chức năng và tính linh hoạt mà nó cung cấp. Hầu hết các lập trình viên đều chọn ArrayList thay thế cho cách dùng Array truyền thống, bị giới hạn với kích thước xác định. Nếu một số phần tử trong mảng bị xóa đi thì bộ nhớ chứa các phần tử đó không được thu hồi. Ngược lại kích thước của ArrayList có thể tăng hoặc giảm tùy thích.
Khởi tạo ArrayList
Có 2 kiểu khởi tạo ArrayList, đó là non-generic và generic
ArrayList list = new ArrayList(); // non-generic - kiểu cũ ArrayList<String> list = new ArrayList<String>(); // generic - kiểu mới
Các phương thức cơ bản của lớp ArrayList
Mô tả | |
boolean add (Object o) | Được sử dụng để nối thêm phần tử được chỉ định vào cuối một danh sách. |
void add (int index, Object element) | Được sử dụng để chèn các phần tử được chỉ định tại các chỉ số vị trí quy định trong một danh sách. |
Get (int i) | Trả về đối tượng tại vị trí i trong danh sách |
Remove (int index) | Xóa đối tượng tại vị trí có chỉ số index |
Contains (Object item) | Trả về true nếu danh sách chứa đối tượng item |
booleancontains(Object o) | Được sử dụng để trở về true nếu danh sách có chứa đối tượng |
isEmpty( ) | Trả về true nếu danh sách rỗng |
object get(int index) | Trả về đối tượng của ArrayList có chỉ số index |
int size () | – Số phần tử có trong ArrayList. |
Ví dụ 3.30: Sử dụng ArrayList và các phương thức của lớp này:
import java.util.*;
public class ArrayListExample {
public static void main(String args[]) {
/*Khai báo mảng động dùng ArrayList có kiểu là String*/
ArrayList<String> obj = new ArrayList<String>();
/*Cách thêm các phần tử vào mảng động*/ obj.add ("Sinh viên 1");
obj.add ("Sinh viên 2"); obj.add ("Sinh viên 3"); obj.add ("Sinh viên 4"); obj.add ("Sinh viên 5");
/* Hiển thị các phần tử của mảng */ System.out.println("Hiện tại mảng gồm các phần tử:"+obj);
/*Thêm phần tử khác vào đầu mảng*/ obj.add (0, "Sinh viên 6");
obj.add (1, "Sinh viên 7");
/*Xóa phần tử đã cho trong mảng*/ obj.remove ("Sinh viên 3"); obj.remove ("Sinh viên 2");
System.out.println ("Hiện tại mảng gồm các phần tử:"+obj);
/*Xóa phần tử trong mảng theo chỉ mục*/ obj.remove (1);
System.out.println("Hiện tại mảng gồm các phần tử:"+obj);
}
}
Kết quả:
LinkedList
Lớp LinkedList trong java sử dụng cấu trúc danh sách liên kết Doubly (Doubly Linked List) để lưu trữ các phần tử.
Những điểm cơ bản về lớp LinkedList:
Lớp LinkedList trong java có thể chứa các phần tử trùng lặp.
Lớp LinkedList duy trì thứ tự của phần tử được thêm vào.
Trong java lớp LinkList, thao tác nhanh vì không cần phải dịch chuyển nếu bất kỳ phần tử nào bị xoá khỏi danh sách.
Lớp LinkedList trong java có thể được sử dụng như list (danh sách), stack (ngăn xếp) hoặc queue (hàng đợi).
Khởi tạo LinkedList trong java
Có 2 kiểu khởi tạo LinkedList , đó là non-generic và generic
LinkedList list = new LinkedList(); // non-generic - kiểu cũ LinkedList<String> list = new LinkedList<String>(); // generic - kiểu mới
Các phương thức cơ bản của LinkedList
Mô tả | |
boolean add (Object o) | Được sử dụng để nối thêm phần tử được chỉ định vào cuối một danh sách. |
void add (int index, Object element) | Được sử dụng để chèn các phần tử được chỉ định tại các chỉ số vị trí quy định trong một danh sách. |
void addFirst (Object o) | Được sử dụng để chèn phần tử được chỉ định vào đầu danh sách. |
void addLast (Object o) | Được sử dụng để chèn phần tử được chỉ định vào cuối danh sách. |
int size( ) | Được sử dụng để trả lại số lượng các phần tử trong một danh sách |
boolean contains(Object o) | Được sử dụng để trở về true nếu danh sách có chứa một phần tử được chỉ định. |
boolean remove(Object o) | Được sử dụng để xóa phần tử được chỉ định đầu tiên trong một danh sách. |
Object getFirst( ) | Được sử dụng để trả về phần tử đầu tiên trong một danh sách. |
Object getLast( ) | Được sử dụng để trả lại phần tử cuối cùng trong một danh sách. |
int indexOf(Object o) | Được sử dụng để trả về chỉ mục trong một danh sách với sự xuất hiện đầu tiên của phần tử được chỉ định, hoặc -1 nếu danh sách không chứa bất kỳ phần tử nào. |
Được sử dụng để trả lại chỉ mục trong danh sách với sự xuất hiện cuối cùng của phần tử được chỉ định, hoặc -1 nếu danh sách không chứa bất kỳ phần tử nào. |