Computer >> Máy Tính >  >> Lập trình >> Java

Xử lý ngoại lệ với Try Catch trong Java

Ngay cả những lập trình viên giỏi nhất cũng mắc lỗi trong mã của họ. Lỗi có thể xảy ra do lỗi chính tả, người dùng nhập không mong muốn hoặc vì nhiều lý do khác mà khó theo dõi.

Đó là lúc xử lý ngoại lệ. Mã tốt bao gồm các trình xử lý ngoại lệ, sẽ phản hồi lỗi trong mã theo cách xác định trước. Các trình xử lý ngoại lệ rất hữu ích vì chúng hướng dẫn chương trình cách phản hồi nếu và khi có lỗi xảy ra.

Trong Java, try...catch khối được sử dụng để xử lý ngoại lệ. Hướng dẫn này sẽ thảo luận về những điều cơ bản về xử lý ngoại lệ, cách sử dụng try...catch khối để xử lý các ngoại lệ và cách sử dụng finally câu lệnh với try...catch . Chúng tôi cũng sẽ giới thiệu cho các bạn một vài ví dụ về try...catch khối đang hoạt động.

Ngoại lệ Java

Ngoại lệ là các sự kiện không mong muốn xảy ra khi một chương trình đang được thực thi. Một ngoại lệ sẽ làm gián đoạn dòng chương trình và có thể khiến chương trình ngừng chạy trước khi hoàn thành.

Ngoại lệ xảy ra vì nhiều lý do, bao gồm:không thể truy cập máy chủ, lỗi mã, lỗi chính tả, mở tệp không tồn tại, người dùng nhập sai, v.v.

Thông báo lỗi không giống như các trường hợp ngoại lệ trong Java. Lỗi đề cập đến các điều kiện được đáp ứng mà từ đó chương trình không thể khôi phục, chẳng hạn như hết bộ nhớ. Vì vậy, các lỗi thường không được xử lý bởi các nhà phát triển.

Nhưng ngoại lệ là các vấn đề trong một chương trình có thể được xử lý. Khi một ngoại lệ được nâng lên, một đối tượng được tạo gọi là đối tượng ngoại lệ . Các đối tượng này chứa dữ liệu về ngoại lệ, chẳng hạn như tên của nó và nơi nó được đưa lên trong chương trình.

Bây giờ bạn đã biết những điều cơ bản về xử lý ngoại lệ trong Java, chúng ta có thể bắt đầu sử dụng try...catch câu lệnh để xử lý những 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 một cuộc thi đà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ọ.

Dùng thử Catch Java

try...catch câu lệnh được sử dụng để xử lý các ngoại lệ trong Java. Để xử lý các trường hợp ngoại lệ, một khối mã sẽ được đặt trong try_catch khối.

Khi một chương trình gặp phải try_catch khối, mã trong try khối sẽ được thực thi. Nếu một ngoại lệ được đưa ra, mã trong catch khối sẽ được thực thi ngay lập tức. catch khối phải đến sau try khối trong một try..catch tuyên bố.

Đây là cú pháp cho try_catch câu lệnh trong Java:

try {
	// Code to run
} catch (ExceptionType error) {
	// Code to run when exception is raised
} finally {
	// Code to run even if exception is not raised
}

Chúng ta sẽ nói về finally chặn sau trong hướng dẫn này, nhưng hiện tại, chúng tôi sẽ tập trung vào try_catch khối. Hãy xem qua một ví dụ để minh họa cách khối mã này hoạt động.

Thử ví dụ về Catch Java

Giả sử rằng chúng tôi đang tạo một chương trình sử dụng một mảng có tên là studentNames . Chúng tôi muốn in ra tên thứ năm trong mảng studentNames của chúng tôi vào bảng điều khiển. Tuy nhiên, chỉ có sáu học sinh trong lớp của chúng tôi.

Điều này sẽ dẫn đến lỗi được đưa ra trong mã của chúng tôi vì chúng tôi sẽ tham chiếu đến một giá trị không tồn tại. Dưới đây là một chương trình ví dụ cố gắng in ra tên sinh viên với giá trị chỉ mục 5 (sinh viên thứ sáu trong lớp của chúng tôi, vì giá trị chỉ mục bắt đầu từ 0):

