Kiểu dữ liệu và Exceptions trong Java
Jim White
Java Developer
Error là sự cố nghiêm trọngimport java.util.*;
public class CauseOutOfMemory {
public static void main(String[] args) {
List<Long> numbers = new ArrayList<Long>();
long counter = 0;
while (true) {
numbers.add(counter);
counter++;
}
}
}
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.base/java.lang.Long.valueOf(Long.java:1204)
at foo/exceptions.CauseOutOfMemory.main(CauseOutOfMemory.java:12)
| Ngoại lệ được kiểm tra | Ngoại lệ Runtime ("không kiểm tra") | |
|---|---|---|
| Yêu cầu xử lý | Có | Không |
| Nguyên nhân chung | Yếu tố ngoài tầm kiểm soát | Lỗi lập trình của chúng ta |
| Khả năng khôi phục | Thường có thể nếu dự liệu trước | Thường không thể |
| Cách khôi phục | try/catch hoặc throws | Nên viết code cẩn thận để tránh |
| Ví dụ ngoại lệ | Không tìm thấy tệp | Vượt chỉ số mảng |
Exception không phải là lớp con của RuntimeException là ngoại lệ được kiểm traFileNotFoundException)RuntimeException là lớp cha của mọi ngoại lệ không kiểm traIndexOutOfBoundsException)ArithmeticException)| Lớp con RuntimeException | Khi nào ném |
|---|---|
| ArithmeticException | Tính toán sai như chia cho 0 |
| IndexOutOfBoundsException | Dùng chỉ số cho mảng, String, v.v. vượt phạm vi |
| NegativeArraySizeException | Tạo mảng với kích thước âm |
int y = 5/0; // Mã gây ArithmeticException
int[] list = new int[-1]; // Mã gây NegativeArraySizeException
Exception in thread "main" java.lang.ArithmeticException: / by zero
Exception in thread "main" java.lang.NegativeArraySizeException: -1
public class LoadClass {
public static void main(String[] args) {
Class myClass = Class.forName("com.mysql.Driver");
}
}
LoadClass.java:3: error: unreported exception ClassNotFoundException;
must be caught or declared to be thrown
Class myClass = Class.forName("com.mysql.Driver");
^
1 error
Kiểu dữ liệu và Exceptions trong Java