JavaRush /وبلاگ جاوا /Random-FA /10 سوال برتر در مورد استثناها در جاوا
raynn
مرحله
Нижний Новгород

10 سوال برتر در مورد استثناها در جاوا

در گروه منتشر شد
این مقاله 10 سوال متداول در مورد استثناها در جاوا را شرح می دهد. 10 سوال برتر در مورد استثناها در جاوا - 1

1. قابل تایید و غیر قابل تایید

به طور خلاصه، استثناهای بررسی شده باید به صراحت در بدنه متد ثبت شوند یا در بخش پرتاب متد اعلام شوند. استثناهای علامت نخورده ناشی از مشکلاتی هستند که قابل حل نیستند، مانند تقسیم بر 0، نشانگر تهی و غیره. استثناهای علامت‌گذاری شده بسیار مهم هستند زیرا انتظار دارید سایر توسعه‌دهندگانی که از API شما استفاده می‌کنند بدانند که چگونه استثنائات را مدیریت کنند. به عنوان مثال، IOException یک استثناء علامت دار است که معمولاً مورد استفاده قرار می گیرد، در حالی که RuntimeException یک استثناء بدون علامت است. قبل از مطالعه بیشتر، نمودار استثنای سلسله مراتبی در جاوا را بررسی کنید .

2. بهترین راه برای مقابله با استثناها

اگر بتوان استثنا را به درستی مدیریت کرد، باید آن را گرفت، در غیر این صورت باید فوروارد شود.

3. چرا نمی توان از متغیرهای تعریف شده در try در catch یا در نهایت استفاده کرد؟

در کد زیر، خط s اعلام شده در یک بلوک try را نمی توان در یک بلوک catch استفاده کرد. این کد کامپایل نمی شود.
try {
	File file = new File("path");
	FileInputStream fis = new FileInputStream(file);
	String s = "inside";
} catch (FileNotFoundException e) {
	e.printStackTrace();
	System.out.println(s);
}
دلیل آن این است که معلوم نیست در کجای بلوک try این استثنا ممکن است پرتاب شده باشد. این امکان وجود دارد که استثنا قبل از اعلام شیء پرتاب شده باشد. و این در مورد این مثال صادق است.

4. چرا Double.parseDouble(null) و Integer.parseInt(null) استثناهای متفاوتی ایجاد می کنند؟

درست است، آنها استثناهای مختلفی را مطرح می کنند. این یک مشکل JDK است. آنها به سادگی توسط افراد مختلف طراحی شده اند و شما نباید زیاد نگران آن باشید.
Integer.parseInt(null);
// вызывает java.lang.NumberFormatException: null

Double.parseDouble(null);
// вызывает java.lang.NullPointerException

5. استثناهای اولیه زمان اجرا در جاوا

در اینجا تعداد کمی از آنها هستند:
IllegalArgumentException
ArrayIndexOutOfBoundsException
آنها را می توان در یک دستور if استفاده کرد، زمانی که شرط برقرار نیست، مانند اینجا:
if (obj == null) {
   throw new IllegalArgumentException("obj не может быть равно null");

6. آیا امکان گرفتن چندین استثنا در یک بلوک catch وجود دارد؟

پاسخ بله است. تا زمانی که بتوان کلاس های این استثناها را در سلسله مراتب وراثت کلاس به همان سوپرکلاس ردیابی کرد، فقط از آن سوپرکلاس می توان استفاده کرد.

7. آیا سازنده می تواند استثناها را ایجاد کند؟

پاسخ بله است. سازنده فقط نوع خاصی از روش است. در اینجا یک نمونه کد است.

8. پرتاب استثناها در بلوک نهایی

در اصل، شما می توانید کاملاً قانونی این کار را انجام دهید:
public static void main(String[] args) {
	File file1 = new File("path1");
	File file2 = new File("path2");
	try {

		FileInputStream fis = new FileInputStream(file1);
	} catch (FileNotFoundException e) {
		e.printStackTrace();
	} finally {
		try {
			FileInputStream fis = new FileInputStream(file2);
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}
	}
}
اما برای حفظ خوانایی کد، باید بلوک تودرتو را try-catchبه عنوان یک متد جدید اعلام کنید و یک فراخوانی به این متد در بلوک وارد کنید finally.
public static void main(String[] args) {
	File file1 = new File("path1");
	File file2 = new File("path2");
	try {

		FileInputStream fis = new FileInputStream(file1);
	} catch (FileNotFoundException e) {
		e.printStackTrace();
	} finally {
		methodThrowException();
	}
}

9. آیا امکان استفاده از بازگشت در بلوک نهایی وجود دارد؟

بله، تو میتونی.

10. چرا توسعه دهندگان استثناها را بی سر و صدا مدیریت می کنند؟

به عنوان مثال، چنین کدهایی اغلب ظاهر می شوند. اگر مدیریت صحیح استثنا بسیار مهم است، چرا توسعه دهندگان به نوشتن آن به این روش ادامه می دهند؟
try {
     ...
} catch(Exception e) {
     e.printStackTrace();
}
نادیده گرفتن آن ساده ترین است. اما حتی اگر این کار اغلب انجام شود، به این معنی نیست که درست است. پیوندها:
  1. تیک گزینه Exceptions در جاوا را بردارید
  2. ریشه یک درخت استثنا سلسله مراتبی در جاوا
  3. سوالاتی در مورد استثناها در stackoverflow
مقاله اصلی
دیگر چه بخوانیم:

استثناها در جاوا

نظرات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION