- Khóa học Offline tại Hà Nội
- Khóa học Java Online tại Udemy
- Giới thiệu Java
- Java là gì?
- Lịch sử Java
- Tổng quan
- Cài đặt Java
- Cách thiết lập Path
- Chương trình Hello World
- Phân tích chương trình Hello World
- Cú pháp Java cơ bản
- JDK, JRE và JVM
- Biến trong Java
- Kiểu dữ liệu
- Toán tử
- Các kiểu vòng lặp
- Lệnh if, switch
- Đối tượng Number
- Đối tượng Character
- Khái niệm OOP
- Lớp và Đối tượng
- Phương thức
- Nạp chồng phương thức (Overloading)
- Constructor
- Từ khóa static
- Từ khóa this
- Tính kế thừa (IS-A)
- Quan hệ (HAS-A)
- Ghi đè phương thức (Overriding)
- Kiểu trả về Covariant
- Từ khóa super
- Từ khóa final
- Tính đa hình
- Dynamic Binding
- Toán tử instanceof
- Tính trừu tượng
- Lớp abstract
- Interface
- Lớp abstract vs Interface
- Java Package
- Các kiểu Modifier
- Non-Access Modifier
- Access Modifier
- Tính bao đóng
- Lớp Object
- Nhân bản đối tượng
- Mảng (Array)
- Lớp Wrapper
- Gọi bởi giá trị
- Từ khóa strictfp
- Date & Time
- Regular Expression
- File và I/O
- ByteArrayInputStream
- DataInputStream
- ByteArrayOutputStream
- DataOutputStream
- Lớp File
- Lớp FileReader
- Lớp FileWriter
- Đối tượng String
- Immutable String
- So sánh chuỗi
- Nối chuỗi
- Chuỗi con
- Phương thức của lớp String
- Lớp StringBuffer
- Lớp StringBuilder
- String vs StringBuffer
- StringBuilder vs StringBuffer
- Phương thức toString()
- Lớp StringTokenizer
- Exception là gì
- Khối try-catch
- Khối finally
- Từ khóa throw
- Từ khóa throws
- ExceptionHandling vs MethodOverriding
- Custom Exception
- Cấu trúc dữ liệu
- Enumeration Interface
- Lớp BitSet
- Lớp Vector
- Lớp Stack
- Lớp Dictionary
- Lớp Properties
- Java Collection
- Collection Interface
- List Interface
- Set Interface
- SortedSet Interface
- MapEntry Interface
- Lớp ArrayList
Khối try-catch trong Java
Khối try trong Java
Khối try trong Java được sử dụng để bao quanh code mà có thể ném một Exception. Nó phải được sử dụng bên trong phương thức. Khối try phải được theo sau bởi hoặc khối catch hoặc khối finally.
Cú pháp của khối try-catch trong Java
try{ //code ma co the nem exception }catch(Exception_class_Name ref){}
Cú pháp của khối try-finally trong Java
try{ //code ma co the nem exception }finally{}
Khối catch trong Java
Khối catch trong Java được sử dụng để xử lý các Exception. Nó phải được sử dụng chỉ sau khối try. Bạn có thể sử dụng nhiều khối catch với một khối try đơn.
Vấn đề khi không có Exception Handling
Chúng ta cùng tìm hiểu vấn đề nếu không sử dụng khối try-catch.
public class Testtrycatch1{ public static void main(String args[]){ int data=50/0;//co the nem exception System.out.println("Phan code con lai..."); } }
Chương trình sẽ cho kết quả sau:
Exception in thread "main" java.lang.ArithmeticException: / by zero
Như trong ví dụ trên, phần còn lại của code không được thực thi (trong ví dụ này là lệnh in Phan code con lai… không được in). Giả sử nếu có khoảng 100 dòng code sau exception, thì tất cả các dòng code này sẽ không được thực thi.
Xử lý vấn đề trên bởi Exception Handling trong Java
Bây giờ, cùng ví dụ trên, chúng ta sử dụng khối try-catch để xử lý vấn đề trên.
public class Testtrycatch2{ public static void main(String args[]){ try{ int data=50/0; }catch(ArithmeticException e){System.out.println(e);} System.out.println("Phan code con lai..."); } }
Chương trình sẽ cho kết quả sau:
java.lang.ArithmeticException: / by zero Phan code con lai...
Lúc này, phần còn lại của code đã được thực thi.
Chế độ làm việc nội tại của khối try-catch trong Java
Đầu tiên, JVM kiểm tra xem exception đã được xử lý hay chưa. Nếu exception chưa được xử lý, JVM cung cấp một Exception Handler mặc định, để thực hiện các tác vụ sau:
In ra miêu tả của exception đó.
In ra stack trace (cấu trúc thứ bậc của phương thức nơi mà exception xuất hiện).
Làm cho chương trình ngừng lại.
Nhưng nếu exception đã được xử lý bởi Lập trình viên, thì luồng chuẩn của ứng dụng được duy trì (hay là phần còn lại của code được thực thi).
Nhiều khối catch trong Java
Nếu bạn phải thực hiện các tác vụ khác nhau mà có thể xảy ra các exception khác nhau, bạn sử dụng nhiều khối catch trong Java. Bạn theo dõi ví dụ đơn giản sau:
public class TestMultiCatchBlock{ public static void main(String args[]){ try{ int a[]=new int[5]; a[5]=30/0; } catch(ArithmeticException e){System.out.println("Task1 duoc hoan thanh");} catch(ArrayIndexOutOfBoundsException e){System.out.println("Task2 duoc hoan thanh");} catch(Exception e){System.out.println("Task chung duoc hoan thanh");} System.out.println("Phan code con lai..."); } }
Chương trình sẽ cho kết quả sau:
Task1 duoc hoan thanh Phan code con lai...
Qui tắc 1: Tại một thời điểm, chỉ một exception được xuất hiện và tại một thời điểm chỉ có một khối catch được thực thi.
Qui tắc 2: Tất cả khối catch phải được sắp xếp từ cụ thể nhất tới chung nhất, ví dụ: việc bắt ArithimeticExption phải ở trước việc bắt Exception.
class TestMultipleCatchBlock1{ public static void main(String args[]){ try{ int a[]=new int[5]; a[5]=30/0; } catch(Exception e){System.out.println("Task chung duoc hoan thanh");} catch(ArithmeticException e){System.out.println("Task1 duoc hoan thanh");} catch(ArrayIndexOutOfBoundsException e){System.out.println("Task2 duoc hoan thanh");} System.out.println("Phan code con lai..."); } }
Chạy chương trình trên sẽ cho một lỗi compile time error.
Lồng khối try trong Java
Việc một khối try bên trong một khối try khác thì được gọi là các khối try được lồng vào nhau, hay là lồng các khối try trong Java.
Tại sao sử dụng các khối try lồng nhau trong Java
Đôi khi có một tình huống là một phần của một khối code có thể gây ra một lỗi và toàn bộ khối lại có thể gây ra lỗi khác. Trong các tình huống đó, Exception Handler phải được lồng vào nhau. Cú pháp:
.... try { lenh 1; lenh 2; try { lenh 1; lenh 2; } catch(Exception e) { } } catch(Exception e) { } ....
Ví dụ về các khối try lồng nhau trong Java
class Excep6{ public static void main(String args[]){ try{ try{ System.out.println("Thuc hien phep chia"); int b =39/0; }catch(ArithmeticException e){System.out.println(e);} try{ int a[]=new int[5]; a[5]=4; }catch(ArrayIndexOutOfBoundsException e){System.out.println(e);} System.out.println("Lenh khac"); }catch(Exception e){System.out.println("Da xu ly");} System.out.println("Luong chuan.."); } }
Chương trình sẽ cho kết quả sau:
Thuc hien phep chia java.lang.ArithmeticException: / by zero java.lang.ArrayIndexOutOfBoundsException: 5 Lenh khac Luong chuan..
Bài học Java phổ biến tại vietjack.com: