tek4

Khối lệnh Try Catch trong Java

by - September. 26, 2021
Kiến thức
Học
Tài liệu
<p style="text-align: justify;">Khối lệnh Try Catch l&agrave; một kh&aacute;i niệm quan trọng v&agrave; l&agrave; một trong c&aacute;c kỹ thuật được sử dụng trong khi lập tr&igrave;nh để xử l&yacute; trường hợp ngoại lệ. Trong b&agrave;i viết n&agrave;y, ch&uacute;ng ta sẽ c&ugrave;ng t&igrave;m hiểu về c&acirc;u lệnh try catch trong Java c&ugrave;ng với c&aacute;c v&iacute; dụ dẫn chứng.</p> <h2 style="text-align: justify;">Kh&aacute;i niệm</h2> <p>Khối Try Catch trong Java được sử dụng để nhằm xử l&yacute; c&aacute;c ngoại lệ được đưa ra v&agrave; gi&uacute;p chương tr&igrave;nh tr&aacute;nh việc kết th&uacute;c bất thường của chương tr&igrave;nh.</p> <p style="text-align: justify;"><strong><em>C&uacute; ph&aacute;p:</em></strong></p> <pre class="language-java"><code>try{ // Đoạn m&atilde; 1 } catch(exception) { // Đoạn m&atilde; 2 }</code></pre> <p style="text-align: justify;">Khối try bao gồm đoạn m&atilde; c&oacute; thể tạo ra một ngoại lệ. Khối Catch bao gồm đoạn m&atilde; được thực thi khi xảy ra ngoại lệ b&ecirc;n trong khối Try.</p> <p style="text-align: justify;">V&iacute; dụ:</p> <pre class="language-java"><code>class Main { public static void main(String[] args) { try { int phep_chia = 27 / 0; } catch (ArithmeticException e) { System.out.println(e.getMessage()); } } }</code></pre> <p style="text-align: justify;">Trong v&iacute; dụ tr&ecirc;n, ta sử dụng biểu thức sau:</p> <pre class="language-java"><code>int phep_chia = 27 / 0</code></pre> <p>Ở đ&acirc;y, ch&uacute;ng ta đang thực hiện ph&eacute;p chia cho gi&aacute; trị 0. Trong trường hợp n&agrave;y, một ngoại lệ sẽ xảy ra. Do đ&oacute;, ch&uacute;ng ta đ&atilde; đặt m&atilde; n&agrave;y b&ecirc;n trong khối Try. V&agrave; ngoại lệ được bắt bởi khối Catch v&agrave; thực thi đoạn m&atilde; b&ecirc;n trong khối. Khối Catch chỉ được thực thi nếu tồn tại một ngoại lệ b&ecirc;n trong khối Try.</p> <p style="text-align: justify;"><strong>Ch&uacute; &yacute;: Trong Java, ch&uacute;ng ta c&oacute; thể sử dụng khối Try m&agrave; kh&ocirc;ng cần khối Catch. Tuy nhi&ecirc;n, ch&uacute;ng ta kh&ocirc;ng thể sử dụng khối Catch m&agrave; kh&ocirc;ng c&oacute; khối Try.</strong></p> <h2 style="text-align: justify;">Sử dụng khối Try v&agrave; Finally</h2> <p style="text-align: justify;">Ch&uacute;ng ta cũng c&oacute; thể sử dụng khối Try c&ugrave;ng với khối Finally. Trong trường hợp n&agrave;y, khối Finally lu&ocirc;n được thực thi cho d&ugrave; c&oacute; ngoại lệ b&ecirc;n trong khối Try xảy ra hay kh&ocirc;ng.</p> <p style="text-align: justify;">V&iacute; dụ:</p> <pre class="language-java"><code>class Main { public static void main(String[] args) { try { int phep_chia = 27 / 0; } finally{ System.out.println("Chuong trinh hoan thanh"); } } }</code></pre> <p style="text-align: justify;">Kết quả:</p> <pre class="language-markup"><code>Chuong trinh hoan thanh Exception in thread "main" java.lang.ArithmeticException: / by zero at Main.main(Main.java:5)</code></pre> <p style="text-align: justify;">Trong v&iacute; dụ tr&ecirc;n, ch&uacute;ng ta đ&atilde; sử dụng khối Try c&ugrave;ng với khối Finally. Ch&uacute;ng ta c&oacute; thể thấy rằng đoạn m&atilde; b&ecirc;n trong khối Try tạo ra một ngoại lệ. Tuy nhi&ecirc;n, đoạn m&atilde; b&ecirc;n trong khối Finally được thực thi bất kể ngoại lệ xảy ra.</p> <h2 style="text-align: justify;">Khối lệnh Try Catch v&agrave; Finally</h2> <p style="text-align: justify;">V&iacute; dụ:</p> <pre class="language-java"><code>import java.io.*; class Main { public static void main(String[] args) { try { int a = 32 / 0; } catch (Exception e) { System.out.println(e.getMessage()); } finally { System.out.println("Hoan thanh!"); } } }</code></pre> <p style="text-align: justify;">Kết quả:</p> <pre class="language-markup"><code>/ by zero Hoan thanh!</code></pre> <p style="text-align: justify;">Sử dụng khối Finally thường xuy&ecirc;n trong khi lập tr&igrave;nh l&agrave; một c&aacute;ch tốt để thực hiện c&aacute;c đoạn m&atilde; r&otilde; r&agrave;ng v&agrave; kết th&uacute;c mạch lạc.</p> <p style="text-align: justify;"><strong>Ch&uacute; &yacute;: C&oacute; một số trường hợp m&agrave; khối Finally kh&ocirc;ng thực thi, bao gồm:</strong></p> <ol style="text-align: justify;"> <li><strong>Sử dụng phương thức System.exit().</strong></li> <li><strong>Một ngoại lệ xảy ra trong khối Finally.</strong></li> <li><strong>Luồng thực thi kết th&uacute;c.</strong></li> </ol> <h2 style="text-align: justify;">Sử dụng nhiều khối Catch</h2> <p style="text-align: justify;">Đối với mỗi khối Try, c&oacute; thể kh&ocirc;ng c&oacute; hoặc nhiều khối Catch. Nhiều khối Catch cho ph&eacute;p ch&uacute;ng ta xử l&yacute; mỗi ngoại lệ kh&aacute;c nhau. Kiểu đối số của mỗi khối Catch sẽ cho biết kiểu ngoại lệ c&oacute; thể được xử l&yacute;.</p> <p style="text-align: justify;">V&iacute; dụ:</p> <pre class="language-java"><code>class Main { public static void main(String[] args) { int[] mang = new int[5]; try { mang[6] = 12; } catch (ArithmeticException a) { System.out.println(a.getMessage()); } catch (IndexOutOfBoundsException b) { System.out.println("Loi vuot qua chi so cho phep: " + b.getMessage()); } } }</code></pre> <p style="text-align: justify;">Kết quả:</p> <pre class="language-markup"><code>Loi vuot qua chi so cho phep: 6</code></pre> <p style="text-align: justify;">Trong v&iacute; dụ n&agrave;y, ta đ&atilde; tạo một mảng số nguy&ecirc;n c&oacute; t&ecirc;n l&agrave; mang c&oacute; k&iacute;ch thước l&agrave; 5. V&igrave; chỉ số mảng bắt đầu từ 0, n&ecirc;n phần tử cuối c&ugrave;ng của mảng l&agrave; mang[4]. Tuy nhi&ecirc;n, ta đ&atilde; truy cập v&agrave;o mang[6], do đ&oacute;, trường hợp ngoại lệ IndexOutOfBoundException đ&atilde; xảy ra.</p> <p style="text-align: justify;">Khi một ngoại lệ xảy ra trong khối Try:</p> <ul style="text-align: justify;"> <li>Ngoại lệ được truyền cho khối Catch đầu ti&ecirc;n. Khối Catch n&agrave;y kh&ocirc;ng xử l&yacute; ngo&agrave;i lệ IndexOutOfBoundsException, v&igrave; vậy n&oacute; được truyền cho khối Catch thứ hai.</li> <li>Khối Catch thứ hai trong v&iacute; dụ tr&ecirc;n c&oacute; thể xử l&yacute; ngoại lệ n&agrave;y, do đ&oacute;, đoạn m&atilde; b&ecirc;n trong n&oacute; được thực thi.</li> </ul> <h2 style="text-align: justify;">Xử l&yacute; nhiều ngoại lệ</h2> <p style="text-align: justify;">Từ Java SE 7 trở l&ecirc;n, giờ đ&acirc;y ta c&oacute; thể bắt được nhiều loại ngoại lệ với một khối Catch. Điều n&agrave;y l&agrave;m giảm sự tr&ugrave;ng lặp c&aacute;c đoạn m&atilde; v&agrave; tăng t&iacute;nh đơn giản v&agrave; hiệu quả trong lập tr&igrave;nh. Mỗi loại ngoại lệ c&oacute; thể được xử l&yacute; bởi khối Catch được ph&acirc;n t&aacute;ch bằng thanh dọc |.</p> <p style="text-align: justify;"><strong><em>C&uacute; ph&aacute;p:</em></strong></p> <pre class="language-java"><code>try { // Đoạn m&atilde; 1 } catch (Ngoại_lệ_1 | Ngoại_lệ_2 a) { // Đoạn m&atilde; 2 }</code></pre> <p style="text-align: justify;">Tr&ecirc;n đ&acirc;y l&agrave; kh&aacute;i niệm v&agrave; v&iacute; dụ cơ bản về khối lệnh Try Catch trong Java. Hy vọng mọi người c&oacute; thể &aacute;p dụng v&agrave;o trong chương tr&igrave;nh của m&igrave;nh. Mọi người h&atilde;y tiếp tục theo d&otilde;i c&aacute;c b&agrave;i tiếp theo v&agrave; cập nhật c&aacute;c b&agrave;i mới nhất tr&ecirc;n <a href="http://tek4.vn">tek4</a> nh&eacute;!</p>