Maqolada Java-dagi istisnolar haqida eng ko'p beriladigan 10 ta savol tasvirlangan.
1. Tekshiriladigan va tekshirilmaydigan
Muxtasar qilib aytganda, tekshirilgan istisnolar usul tanasida aniq tutilishi yoki usulning otish bo'limida e'lon qilinishi kerak. Tekshirilmagan istisnolar hal qilib bo'lmaydigan muammolar tufayli yuzaga keladi, masalan, 0 ga bo'linish, null ko'rsatkich va boshqalar. Belgilangan istisnolar ayniqsa muhimdir, chunki siz API-dan foydalanadigan boshqa ishlab chiquvchilar istisnolarni qanday hal qilishni bilishlarini kutasiz. Masalan, IOException tez-tez ishlatiladigan tekshiriladigan istisno, RuntimeException esa tekshirilmagan istisno hisoblanadi.
Batafsil o'qishdan oldin Java-dagi ierarxik istisno diagrammasini tekshiring .
2. Istisnolarni hal qilishning eng yaxshi usuli
Agar istisnoni to'g'ri hal qilish mumkin bo'lsa, uni qo'lga olish kerak, aks holda uni yuborish kerak.
3. Nima uchun tryda aniqlangan o'zgaruvchilar catch yoki finalda ishlatilmaydi?
Quyidagi kod qismida try blokida e'lon qilingan satrni catch blokida ishlatib bo'lmaydi. Bu kod kompilyatsiya qilinmaydi.
try {
File file = new File("path");
FileInputStream fis = new FileInputStream(file);
String s = "inside";
} catch (FileNotFoundException e) {
e.printStackTrace();
System.out.println(s);
}
Sababi, try blokida istisno qayerga tashlanganligi noma'lum. Istisno ob'ekt e'lon qilinishidan oldin tashlangan bo'lishi mumkin. Va bu misol uchun to'g'ri.
4. Nima uchun Double.parseDouble(null) va Integer.parseInt(null) har xil istisnolarni chiqaradi?
To'g'ri, ular turli xil istisnolarni keltirib chiqaradi. Bu JDK muammosi. Ular oddiygina turli odamlar tomonidan ishlab chiqilgan va siz bu haqda ko'p tashvishlanmasligingiz kerak.
Integer.parseInt(null);
Double.parseDouble(null);
5. Java tilidagi asosiy ish vaqti istisnolari
Mana ulardan bir nechtasi:
IllegalArgumentException
ArrayIndexOutOfBoundsException
Ular shart bajarilmaganda if iborasida ishlatilishi mumkin, masalan:
if (obj == null) {
throw new IllegalArgumentException("obj не может быть равно null");
6. Bitta catch blokida bir nechta istisnolarni ushlash mumkinmi?
Javob: HA. Ushbu istisnolarning sinflari sinf merosi ierarxiyasini bir xil superklassgacha kuzatish mumkin ekan, faqat o'sha yuqori sinfdan foydalanish mumkin.
7. Konstruktor istisnolarni tashlay oladimi?
Javob: HA. Konstruktor faqat maxsus turdagi usuldir.
Mana kod misoli.
8. Yakuniy blokda istisnolarni tashlash
Aslida, siz buni qonuniy ravishda qilishingiz mumkin:
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();
}
}
}
Ammo kodni o'qish qobiliyatini saqlab qolish uchun siz o'rnatilgan blokni
try-catch
yangi usul sifatida e'lon qilishingiz va ushbu usulga qo'ng'iroqni blokga kiritishingiz kerak
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. Finally blokida return dan foydalanish mumkinmi?
Ha mumkin.
10. Nima uchun ishlab chiquvchilar istisnolarni jimgina hal qilishadi?
Masalan, bunday kod qismlari ko'pincha paydo bo'ladi. Agar istisnolardan to'g'ri ishlov berish juda muhim bo'lsa, nega ishlab chiquvchilar buni shu tarzda yozishni davom ettirmoqdalar?
try {
...
} catch(Exception e) {
e.printStackTrace();
}
Buni e'tiborsiz qoldirish eng oson. Ammo bu tez-tez bajarilsa ham, bu to'g'ri ekanligini anglatmaydi. Havolalar:
- Java-da belgilanmagan istisnolar
- Java-da ierarxik istisno daraxtining ildizi
- Stackoverflowdagi istisnolar haqida savollar
Asl maqola
GO TO FULL VERSION