OCA Java imtahan mövzuları

Runtime&Checked Exceptions. Errors

Runtime Exceptions

Runtime exception’lar RuntimeException classından törənmiş exception’lardır. Bu exception’lar handle və declare olunmağı tələb etmir. Həm proqramçı, həm də JVM tərəfindən fırlada bilər. Ən çox istifadə edilən runtime exception’lar bunlardır:

 

ArithmeticException

Sıfıra bölmə əməliyyatına cəhd zamanı baş verir və JVM tərəfindən fırladılır.

   int result = 7 / 0;

Output:

   Exception in thread "main" java.lang.ArithmeticException: / by zero

 

ArrayIndexOutOfBoundsException

Massivin doğru indeksinə müraciət etmədikdə baş verir və JVM tərəfindən fırladılır.

Output:

 

ClassCastException

Uyğun olmayan tipləri bir-birinə cast edən zaman yaranır və JVM tərəfindən fırladılır. Bəzən compiler qeyri-mümkün castların qarşısını alır:

Integer String`in subclassı deyil, ona görə də compile xətası baş verir. Əgər biz String referansını əvvəlcə Object tipinə, sonra Integer tipinə cast etsək compile xətası baş verməyəcək, amma ClassCastException baş verəcək:

Output:

 

IllegalArgumentException

Çox vaxt metoda düzgün parametr göndərməyəndə baş verir və proqramçı tərəfindən fırladılır. Tutaq ki, bir setter metodumuz var və mənfi parametr qəbul edə bilməz:

Bu kod normal işləyir, lakin mənfi parametr göndərdikdə requestdən imtina (ignore) edilir və bu metodu çağıranın (caller) bundan xəbəri olmur. Amma biz istəyirik ki, baş verən problem barədə proqramçını xəbərdar edək və o, bu problemi həll etsin. Bu zaman  IllegalArgumentException istifadə etmək tam məqsədəuyğun olur:

Əgər metoda mənfi parametr göndərilsə, o zaman aşağıdakı kimi xəbərdarlıq çıxacaq:

 

NullPointerException

Instance dəyişən və metodlar null referans üzərindən çağırılan zaman baş verir və JVM tərəfindən fırladılır.

Output:

Başqa bir nümunəyə baxaq:

 

NumberFormatException

Uyğun formatda olmayan String`i numeric tipə çevirən zaman baş verir və proqramçı tərəfindən fırladılır. NumberFormatException classı IllegalArgumentException`un subclassıdır.

   Integer.parseInt("num");

Output:

 

 

Checked Exceptions

Exception və ondan törəyən bütün subclasslar (RuntimeException classı istisna olmaqla) bu exceptiona daxildir. Mütləq handle və ya declare olunmalıdırlar. Proqramçı və ya JVM tərəfindən fırladıla bilər. Ən çox istifadə edilən checked exceptionlar bunlardır:

 

IOException

Faylın oxunması və ya yazılması zamanı problem baş verdikdə yaranır (proqramçı tərəfindən fırladılır).

 

FileNotFoundException

Mövcud olmayan fayla müraciət etməyə çalışdıqda baş verir. IOException`un subclassıdır (proqramçı tərəfindən fırladılır).

 

OCA imtahanı üçün bu məlumatları bilmək yetərlidir. Bu iki exceptionu detallı şəkildə OCP imtahanında görəcəksiniz.

 

 

Errors

Error`lar Error classından törəyir və JVM tərəfindən fırladılır. Declare və ya handle olunmağı məsləhət görülmür. Errorlar nadir hallarda baş verir, OCA imtahanında əsas bu errorları görə bilərsiz:

 

ExceptionInInitializerError

Static initializer blokda exception baş verdikdə və handle olunmadıqda yaranır və JVM tərəfindən fırladılır. ExceptionInInitializerError ona görə error hesab olunur ki, Java bütünlüklə classın yüklənməsini dayandırır. Çünki classa müraciət olunan zaman ilk olaraq static initializer blok işə düşür və əgər həmin blokda exception baş verirsə, Java classdan istifadəyə başlaya bilmir.

Output:

Exception static blokda baş verdiyindən ExceptionInInitializerError alırıq. Amma bu errorla bağlı məlumat problemi həll etmək üçün yetərli olmadığından static blokda baş vermiş exceptionla bağlı məlumat da əlavə olaraq göstərilir.

 

StackOverflowError

Əsasən metod özü özünü çağıraraq sonsuz dövrə düşdüyündə (infinite recursion) baş verir və JVM tərəfindən fırladılır:

Output:

Metod təkrar-təkrar özünü çağırır və sonlanmır. Nəhayət, stack ehtiyatlar tükənir və error baş verir. Bu “infinite recursion” adlanır. Infinite recursion infinite loop’a nisbətən daha “yaxşı” hesab olunur, çünki Java sonunda onu yaxalayır və error verir. Amma infinite loop onu “kill” etməyənə qədər bütün CPU resurslarını istifadə edir.

Başqa bir maraqlı nümunəyə baxaq:

 

NoClassDefFoundError

Compile vaxtı mövcud olan classın runtime vaxtı tapılmaması zamanı baş verir və JVM tərəfindən fırladılır. Bu error imtahanda kod daxilində istifadə olunmur, sadəcə bilməliyik ki, bu errordur.

 

Bu errorlarla bağlı daha ətraflı məlumat üçün aşağıdakı linkə baxa bilərsiniz:

http://www.coderanch.com/t/655737/ocajp/certification/ExceptionInInitializerError-NoClassDefFoundError

 

Bütün mövzulara bax

 

About the author

Mushfiq Mammadov

Leave a Comment

 

This site uses Akismet to reduce spam. Learn how your comment data is processed.