سؤال

لأسباب مختلفة الدعوة System.exit مكروها عند الكتابة تطبيقات جافا, لذا كيف يمكنني إبلاغ عملية الاستدعاء على أن ليس كل شيء يسير حسب الخطة ؟

تحرير: 1 هو standin أي غير الصفر رمز الإنهاء.

هل كانت مفيدة؟

المحلول

استخدام System.exit مكروها عند 'تطبيق' هو في الحقيقة الفرعية التطبيق (على سبيل المثالبريمج, الصغير) من أكبر تطبيق جافا (server):في هذه الحالة System.exit يمكن أن يوقف JVM وبالتالي أيضا جميع تطبيقات فرعية.في هذه الحالة, رمي مناسبة استثناء ، والتي يمكن أن تكون اشتعلت التعامل معها من قبل تطبيق إطار/server هو الخيار الأفضل.

إذا كان جافا التطبيق هو حقا من المفترض أن يكون تشغيل كتطبيق مستقل, لا يوجد شيء خاطئ مع استخدام System.exit.في هذه الحالة تحديد مخرج القيمة هو على الأرجح أسهل (و أيضا الأكثر استخداما) طريقة التواصل فشل أو نجاح عملية الأصل.

نصائح أخرى

أنا أتفق مع "رمي استثناء"الحشد.سبب واحد هو أن نظام الاتصال.خروج يجعل التعليمات البرمجية الخاصة بك من الصعب استخدام إذا كنت تريد التعليمات البرمجية الأخرى أن تكون قادرة على استخدامها.على سبيل المثال, إذا كنت تعرف أن الفئة الخاصة بك سوف تكون مفيدة من التطبيق على شبكة الإنترنت, أو نوع من رسالة استهلاك التطبيق ، سيكون من الجميل أن تسمح تلك الحاويات الفرصة للتعامل مع الفشل بطريقة أو بأخرى.حاوية قد ترغب في إعادة المحاولة العملية ، تقرر الدخول تجاهل المشكلة أو إرسال بريد إلكتروني إلى مسؤول ، إلخ.

استثناء هذا من شأنه أن يكون main() الأسلوب ؛ هذا يمكن فخ استثناء و الاتصال System.exit() مع بعض القيمة التي يمكن أن تكون معترف بها من قبل عملية الاستدعاء أو قذيفة النصي.

System.exit() سوف كتلة ، وخلق حالة توقف تام إذا كان الخيط الذي بدأ استخدامه في إغلاق هوك.

يمكن أن تكون خطيرة / مشكلة في الويب بريمج البيئات أيضا.

رمي استثناء يعتبر عموما البديلة الأخرى.

سياسة شركتنا هي أنه موافق (حتى فضل) إلى استدعاء النظام.خروج(-1) ، ولكن فقط في init() الأساليب.بالتأكيد سوف تفكر مرتين قبل أن تطلق عليه خلال البرنامج التدفق الطبيعي.

رمي الاستثناءات هو أفضل وسيلة لإرسال المعلومات عن خطأ معين والخروج من التطبيق.

عدد لا أقول لك بقدر:

Exception at thread 'main': FileNotFoundException "The file 'foo' doesn't exist"

(أو شيء قريب من هذا)

انها مكروها بالنسبة عادي مخارج.إذا "ليس كل شيء يسير وفقا للخطة" ، ثم النظام.الخروج على ما يرام.

تحديث:وأود أن أضيف أن أفترض الخاص بك '1' معنى الموثق في مكان ما.

أعتقد رمي استثناء هو ما يجب عليك القيام به عندما يكون هناك شيء يذهب على نحو خاطئ.بهذه الطريقة, إذا كان التطبيق الخاص بك لا تعمل بذاتها التطبيق المتصل يمكن الرد على ذلك و لديه بعض المعلومات حول ما حدث من خطأ.بل هو أيضا أسهل لأغراض التصحيح لأنه يمكنك أيضا الحصول على فكرة أفضل عن ما هو الخطأ عندما ترى تتبع المكدس.

شيء واحد مهم هو أن نلاحظ أنه عندما استثناء يصل إلى أعلى مستوى وبالتالي يسبب VM لإنهاء VM بإرجاع رمز الإرجاع من 1 ، ولذلك خارج التطبيقات التي تستخدم رمز الإرجاع ترى أن ما حدث من خطأ.

الحالة الوحيدة حيث اعتقد النظام.exit() المنطقي هو عند التطبيق الخاص بك هو المقصود ليتم استدعاؤها من قبل التطبيقات التي لا جافا و بالتالي إلى استخدام رموز الإرجاع لمعرفة ما إذا كان التطبيق يعمل أو لا تريد تلك التطبيقات لدينا فرصة للرد بشكل مختلف على مختلف الأمور تسير بشكل خاطئ ، أيتحتاج مختلفة عودة رموز.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top