في Java، يمكننا إنشاء الاستثناءات الخاصة بنا والتي هي عبارة عن فئات مشتقة من فئة الاستثناء. يُعرف إنشاء الاستثناء الخاص بنا باسم الاستثناء المخصص أو الاستثناء المحدد من قبل المستخدم. بشكل أساسي، يتم استخدام استثناءات Java المخصصة لتخصيص الاستثناء وفقًا لاحتياجات المستخدم.
خذ بعين الاعتبار المثال 1 الذي تقوم فيه فئة InvalidAgeException بتوسيع فئة الاستثناء.
باستخدام الاستثناء المخصص، يمكننا الحصول على الاستثناء والرسالة الخاصة بك. هنا، قمنا بتمرير سلسلة إلى مُنشئ الفئة الفائقة، أي فئة الاستثناء التي يمكن الحصول عليها باستخدام طريقة getMessage() على الكائن الذي أنشأناه.
في هذا القسم، سوف نتعلم كيفية تنفيذ الاستثناءات المخصصة واستخدامها في برامج Java.
لماذا استخدام الاستثناءات المخصصة؟
تغطي استثناءات Java جميع أنواع الاستثناءات العامة التي قد تحدث في البرمجة تقريبًا. ومع ذلك، نحتاج في بعض الأحيان إلى إنشاء استثناءات مخصصة.
فيما يلي بعض الأسباب لاستخدام الاستثناءات المخصصة:
- لالتقاط وتوفير معالجة محددة لمجموعة فرعية من استثناءات Java الموجودة.
- استثناءات منطق الأعمال: هذه هي الاستثناءات المتعلقة بمنطق الأعمال وسير العمل. من المفيد لمستخدمي التطبيق أو المطورين فهم المشكلة بالضبط.
لإنشاء استثناء مخصص، نحتاج إلى توسيع فئة الاستثناء التي تنتمي إلى حزمة java.lang.
خذ بعين الاعتبار المثال التالي، حيث نقوم بإنشاء استثناء مخصص يسمى WrongFileNameException:
public class WrongFileNameException extends Exception { public WrongFileNameException(String errorMessage) { super(errorMessage); } }
ملحوظة: نحتاج إلى كتابة المُنشئ الذي يأخذ السلسلة كرسالة خطأ ويسمى مُنشئ الفئة الأصل.
مثال 1:
دعونا نرى مثالاً بسيطًا لاستثناءات Java المخصصة. في التعليمة البرمجية التالية، يأخذ مُنشئ InvalidAgeException سلسلة كوسيطة. يتم تمرير هذه السلسلة إلى مُنشئ استثناء الفئة الأصلية باستخدام طريقة super(). يمكن أيضًا استدعاء مُنشئ فئة الاستثناء دون استخدام معلمة واستدعاء طريقة super() ليس إلزاميًا.
TestCustomException1.java
// class representing custom exception class InvalidAgeException extends Exception { public InvalidAgeException (String str) { // calling the constructor of parent Exception super(str); } } // class that uses custom exception InvalidAgeException public class TestCustomException1 { // method to check the age static void validate (int age) throws InvalidAgeException{ if(age <18){ throw an object of user defined exception new invalidageexception('age is not valid to vote'); } else { system.out.println('welcome main method public static void main(string args[]) try calling the validate(13); catch (invalidageexception ex) system.out.println('caught exception'); printing message from invalidageexception system.out.println('exception occured: ' + ex); system.out.println('rest code...'); < pre> <p> <strong>Output:</strong> </p> <img src="//techcodeview.com/img/exception-handling/13/java-custom-exception.webp" alt="Java Custom Exception"> <h3>Example 2:</h3> <p> <strong>TestCustomException2.java</strong> </p> <pre> // class representing custom exception class MyCustomException extends Exception { } // class that uses custom exception MyCustomException public class TestCustomException2 { // main method public static void main(String args[]) { try { // throw an object of user defined exception throw new MyCustomException(); } catch (MyCustomException ex) { System.out.println('Caught the exception'); System.out.println(ex.getMessage()); } System.out.println('rest of the code...'); } } </pre> <p> <strong>Output:</strong> </p> <img src="//techcodeview.com/img/exception-handling/13/java-custom-exception-2.webp" alt="Java Custom Exception"> <hr></18){>
انتاج:
18){>