class Main {
public static void main(String[] args) {
String[] studentNames = {"Linda", "Greg", "Ron", "Graham", "Alexis"};
System.out.println(studentNames[5]);
}

Mã của chúng tôi trả về:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5
    at Main.main(Main.java:4)

Như bạn có thể thấy, chương trình của chúng tôi đã trả lại một lỗi dài vì chúng tôi đã cố gắng tham chiếu một giá trị không tồn tại.

Bây giờ, hãy thử sử dụng try...catch khối để xử lý lỗi của chúng tôi. Khi gặp lỗi, chương trình của chúng tôi sẽ in ra "Đã xảy ra lỗi", để chúng tôi biết đã xảy ra lỗi. Chúng tôi có thể sử dụng mã sau để thực hiện nhiệm vụ này:

class Main {
public static void main(String[] args) {
	try {
String[] studentNames = {"Linda", "Greg", "Ron", "Graham", "Alexis"};
System.out.println(studentNames[5]);
} catch (Exception e) {
	System.out.println("There was an error.");
		}
}

Bây giờ khi chúng tôi chạy mã của mình, phản hồi sau được trả về:

There was an error.

Ngoài ra, chúng tôi có thể chỉ định nhiều catch các khối. Điều này rất hữu ích vì nó cho phép chúng tôi xử lý từng ngoại lệ khác nhau.

Trong ví dụ trên, một ArrayIndexOutOfBoundsException được nuôi nấng. Nếu chúng tôi muốn kiểm tra lỗi đó một cách cụ thể, có một thông báo tùy chỉnh được in ra bảng điều khiển và kiểm tra các ngoại lệ chung khác, chúng tôi có thể sử dụng nhiều câu lệnh bắt.

Dưới đây là ví dụ về chương trình kiểm tra cả ArrayIndexOutOfBoundsException và một Ngoại lệ chung và có các phản hồi tùy chỉnh cho từng lỗi:

class Main {
public static void main(String[] args) {
	try {
String[] studentNames = {"Linda", "Greg", "Ron", "Graham", "Alexis"};
System.out.println(studentNames[5]);
} catch (ArrayIndexOutOfBoundsException e) {
	System.out.println("ArrayIndexOutOfBoundsException was raised.");
} catch (Exception e) {
	System.out.println("There was an error.");
		}
}
}

Bây giờ, khi chúng tôi chạy chương trình của mình, thông báo sau được in ra bảng điều khiển:

ArrayIndexOutOfBoundsException was raised.

Phản hồi này được trả về vì ArrayIndexOutOfBoundsException đã được nâng lên trong chương trình của chúng tôi. Nhưng nếu một lỗi khác xảy ra, mã trong Exception e khối bắt sẽ chạy và thông báo sau sẽ được in ra bảng điều khiển:

There was an error.

Tuyên bố cuối cùng

finally câu lệnh được sử dụng để thực thi một khối mã sau try...catch khối đã được thực thi. finally khối là tùy chọn và luôn được thực thi nếu nó được xác định. Nếu không có ngoại lệ nào được nêu ra, thì finally khối được thực thi sau khối try; nếu một ngoại lệ được đưa ra, nó sẽ được thực thi sau catch khối.

Hãy sử dụng ví dụ của chúng tôi ở trên để minh họa tuyên bố cuối cùng trong hành động. Giả sử rằng chúng tôi muốn một thông báo được in ra bảng điều khiển nêu rõ This block has finished executing . để cho chúng tôi biết rằng try_catch câu lệnh đã hoàn tất. Chúng tôi có thể thử sử dụng mã sau:

class Main {
public static void main(String[] args) {
	try {
String[] studentNames = {"Linda", "Greg", "Ron", "Graham", "Alexis"};
System.out.println(studentNames[5]);
} catch (ArrayIndexOutOfBoundsException e) {
	System.out.println("ArrayIndexOutOfBoundsException was raised.");
} catch (Exception e) {
	System.out.println("There was an error.");
		} finally {
			System.out.println("This block of code has finished executing.");
		}
}
}

Khi chúng tôi chạy mã của mình, phản hồi sau được trả về:

ArrayIndexOutOfBoundsException was raised.

Khối mã này đã hoàn tất quá trình thực thi.

Như bạn có thể thấy, mã của chúng tôi đã nâng ArrayIndexOutOfBoundsException ngoại lệ, như chúng ta đã thấy ở trên và nó thực thi mã trong catch có liên quan khối.

Trong ví dụ của chúng tôi ở trên, chúng tôi đã chỉ định một finally tuyên bố. Vì vậy, mã của chúng tôi đã in ra thông báo This block of code has finished executing . sau catch khối được thực thi.

Kết luận

try...catch khối được sử dụng trong Java để xử lý các ngoại lệ một cách duyên dáng. Mã trong try khối được thực thi và nếu một ngoại lệ được đưa ra, mã trong catch có liên quan khối được thực thi. Ngoài ra, finally câu lệnh được sử dụng để thực thi mã sau try...catch khối đã được thực thi, ngay cả khi không có ngoại lệ nào được nêu ra.

Hướng dẫn này thảo luận về cách sử dụng try...catch khối để xử lý các ngoại lệ trong Java và cách sử dụng finally trong Java khối. Chúng tôi cũng đã xem qua một ví dụ về cả try...catch khối và finally câu lệnh được sử dụng để xử lý lỗi.

Giờ đây, bạn đã được trang bị thông tin cần thiết để tự tin xử lý các ngoại lệ trong Java!