عندما كنت أتعلم معالجة جافا لأول مرة ، أتذكر بعض الجمل حول التعامل مع استثناءات الوالدين والثانية: "لا يمكن أن ترمي طريقة فئة الطفل استثناءات أو استثناءات الطفل التي ألقيتها طريقة فئة الوالدين ، ويجب على مُنشئ فئة الطفل أن يرمي استثناءات أو استثناءات الأصل من مُنشئ فئة الأصل." في ذلك الوقت ، لم أكن أعرف لماذا كان على طريقة الفئة الفرعية رمي استثناءات مثل هذا. في وقت لاحق ، من خلال تعلم "التفكير في جافا" ، فهمت الحقيقة. الآن سأراجعها.
1. يمكن أن تتمكن أساليب الفئة الفرعية من إلقاء استثناءات من أساليب فئة الوالدين أو استثناءات أطفالهم.
لهذا القيد ، يرجع ذلك بشكل أساسي إلى أن الفئات الفرعية لا يمكنها التقاط استثناءات بشكل صحيح عندما تخضع للتحول الصاعد
الحزمة التفكير في الفئة المجردة العامة inningdemo1 {public void walk () يلقي baseexception {} public erction void sing () remexception ؛} class baseexception يمتد الاستثناء {} class subexception1package thinkinginjava ؛ واجهة عامة أخرى
الحزمة التفكير في الفئة العامة ؛ الطبقة العامة subinningDemo1 يمتد inningDemo1 تنفذ Otherfunction {// أن طرق الفئة الفرعية يمكن أن ترمي استثناءات من طريقة الفئة من الوالدين @override walk walk () relhrows baseexception {} // ولكن استثناءات لا يمكن إلقاؤها في فئة الوالدين ، وإلا فإن هناك خطأ في الترجم / / استثناءات من طريقة الفئة الأصل @override public void sing () يلقي Subexception1 {} // عندما يكون للواجهة والأساليب المنفذة في الفئة الأصل استثناءات ، يمكنك اختيار عدم إلقاء استثناءات الفراغ العام () {}}خذ هذا المثال كمثال. إذا كانت هناك هذه الطريقة في الفئة الفرعية public void walk () يلقي CupException {} ، فإن استثناء أن طريقة الفئة الأصل لم يتم إلقاؤها. نستخدم مرجع فئة الوالدين للإشارة إلى فئة الطفل.
public void f () {inningDemo1 inn = new SubinningDemo1 () ؛ inn.walk () ؛ // عندما تستدعي فئة الوالدين طريقة Walk () ، لا يعلم أنها سترمي CupException ، وبالتالي فإن طريقة F () لا تعرف كيفية التقاط الاستثناء. لذلك ، خلال فترة التجميع ، يجب منع طرق الفئة الفرعية من إلقاء استثناءات بشكل عشوائي. }من المثال أعلاه ، يمكننا أيضًا أن نرى أن طريقة الفئة الفرعية لا يمكنها إلقاء استثناءات
2. يجب على مُنشئ الفئة الفرعية رمي استثناء أو استثناء الوالد.
وذلك بسبب إضافة مُنشئ الفئة الفرعية افتراضيًا إلى مُنشئ الفئة الأصل.
الحزمة التفكير في الفئة المجردة العامة inningdemo2 {public inningDemo2 () يلقي الإثارة الفرعية {}} class fatherexception يمتد الاستثناء {} الفئة الفرعية الحزمة التفكير في الطبقة العامة subinningDemo2 يمتد inningdemo2 {publicinningDemo2 () يلقي fatherexception {// مُنشئ الفئة الأصل يضاف عن طريق الافتراضي في مُنشئ الفئة الفرعية ، لذلك يجب إلقاء استثناء من الفئة الوالدين أو استثناء الوالدين // super () ؛ }}3. خسارة غير طبيعية
1. رمي استثناء في النهاية ، قد يضيع الاستثناء الذي تم إلقاؤه.
package thinking inhinjava ؛ public class frasenexception {public static void main (string [] args) {try {try {throw new redexception () ؛ } أخيرًا {// تغطية الاستثناء السابق رمي new blueexception () ؛ }} catch (استثناء e) {system.out.println (e) ؛ }}} class Redexception يمتد الاستثناء {} class BlueException يمتد الاستثناء {}النتيجة الجري: التفكير java.blueException
2. استخدم العودة في النهاية ، لم يتم طرح أي استثناء
package thinkinginjava ؛ public class returnexception {public static void main (string [] args) {try {throw new issection () ؛ } أخيرًا {return ؛ }}}نرى أنه يلقي استثناءً ، ولكن لن يكون هناك إخراج عند التشغيل
يناقش المقال أعلاه باختصار معالجة جافا استثناء (معالجة استثناء الأب والابن) كل المحتوى الذي أشاركه معك. آمل أن يعطيك مرجعًا وآمل أن تتمكن من دعم wulin.com أكثر.