ג'אווה נסה לחסום
Java לְנַסוֹת בלוק משמש כדי להקיף את הקוד שעלול לזרוק חריג. יש להשתמש בו בתוך השיטה.
אם מתרחש חריג במשפט המסוים בבלוק try, שאר קוד הבלוק לא יבוצע. לכן, מומלץ לא לשמור את הקוד ב-try block שלא יזרוק חריגה.
בלוק ה-Java try חייב להיות אחריו ב-catch או לבסוף לחסום.
תחביר של Java try-catch
try{ //code that may throw an exception }catch(Exception_class_Name ref){}
תחביר של חסום נסה סוף סוף
try{ //code that may throw an exception }finally{}
חסימת תפס של Java
בלוק ה-catch Java משמש לטיפול ב-Exception על ידי הכרזה על סוג החריגה בתוך הפרמטר. החריג המוצהר חייב להיות חריג מחלקת האב (כלומר, חריג) או סוג החריג שנוצר. עם זאת, הגישה הטובה היא להכריז על סוג החריג שנוצר.
רשימה של גופנים ב-gimp
יש להשתמש בבלוק ה-catch רק לאחר בלוק הניסיון. אתה יכול להשתמש בלוק תפס מרובה עם בלוק ניסיון בודד.
עבודה פנימית של בלוק try-catch של Java
ה-JVM בודק תחילה אם החריגה מטופלת או לא. אם החריגה אינה מטופלת, JVM מספק מטפל חריגים המוגדר כברירת מחדל שמבצע את המשימות הבאות:
- מדפיס תיאור חריג.
- מדפיס את מעקב המחסנית (היררכיה של השיטות שבהן התרחש החריג).
- גורם להפסקת התוכנית.
אבל אם מתכנת היישום מטפל בחריג, הזרימה הרגילה של היישום נשמרת, כלומר, שאר הקוד מבוצע.
בעיה ללא טיפול חריג
בואו ננסה להבין את הבעיה אם לא נשתמש בלוק של try-catch.
דוגמה 1
TryCatchExample1.java
public class TryCatchExample1 { public static void main(String[] args) { int data=50/0; //may throw exception System.out.println('rest of the code'); } }בדוק את זה עכשיו
תְפוּקָה:
Exception in thread 'main' java.lang.ArithmeticException: / by zero
כפי שמוצג בדוגמה לעיל, ה שאר הקוד אינו מבוצע (במקרה כזה, ה שאר הקוד ההצהרה לא מודפסת).
ייתכן שיהיו 100 שורות קוד אחרי החריג. אם החריג לא יטופל, כל הקוד שמתחת לחריג לא יבוצע.
פתרון על ידי טיפול חריג
בואו נראה את הפתרון של הבעיה שלעיל על ידי בלוק try-catch של Java.
דוגמה 2
TryCatchExample2.java
public class TryCatchExample2 { public static void main(String[] args) { try { int data=50/0; //may throw exception } //handling the exception catch(ArithmeticException e) { System.out.println(e); } System.out.println('rest of the code'); } }בדוק את זה עכשיו
תְפוּקָה:
java.lang.ArithmeticException: / by zero rest of the code
כפי שמוצג בדוגמה לעיל, ה שאר הקוד מבוצע, כלומר, ה שאר הקוד ההצהרה מודפסת.
דוגמה 3
בדוגמה זו, שמרנו גם את הקוד בבלוק try שלא יזרוק חריגה.
TryCatchExample3.java
public class TryCatchExample3 { public static void main(String[] args) { try { int data=50/0; //may throw exception // if exception occurs, the remaining statement will not exceute System.out.println('rest of the code'); } // handling the exception catch(ArithmeticException e) { System.out.println(e); } } }בדוק את זה עכשיו
תְפוּקָה:
1 מיליון ספרות
java.lang.ArithmeticException: / by zero
כאן, אנו יכולים לראות שאם מתרחש חריג בבלוק ה-try, שאר קוד הבלוק לא יבוצע.
דוגמה 4
כאן, אנו מטפלים בחריג באמצעות חריג מחלקת האב.
TryCatchExample4.java
public class TryCatchExample4 { public static void main(String[] args) { try { int data=50/0; //may throw exception } // handling the exception by using Exception class catch(Exception e) { System.out.println(e); } System.out.println('rest of the code'); } }בדוק את זה עכשיו
תְפוּקָה:
java.lang.ArithmeticException: / by zero rest of the code
דוגמה 5
בוא נראה דוגמה להדפסת הודעה מותאמת אישית על חריגה.
TryCatchExample5.java
public class TryCatchExample5 { public static void main(String[] args) { try { int data=50/0; //may throw exception } // handling the exception catch(Exception e) { // displaying the custom message System.out.println('Can't divided by zero'); } } }בדוק את זה עכשיו
תְפוּקָה:
Can't divided by zero
דוגמה 6
בוא נראה דוגמה לפתרון החריג בבלוק catch.
TryCatchExample6.java
public class TryCatchExample6 { public static void main(String[] args) { int i=50; int j=0; int data; try { data=i/j; //may throw exception } // handling the exception catch(Exception e) { // resolving the exception in catch block System.out.println(i/(j+2)); } } }בדוק את זה עכשיו
תְפוּקָה:
25
דוגמה 7
בדוגמה זו, יחד עם try block, אנו מקיפים גם קוד חריג ב-catch block.
TryCatchExample7.java
public class TryCatchExample7 { public static void main(String[] args) { try { int data1=50/0; //may throw exception } // handling the exception catch(Exception e) { // generating the exception in catch block int data2=50/0; //may throw exception } System.out.println('rest of the code'); } }בדוק את זה עכשיו
תְפוּקָה:
Exception in thread 'main' java.lang.ArithmeticException: / by zero
כאן, אנו יכולים לראות שבלוק ה-catch לא הכיל את קוד החריגה. לכן, הוסף קוד חריג בתוך בלוק try והשתמש ב-catch block רק כדי לטפל בחריגים.
דוגמה 8
בדוגמה זו, אנו מטפלים בחריג שנוצר (חריג אריתמטי) עם סוג אחר של מחלקה חריגה (ArrayIndexOutOfBoundsException).
סדר לפי sql אקראי
TryCatchExample8.java
public class TryCatchExample8 { public static void main(String[] args) { try { int data=50/0; //may throw exception } // try to handle the ArithmeticException using ArrayIndexOutOfBoundsException catch(ArrayIndexOutOfBoundsException e) { System.out.println(e); } System.out.println('rest of the code'); } }בדוק את זה עכשיו
תְפוּקָה:
Exception in thread 'main' java.lang.ArithmeticException: / by zero
דוגמה 9
בוא נראה דוגמה לטיפול בחריג נוסף לא מסומן.
TryCatchExample9.java
public class TryCatchExample9 { public static void main(String[] args) { try { int arr[]= {1,3,5,7}; System.out.println(arr[10]); //may throw exception } // handling the array exception catch(ArrayIndexOutOfBoundsException e) { System.out.println(e); } System.out.println('rest of the code'); } }בדוק את זה עכשיו
תְפוּקָה:
java.lang.ArrayIndexOutOfBoundsException: 10 rest of the code
דוגמה 10
בואו נראה דוגמה לטיפול בחריג מסומן.
TryCatchExample10.java
import java.io.FileNotFoundException; import java.io.PrintWriter; public class TryCatchExample10 { public static void main(String[] args) { PrintWriter pw; try { pw = new PrintWriter('jtp.txt'); //may throw exception pw.println('saved'); } // providing the checked exception handler catch (FileNotFoundException e) { System.out.println(e); } System.out.println('File saved successfully'); } }בדוק את זה עכשיו
תְפוּקָה:
File saved successfully