Ngoại lệ là những sự kiện không mong muốn xảy ra trong quá trình thực hiện chương trình. Khi mã của bạn gặp một ngoại lệ, luồng chương trình của bạn sẽ bị chấm dứt.
Điều quan trọng là bạn phải xử lý các ngoại lệ một cách chính xác khi viết mã bằng Java. Nếu không, mã của bạn có thể kết thúc trong quá trình thực thi và ảnh hưởng đến trải nghiệm của người dùng cuối.
Đó là lúc các từ khóa ném và ném xuất hiện. Từ khóa ném và ném trong Java được sử dụng để xử lý các trường hợp ngoại lệ trong Java. Hướng dẫn này sẽ thảo luận, có tham chiếu đến các ví dụ, cách sử dụng các từ khóa này trong Java.
Ngoại lệ Java
Trong Java, có hai sự kiện có thể ảnh hưởng đến luồng chương trình của bạn:lỗi và ngoại lệ.
Sự kiện đầu tiên là một lỗi, đại diện cho các vấn đề trong Máy ảo Java như rò rỉ bộ nhớ, hệ thống hết bộ nhớ và các vấn đề về tương thích thư viện. Khi gặp lỗi, một chương trình không có khả năng khôi phục. Tuy nhiên, lỗi thường nằm ngoài tầm kiểm soát của lập trình viên, và vì vậy trong Java, chúng tôi không xử lý lỗi.
Ngoại lệ là loại sự kiện thứ hai có thể ảnh hưởng đến chương trình của bạn. Các ngoại lệ có thể được phát hiện và xử lý trong mã của bạn. Khi gặp một ngoại lệ, một đối tượng được tạo với thông tin về ngoại lệ, sau đó bạn có thể sử dụng thông tin này để cho mã của mình biết điều gì sẽ xảy ra nếu gặp phải ngoại lệ.
Một số lý do ngoại lệ xảy ra bao gồm:
- Lỗi trong mã của bạn
- Mở các tệp không tồn tại
- Đầu vào của người dùng không hợp lệ
- Mất kết nối mạng
Có hai loại ngoại lệ bạn nên biết trước khi bắt đầu xử lý các ngoại lệ:
81% người tham gia cho biết họ cảm thấy tự tin hơn về triển vọng công việc công nghệ của mình sau khi tham gia chương trình đào tạo. Kết hợp với bootcamp ngay hôm nay.
Sinh viên tốt nghiệp bootcamp trung bình dành ít hơn sáu tháng để chuyển đổi nghề nghiệp, từ khi bắt đầu bootcamp đến khi tìm được công việc đầu tiên của họ.
- Các ngoại lệ không được chọn sẽ được kiểm tra tại thời điểm chạy. Chúng bao gồm
ArithmeticException
vàArrayIndexOutOfBoundsException
. - Các ngoại lệ đã kiểm tra được kiểm tra tại thời điểm biên dịch và bao gồm
IOException
vàInterruptedException
.
Đối với hầu hết các phần, bạn muốn xử lý các ngoại lệ đã kiểm tra trong mã của mình. Điều này là do các ngoại lệ không được kiểm tra thường là do lỗi lập trình chứ không phải do hành vi không mong muốn trong mã của bạn.
Java Throw Keyword
Java throws
từ khóa được sử dụng để khai báo loại ngoại lệ có thể phát sinh trong một khối mã. Đây là cú pháp cho mệnh đề ném:
accessModifier return functionName() throws Exception1, Exception2 { // Run code }
Hãy sử dụng một ví dụ để minh họa cách điều này có thể hoạt động. Giả sử chúng ta đang xây dựng một chương trình cho rạp chiếu phim để kiểm tra độ tuổi của khách hàng tham gia một bộ phim trên 16 tuổi. Nếu khách hàng dưới 16 tuổi không được phép vào phim; nếu họ từ 16 tuổi trở lên, họ phải được phép tham gia.
Đây là mã chúng tôi sẽ sử dụng để kiểm tra độ tuổi của khách hàng và đưa ra ngoại lệ ArithmeticException nếu khách hàng dưới 16 tuổi:
class Main { public static void verifyAge(int age) throws ArithmeticException { if (age < 16) { throw new ArithmeticException("This customer is not old enough to see the movie."); } else { System.out.println("This customer is old enough to see the movie."); } } public static void main(String[] args) { verifyAge(14); } }
Mã của chúng tôi trả về:
Ngoại lệ trong chuỗi “main” java.lang.ArithmeticException:This customer is not old enough to see the movie.
at Main.verifyAge(Main.java:4)
at Main.main(Main.java:11)
Khi chúng tôi chạy chương trình này, tham số tuổi mà chúng tôi chỉ định trong chương trình chính của chúng tôi được đặt thành 14. Đây là nhỏ hơn 16, vì vậy khi verifyAge()
phương thức được thực thi, câu lệnh age < 16
đánh giá là true và một ArithmeticException được đưa ra.
Từ khóa throws được sử dụng để xác định loại ngoại lệ sẽ được trả về bởi verifyAge()
phương pháp. Từ khóa ném được sử dụng để đưa ra ngoại lệ trong chương trình của chúng tôi.
Ném từ khóa Java
Từ khóa ném Java được sử dụng để đưa ra một ngoại lệ duy nhất trong mã của bạn. Theo sau từ khóa ném là một đối tượng sẽ được ném vào chương trình nếu gặp một ngoại lệ.
Đây là cú pháp cho từ khóa ném Java:
throw throwObject;
Hãy xem qua một vài ví dụ về câu lệnh ném được sử dụng để xử lý các ngoại lệ trong Java.
Ném kiểm tra ngoại lệ
Giả sử chúng ta muốn một thông báo xuất hiện với nội dung “Tệp này không tồn tại”. khi một IOException
gặp phải trong chương trình của chúng tôi. IOExceptions
là các ngoại lệ được kiểm tra và vì vậy chúng ta nên xử lý chúng bằng cách sử dụng từ khóa "ném". Đây là mã chúng tôi sẽ sử dụng để xử lý ngoại lệ:
import java.io.*; class Main public static void getFile() throws IOException { throw new IOException("This file does not exist."); } public static void main(String[] args) { try { getFile(); } catch (IOException error) { System.out.println(e.getMessage()); } } }
Mã của chúng tôi trả về:
This file does not exist.
Hãy chia nhỏ mã của chúng ta. Đầu tiên, chúng tôi nhập java.io
thư viện mà chúng tôi sẽ sử dụng trong bất kỳ chương trình nào xử lý tệp. Sau đó, chúng tôi tạo một lớp có tên là Main, lớp này lưu trữ mã cho chương trình của chúng tôi.
Trong Main
của chúng tôi lớp, chúng tôi định nghĩa một hàm có tên là getFile()
mà ném một IOException
. Hàm này sẽ đưa ra một IOException kèm theo thông báo “Tệp này không tồn tại”. vào chương trình của chúng tôi.
Trong hàm chính trong lớp Chính của chúng tôi, chúng tôi tạo một khối try / catch cố gắng thực thi getFile()
phương pháp. Nếu gặp phải IOException, mã trong khối bắt sẽ thực thi và thông báo từ IOException sẽ được in ra bảng điều khiển. Vì vậy, mã của chúng tôi trả về, "Tệp này không tồn tại.", Đó là thông báo mà chúng tôi đã khai báo trước đó.
Bỏ qua ngoại lệ không được kiểm tra
Vì vậy, giả sử chúng ta muốn ném một StringIndexOutOfBounds
ngoại lệ nếu chương trình của chúng tôi cố gắng truy cập một giá trị chỉ mục trong một chuỗi không tồn tại. Chúng tôi có thể làm như vậy bằng cách sử dụng mã này:
class Main { public static void outOfBounds() { throw new StringIndexOutOfBoundsException("This index value is invalid."); } public static void main(String[] args) { outOfBounds(); } }
Có rất nhiều thứ đang diễn ra trong mã của chúng ta, vì vậy hãy phân tích nó. Đầu tiên, chúng tôi đã khai báo một lớp có tên là Main, trong đó mã của chúng tôi cho chương trình này tồn tại.
Sau đó, chúng tôi đã tạo một hàm có tên là outOfBounds()
mà khi được thực thi, sẽ ném ra một StringIndexOutOfBounds
ngoại lệ. Thông báo This index value is invalid.
sẽ đi kèm với ngoại lệ. Cuối cùng, trong chương trình chính của chúng tôi, chúng tôi gọi outOfBounds()
hàm, sau đó trả về:
Ngoại lệ trong luồng “main” java.lang.StringIndexOutOfBoundsException:Giá trị chỉ mục này không hợp lệ.
at Main.outOfBounds(Main.java:3)
at Main.main(Main.java:7)
Trong ví dụ này, chúng tôi đã đưa ra một ngoại lệ không được kiểm tra. Điều này thường không cần thiết, như chúng ta đã thảo luận trước đó, nhưng dù sao chúng ta cũng đã đưa ra một ngoại lệ chưa được kiểm tra để hiển thị cho bạn cú pháp.
Kết luận
Xử lý các ngoại lệ đã kiểm tra là một phần quan trọng của việc viết mã có thể bảo trì trong Java. Trong Java, các từ khóa ném và ném được sử dụng để ném và xử lý các ngoại lệ.
Hướng dẫn này trình bày cách sử dụng các từ khóa ném và ném trong Java, đồng thời cung cấp các ví dụ có liên quan để giúp bạn tìm hiểu quy trình. Sau khi đọc hướng dẫn này, bạn đã sẵn sàng để bắt đầu ném và xử lý các ngoại lệ trong Java như một người chuyên nghiệp!