English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
الاستثناءات هي المشاكل التي تحدث أثناء تنفيذ البرنامج (الخطأ في الوقت التنفيذ). عند حدوث استثناء، يتعطل البرنامج فجأة، وسيتم تجاهل الكود الذي يلي السطر الذي تم فيه تحديد الاستثناء.
import java.util.Scanner; public class ExceptionExample { public static void main(String args[]) { Scanner sc = new Scanner(System.in); System.out.println("Enter first number: "); int a = sc.nextInt(); System.out.println("ادخل الرقم الثاني: "); int b = sc.nextInt(); int c = a / b; System.out.println("النتيجة هي: " + c); } }
نتائج الإخراج
ادخل الرقم الأول: 100 ادخل الرقم الثاني: 0 استثناء في نواة "main" java.lang.ArithmeticException: / by zero at ExceptionExample.main(ExceptionExample.java:10)
يمكنك استخدامthrow كلمة المفتاح "throw" لرمي استثناءات محددة مسبقًا أو محددة من قبل المستخدم.
يوجد نوعان من الاستثناءات المحددة من قبل المستخدم والاستثناءات المحددة مسبقًا، وكل استثناء يمثل فئة ويورث من فئة Throwable.
لرمي استثناء بوضوح، تحتاج إلى إنشاء مثيل من فئة الاستثناء واستخدام كلمة المفتاح throw لرمي هذا المثال.
البرنامج التالي في Java يسبب NullPointerException
public class ExceptionExample { public static void main(String[] args) { System.out.println("مرحبا"); NullPointerException nullPointer = new NullPointerException(); throw nullPointer; } }
نتائج الإخراج
مرحبا استثناء في نواة "main" java.lang.NullPointerException at MyPackage.ExceptionExample.main(ExceptionExample.java:6)
عندما يتم رمي استثناء بوضوح، يجب التأكد من أن السطر الذي يحتوي على كلمة المفتاح throw هو السطر الأخير في البرنامج. هذا لأن أي كود يكتب بعد ذلك لا يمكن الوصول إليه، وسيتم إنشاء خطأ في التجميع إذا كان لديك قطعة كود تحت هذا السطر.
public class ExceptionExample { public static void main(String[] args) { System.out.println("مرحبا"); NullPointerException nullPointer = new NullPointerException(); throw nullPointer; System.out.println("كيف حالك"); } }
D:\>javac ExceptionExample.java ExceptionExample.java:6: خطأ: جملة غير قابلة للوصول System.out.println("كيف حالك"); ^ 1 error
通常throw关键字通常用于引发用户定义的异常。每当我们需要定义自己的异常时,就需要定义扩展Throwable类的类,并覆盖所需的方法。
实例化此类,并在需要异常的任何地方使用throw关键字将其抛出。
在下面的Java程序中,我们将创建一个名为AgeDoesnotMatchException的自定义异常类。
public class AgeDoesnotMatchException extends Exception{ AgeDoesnotMatchException(String msg){ super(msg); } }
另一个类Student包含两个私有变量名称age和一个初始化实例变量的参数化构造函数。
作为主要方法,我们接受用户的姓名和年龄值,并通过传递接受的值来初始化Student类。
在Student类的构造函数中,我们创建了一个异常AgeDoesnotMatchException的对象,并在年龄值介于17到24之间时引发了异常(使用throws)。
public class Student extends RuntimeException { private String name; private int age; public Student(String name, int age){ try { if (age<17||age>24) { String msg = "Age is not between 17 and 24"; AgeDoesnotMatchException ex = new AgeDoesnotMatchException(msg); throw ex; } }catch(AgeDoesnotMatchException e) { e.printStackTrace(); } this.name = name; this.age = age; } public void display(){ System.out.println("Name of the Student: "+this.name ); System.out.println("Age of the Student: "+this.age ); } public static void main(String args[]) { Scanner sc = new Scanner(System.in); System.out.println("أدخل اسم الطالب: "); String name = sc.next(); System.out.println("أدخل العمر للطالب يجب أن يكون بين 17 و 24 (بما في ذلك 17 و 24): "); int age = sc.nextInt(); Student obj = new Student(name, age); obj.display(); } }
نتائج الإخراج
عندما تقوم بتنفيذ هذا البرنامج، تحتاج إلى إدخال قيم الاسم والعمر من لوحة المفاتيح. إذا كان العمر المحدد غير موجود بين 17 و 24، فإنه يحدث استثنائي كما يلي-
أدخل اسم الطالب: Krishna أدخل العمر للطالب يجب أن يكون بين 17 و 24 (بما في ذلك 17 و 24): 14 استثنائي AgeDoesnotMatchException: العمر ليس بين 17 و 24 اسم الطالب: Krishna' عمر الطالب: 14 في Student.<init>(Student.java:18) في Student.main(Student.java:39)