ما هو الفرق بين رمي مقابل. رميات في جافا
نشرت: 2013-07-23أحدهما يعلن ذلك والآخر يفعله
هناك خمس كلمات رئيسية تتعلق بمعالجة الاستثناءات في Java ، على سبيل المثال حاول ، أمسك ، وأخيراً ، رمي ورمي . بصرف النظر عن الاختلاف بين النهائي والنهائي والنهائي ، فإن رمي مقابل رميات هو أحد أسئلة مقابلة Java المتداولة.
- تُستخدم الكلمة الرئيسية لرمي الاستثناء من أي طريقة أو كتلة ثابتة في Java أثناء إلقاء الكلمة الرئيسية ، المستخدمة في إعلان الطريقة ، للإشارة إلى الاستثناء الذي يمكن طرحه بهذه الطريقة. لا يمكن استبدالها.
- إذا قام أي أسلوب برمي الاستثناء المحدد كما هو موضح في المثال أدناه ، فيمكن للمستدعي إما معالجة هذا الاستثناء عن طريق التقاطه أو إعادة طرحه عن طريق إعلان جملة رميات أخرى في إعلان الطريقة.
- يمكن استخدام عبارة Throw في أي جزء من التعليمات البرمجية حيث تشعر أنه يجب طرح استثناء معين لطريقة الاستدعاء.
فهم استثناءات Java:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
java . lang . Object | +-- java . lang . Throwable | +-- java . lang . Exception | | | +-- java . lang . ClassNotFoundException | | | +-- java . io . IOException | | | | | +-- java . io . FileNotFoundException | | | +-- java . lang . RuntimeException | | | +-- java . lang . NullPointerException | | | +-- java . lang . IndexOutOfBoundsException | | | +-- java . lang . ArrayIndexOutOfBoundsException | +-- java . lang . Error | +-- java . lang . VirtualMachineError | +-- java . lang . OutOfMemoryError |
إذا كانت إحدى الطرق ترمي استثناءً ، فيجب إما أن تكون محاطة بكتلة try catch للقبض عليها أو يجب أن تحتوي هذه الطريقة على جملة رميات في توقيعها. بدون شرط الرميات في التوقيع ، لا يعرف برنامج التحويل البرمجي Java JVM ما يجب فعله مع الاستثناء. تخبر جملة throws المترجم أن هذا الاستثناء الخاص سيتم معالجته بواسطة طريقة الاستدعاء.
يوجد أدناه مثال بسيط للغاية يشرح سلوك Throw ، Throws ، Try ، Catch ، وأخيرًا block في Java.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
package com . crunchify . tutorials ; import java . io . FileInputStream ; import java . io . FileNotFoundException ; /** * @author Crunchify.com */ public class CrunchifyThrowThrows { @SuppressWarnings ( "unused" ) public static void main ( String args [ ] ) throws Exception { FileInputStream crunchifyStream1 = null ; FileInputStream crunchifyStream2 = null ; String fileName = "Crunchify.txt" ; System . out . println ( "main: Starting " + CrunchifyThrowThrows . class . getName ( ) + " with file name = " + fileName ) ; // get file input stream 1 try { crunchifyStream1 = crunchifyTest1 ( fileName ) ; } catch ( FileNotFoundException ex ) { System . out . println ( "main: Oops, FileNotFoundException caught" ) ; } catch ( Exception ex ) { System . out . println ( "main: Oops, genreal exception caught" ) ; } // get file input stream 2 crunchifyStream2 = crunchifyTest2 ( fileName ) ; System . out . println ( "main: " + CrunchifyThrowThrows . class . getName ( ) + " ended" ) ; } public static FileInputStream crunchifyTest1 ( String fileName ) throws FileNotFoundException { FileInputStream crunchifyStream = new FileInputStream ( fileName ) ; System . out . println ( "crunchifyTest1: File input stream created" ) ; return crunchifyStream ; } public static FileInputStream crunchifyTest2 ( String fileName ) throws Exception { FileInputStream crunchifyStream = null ; try { crunchifyStream = new FileInputStream ( fileName ) ; } catch ( FileNotFoundException ex ) { throw new Exception ( "crunchifyTest2: Oops, FileNotFoundException caught" ) ; //System.out.println("crunchifyTest2: Oops, FileNotFoundException caught"); } finally { System . out . println ( "crunchifyTest2: finally block" ) ; } System . out . println ( "crunchifyTest2: Returning from crunchifyTest2" ) ; return crunchifyStream ; } } |
نتيجة:

1 2 3 4 5 6 |
main : Starting com . crunchify . tutorials . CrunchifyThrowThrows with file name = Crunchify . txt main : Oops , FileNotFoundException caught crunchifyTest2 : finally block Exception in thread "main" java . lang . Exception : crunchifyTest2 : Oops , FileNotFoundException caught at com . crunchify . tutorials . CrunchifyThrowThrows . crunchifyTest2 ( CrunchifyThrowThrows . java : 45 ) at com . crunchify . tutorials . CrunchifyThrowThrows . main ( CrunchifyThrowThrows . java : 30 ) |
الآن فقط استبدل السطر 45 و 46 بالسطر أدناه لترى النتيجة أدناه:
1 2 |
//throw new Exception("crunchifyTest2: Oops, FileNotFoundException caught"); System . out . println ( "crunchifyTest2: Oops, FileNotFoundException caught" ) ; |
نتيجة جديدة:
1 2 3 4 5 6 |
main : Starting com . crunchify . tutorials . CrunchifyThrowThrows with file name = Crunchify . txt main : Oops , FileNotFoundException caught crunchifyTest2 : Oops , FileNotFoundException caught crunchifyTest2 : finally block crunchifyTest2 : Returning from crunchifyTest2 main : com . crunchify . tutorials . CrunchifyThrowThrows ended |
قائمة بجميع دروس Java التعليمية التي قد تكون مهتمًا بها.
نصائح إضافية حول الاستثناءات:
- يتفرع تنفيذ البرنامج العادي على الفور عند طرح استثناء.
- يجب اكتشاف الاستثناءات التي تم تحديدها أو إعادة توجيهها. يمكن القيام بذلك في عبارة try… catch أو بتعريف الاستثناء في تعريف الطريقة.
- يتم اكتشاف الاستثناء بواسطة كتلة catch الأولى التي تطابق فئة الاستثناء المرتبطة بها الفئة أو الفئة الفائقة للاستثناء الذي تم طرحه.
- إذا لم يتم العثور على كتلة catch مطابقة في سلسلة الاستثناءات ، فسيتم إنهاء سلسلة الرسائل التي تحتوي على استثناء تم طرحه.
- يتم تنفيذ الكتلة النهائية بعد عبارة try… catch بغض النظر عما إذا تم اكتشاف استثناء أم لا.
- تؤدي العودة داخل الكتلة النهائية إلى كسر سلسلة الاستثناء للمستدعي حتى في حالة الاستثناءات غير المعلنة.