Məqalə Java-da istisnalar haqqında ən çox verilən 10 sualı təsvir edir.
1. Doğrulana bilən və yoxlanıla bilməyən
Qısacası, yoxlanılan istisnalar metodun gövdəsində açıq şəkildə tutulmalı və ya metodun atışlar bölməsində elan edilməlidir. Yoxlanılmayan istisnalar həll edilə bilməyən problemlər, məsələn, 0-a bölmə, null göstərici və s. Yoxlanmış istisnalar xüsusilə vacibdir, çünki siz API-dən istifadə edən digər tərtibatçıların istisnaları necə idarə edəcəyini bilmələrini gözləyirsiniz. Məsələn, IOException çox istifadə edilən yoxlanılan istisnadır, RuntimeException isə yoxlanılmamış istisnadır.
Daha ətraflı oxumadan əvvəl Java-da İerarxik İstisna Diaqramına baxın .
2. İstisnalarla məşğul olmağın ən yaxşı yolu
İstisna düzgün idarə oluna bilərsə, tutulmalı, əks halda yönləndirilməlidir.
3. try-də müəyyən edilmiş dəyişənlər niyə catch və ya son olaraq istifadə edilə bilməz?
Aşağıdakı kod parçasında try blokunda elan edilmiş sətir tutma blokunda istifadə edilə bilməz. Bu kod tərtib edilməyəcək.
try {
File file = new File("path");
FileInputStream fis = new FileInputStream(file);
String s = "inside";
} catch (FileNotFoundException e) {
e.printStackTrace();
System.out.println(s);
}
Səbəb odur ki, sınaq blokunda istisnanın tam olaraq hara atılmış ola biləcəyi məlum deyil. Ola bilsin ki, istisna obyekt elan edilməmişdən əvvəl atılıb. Və bu misal üçün doğrudur.
4. Nə üçün Double.parseDouble(null) və Integer.parseInt(null) fərqli istisnalar atır?
Düzdür, onlar müxtəlif istisnalar qaldırırlar. Bu JDK məsələsidir. Onlar sadəcə müxtəlif insanlar tərəfindən hazırlanmışdır və bu barədə çox narahat olmamalısınız.
Integer.parseInt(null);
Double.parseDouble(null);
5. Java-da əsas iş vaxtı istisnaları
Onlardan bir neçəsini təqdim edirik:
IllegalArgumentException
ArrayIndexOutOfBoundsException
Şərt yerinə yetirilmədikdə, onlar if ifadəsində istifadə edilə bilər, burada olduğu kimi:
if (obj == null) {
throw new IllegalArgumentException("obj не может быть равно null");
6. Bir tutma blokunda çoxlu istisnaları tutmaq mümkündürmü?
Cavab HƏ-dir. Nə qədər ki, bu istisnaların sinifləri sinif irsiyyət iyerarxiyasından eyni supersinifə qədər izlənilə bilər, yalnız həmin supersinif istifadə edilə bilər.
7. Konstruktor istisnalar ata bilərmi?
Cavab HƏ-dir. Konstruktor sadəcə xüsusi bir metod növüdür.
Budur bir kod nümunəsi.
8. Son blokda istisnaların atılması
Prinsipcə, bunu qanuni olaraq edə bilərsiniz:
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();
}
}
}
Lakin kodun oxunaqlılığını qorumaq üçün siz yuvalanmış bloku
try-catch
yeni metod kimi elan etməli və bloka bu metoda zəng daxil etməlisiniz
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 blokunda return istifadə etmək mümkündürmü?
Bəli sən bacararsan.
10. Nə üçün tərtibatçılar istisnaları sakitcə həll edirlər?
Məsələn, belə kod parçaları tez-tez görünür. İstisnaların düzgün idarə edilməsi bu qədər vacibdirsə, tərtibatçılar niyə bunu bu şəkildə yazmağa davam edirlər?
try {
...
} catch(Exception e) {
e.printStackTrace();
}
Buna məhəl qoymamaq ən asandır. Ancaq bu, tez-tez edilsə belə, bu, düzgün olduğunu bildirmir. Linklər:
- Java-da yoxlanılmamış İstisnalar
- Java-da iyerarxik istisna ağacının kökü
- Stackoverflow-da istisnalar haqqında suallar
Orijinal məqalə
GO TO FULL VERSION