P. 1
Java Programlama Dili

Java Programlama Dili

|Views: 82|Likes:
Published by serkan
SERKAN SİMSEK
SERKAN SİMSEK

More info:

Published by: serkan on Apr 01, 2012
Copyright:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as PDF, TXT or read online from Scribd
See more
See less

01/31/2013

pdf

text

original

İstisnalar (Exceptions

)

© Altuğ B. Altıntaş 2003

Java ve Yazılım Tasarımı - Bölüm 8

1

İstisna deyince aklınıza ne geliyor ?

• “Diğerlerinin yazdığı programda hata olabilir ama benim yazdığım programda hata olmaz... “ - Anonim

© Altuğ B. Altıntaş 2003

Java ve Yazılım Tasarımı - Bölüm 8

2

Tam bir uygulama yazmak nasıl olur ?

• Bir uygulamanın, üzerine düşen işleri yapması onu tam bir uygulama yapar mı ?

© Altuğ B. Altıntaş 2003

Java ve Yazılım Tasarımı - Bölüm 8

3

Tam bir uygulama

• Doğruluk • Sağlamlık

© Altuğ B. Altıntaş 2003

Java ve Yazılım Tasarımı - Bölüm 8

4

Doğruluk- ilk şart

• İki sayıyı bölmeye yarayan bir uygulama geliştirmeniz istendi. • A / B = Sonuç çok kolay

© Altuğ B. Altıntaş 2003

Java ve Yazılım Tasarımı - Bölüm 8

5

Sağlamlık-unutulan şart

• Dışarıdan istenmeyen veriler girildiği zaman uygulamanız nasıl bir davranış sergiliyecektir ?
–5 / 0 = ? – 10 / elma = ? – armut / erik = ?

• Uygulamanız aniden kapanacak mı ? Yoksa bunları bölmeye mi kalkacak ?

© Altuğ B. Altıntaş 2003

Java ve Yazılım Tasarımı - Bölüm 8

6

Java ve sağlamlık şarttı

• Java Programlama dili oluşabilecek olan istisnalara karşı önlem alınmasını ister.
– Açılmak istenen dosya yerinde olmayabilir. – Ağ (network) bağlantısı kopmuş olabilir. – Okunmak istenen dosyanın içi boş olabilir.

© Altuğ B. Altıntaş 2003

Java ve Yazılım Tasarımı - Bölüm 8

7

İstisna nasıl oluşabilir ?

DiziErisim.java

© Altuğ B. Altıntaş 2003

Java ve Yazılım Tasarımı - Bölüm 8

8

İstisna yakalama mekanizması

try { // istisnaya sebebiyet verebilecek olan kod } catch(Exception1 e1) { //Eğer Exception1 tipinde istisna firlatılırsa buraya } catch(Exception2 e2) { //Eğer Exception2 tipinde istisna firlatılırsa buraya }

© Altuğ B. Altıntaş 2003

Java ve Yazılım Tasarımı - Bölüm 8

9

Örnekler

DiziErisim2.java DiziErisim3.java

© Altuğ B. Altıntaş 2003

Java ve Yazılım Tasarımı - Bölüm 8

10

İstisna İfadeleri

• Bir yordamın iki seçeneği vardır
– Oluşan istisnayı yakalayabilir (hata yakalama mekanizması kullanarak) – Oluşan istisnayı bir üst kısma fırlatabilir.

© Altuğ B. Altıntaş 2003

Java ve Yazılım Tasarımı - Bölüm 8

11

Örnek-1

IstisnaOrnek1.java

© Altuğ B. Altıntaş 2003

Java ve Yazılım Tasarımı - Bölüm 8

12

Örnek-2

IstisnaOrnek2.java

© Altuğ B. Altıntaş 2003

Java ve Yazılım Tasarımı - Bölüm 8

13

© Altuğ B. Altıntaş 2003

Java ve Yazılım Tasarımı - Bölüm 8

14

Örnek-3

IstisnaOrnek3.java

© Altuğ B. Altıntaş 2003

Java ve Yazılım Tasarımı - Bölüm 8

15

© Altuğ B. Altıntaş 2003

Java ve Yazılım Tasarımı - Bölüm 8

16

Örnek-4

IstisnaOrnek4.java

© Altuğ B. Altıntaş 2003

Java ve Yazılım Tasarımı - Bölüm 8

17

© Altuğ B. Altıntaş 2003

Java ve Yazılım Tasarımı - Bölüm 8

18

Örnek-5

IstisnaOrnek5.java

© Altuğ B. Altıntaş 2003

Java ve Yazılım Tasarımı - Bölüm 8

19

© Altuğ B. Altıntaş 2003

Java ve Yazılım Tasarımı - Bölüm 8

20

İstisna tip hiyerarşisi

• Nasıl olur da java.io.IOException istisna tipi, java.io.FileNotFoundException istisna tipini kapsayabilir ?

© Altuğ B. Altıntaş 2003

Java ve Yazılım Tasarımı - Bölüm 8

21

© Altuğ B. Altıntaş 2003

Java ve Yazılım Tasarımı - Bölüm 8

22

Üç ana tip

• Error • RuntimeException • Ve diğer Exception tipleri (önceden tedbir alınmaları gerekir)

© Altuğ B. Altıntaş 2003

Java ve Yazılım Tasarımı - Bölüm 8

23

Error

• Error istisna tipi ölümcül bir hatayı işarettir ve telafisi çok zordur; neredeyse imkansızdır. • Örneğin OutOfMemoryError istisna tipi, bellekten dolayı bir istisna meydana gelmiş ise uygulamanın buna müdahale edip düzeltmesi imkansızdır.

© Altuğ B. Altıntaş 2003

Java ve Yazılım Tasarımı - Bölüm 8

24

RuntimeException

• RuntimeException istisna tipleri, eğer uygulama normal seyrinde giderse ortaya çıkmaması gereken istisna tipleridir. • ArrayIndexOutOfBoundsException istisna tipi, bir dizinin olmayan elemanına eriştiğimiz zaman ortaya çıkan bir istisnadır. • RuntimeException istisna tipleri, yanlış kodlamadan dolayı ortaya çıkan bir istisnadır.

© Altuğ B. Altıntaş 2003

Java ve Yazılım Tasarımı - Bölüm 8

25

Ve diğer Exception tipleri

• Bu istisna tipleri çevresel koşullardan dolayı meydana gelebilir. • Örneğin erişilmeye çalışılan dosyanın yerinde olmaması (FileNotFoundException) veya ağ (network) bağlantısının kopması sonucu ortaya çıkabilecek olan istisnalardır. Bu istisnalar için önceden tedbir alınması şarttır.

© Altuğ B. Altıntaş 2003

Java ve Yazılım Tasarımı - Bölüm 8

26

Tüm diğer Exception istisna tiplerini yakalamak

catch (Exception ex) { // ...... }

© Altuğ B. Altıntaş 2003

Java ve Yazılım Tasarımı - Bölüm 8

27

RuntimeException istisna tipleri

• DiziErisim.java uygulama örneğimiz içerisinde istisna oluşma riski olmasına rağmen nasıl oldu da Java buna kızmayarak derledi ? Peki ama IstisnaOrnek1.java uygulamasını niye derlemedi ?

© Altuğ B. Altıntaş 2003

Java ve Yazılım Tasarımı - Bölüm 8

28

RuntimeException istisna tipleri

• Java Programlama Dili, RuntimeException istisna tiplerini yakalamak için bir baskı yapmaz.

© Altuğ B. Altıntaş 2003

Java ve Yazılım Tasarımı - Bölüm 8

29

RuntimeException istisna tipleri nelerdir ?

• • • • •

AritmeticException NullPointerException NegativeArraySizeException ArrayIndexOutOfBoundsException SecurityException

© Altuğ B. Altıntaş 2003

Java ve Yazılım Tasarımı - Bölüm 8

30

AritmeticException

• Bir sayının sıfıra bölünmesiyle ortaya çıkabilecek olan RuntimeException istisna tipi.
int i = 16 / 0 ; // AritmeticException ! hata !

© Altuğ B. Altıntaş 2003

Java ve Yazılım Tasarımı - Bölüm 8

31

NullPointerException

• Bir sınıf tipindeki referansı, o sınıfa ait bir nesneye bağlamadan kullanmaya kalkınca alınabilecek bir istisna tipi.
String ad ; System.out.println("Ad = " + ad.trim() ); // ! hata !

Bu hatayı almamak için ;
String ad = " Java Kitap Projesi "; // bağlama işlemi System.out.println("Ad = " + ad.trim() ); //dogru
© Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 8 32

NegativeArraySizeException

• Bir diziyi negatif bir sayı vererek oluşturmaya çalışırsak bu istisna tipi ile karşılaşırız.
int dizi[] = new dizi[ -100 ]; //! hata !

© Altuğ B. Altıntaş 2003

Java ve Yazılım Tasarımı - Bölüm 8

33

ArrayIndexOutOfBoundsException

• Bir dizinin olmayan elemanına ulaşmak istendiği zaman karşılaşılan istisna tipi • Daha detaylı bilgi için DiziErisim.java uygulama örneğini incelenebilir.

© Altuğ B. Altıntaş 2003

Java ve Yazılım Tasarımı - Bölüm 8

34

SecurityException

• Genellikle tarayıcı (browser) tarafından fırlatılan bir istisna tipidir. Bu istisnaya neden olabilecek olan sebepler aşağıdaki gibidir ;
– Applet içerisinden, yerel bir dosyaya erişmek istedendiği zaman. – Applet’in indirildiği sunucuya değil de değişik bir sunucuya ağ (network) bağlantısı kurulmaya çalışıldığı zaman. – Applet’in kendi içerisinde başka bir uygulama başlatmaya çalıştığı zaman.

© Altuğ B. Altıntaş 2003

Java ve Yazılım Tasarımı - Bölüm 8

35

İstisna Mesajları

• Bir istisna nesnesinden bir çok veri elde edilebilir. • Örneğin istisna oluşumunun yol haritası izlenebilir veya istisna oluşana kadar hangi yordamlar çağrılmış gibi değerli bilgiler görülebilir.

© Altuğ B. Altıntaş 2003

Java ve Yazılım Tasarımı - Bölüm 8

36

İstisna Mesajları

• String getMessage() : Oluşan istisnaya ait bilgileri String tipinde geri döner. • String getLocalizedMessage(): Bu yordam, Exception sınıfından türetilmiş alt sınıflar tarafından iptal edilebilir (override). • String toString(): Oluşan istisna hakkında kısa bir açıklamayı String tipinde geri döner.
– Oluşan istisna nesnesinin tipini ekrana basar – ": " iki nokta üst üste koyar ve bir boşluk bırakır. – Son olarak getMassege() yordamı çağrılır ve buradan - eğer bilgi varsa ekrana basılır.

© Altuğ B. Altıntaş 2003

Java ve Yazılım Tasarımı - Bölüm 8

37

Örnek-1

IstisnaMetodlari.java

© Altuğ B. Altıntaş 2003

Java ve Yazılım Tasarımı - Bölüm 8

38

İstisna Mesajları - Java 1.4

• Throwable getCause(): Bu yordamın
işe yaraması için istisna sınıfına ait yapılandırıcının içerisine bu istisnaya sebebiyet vermiş olan istisna tipini yerleştirmek gerekmektedir.

IstisnaMetodlari2.java

© Altuğ B. Altıntaş 2003

Java ve Yazılım Tasarımı - Bölüm 8

39

İstisna Mesajları - Java 1.4

• Throwable initCause( Throwable cause) :

İki yarı istisna tipini birleştirmeye yarar. Eğer bir istisna Throwable(Throwable) veya Throwable(String, Throwable) ile oluşturulmuş ise initCause() yordamı çağırılamaz.

IstisnaMetodlari3.java

© Altuğ B. Altıntaş 2003

Java ve Yazılım Tasarımı - Bölüm 8

40

İstisna Mesajları
• printStackTrace() : Throwable sınıfının bu yordamı

sayesinde oluşan bir istisnanın yol haritasını görebiliriz. • printStackTrace( PrintStream s ) : PrintStream sınıfına ait nesne kullanılarak oluşan istisnanın yol haritasını konsol yerine başka bir yere bastırmanız mümkündür. • printStackTrace( PrintWriter s ) : PrintWriter sınıfına ait nesne kullanılarak, oluşan istisnanın yol haritasını konsol yerine başka bir yere bastırmanız mümkündür. JSP ve Servlet lerde kullanılabilir.

IstisnaMetodlari4.java
© Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 8 41

Kendi İstisnalarımızı Nasıl Oluşturabiliriz?

• Java’nın kendi içerisinde tanımlanmış istisna tiplerinin dışında bizler de kendimize özgü istisna tiplerini oluşturup kullanabiliriz. • Sonuçta istisnalar da birer nesnedir ve kendilerine has durumları olabilir. BenimHatam.java SeninHatan.java

© Altuğ B. Altıntaş 2003

Java ve Yazılım Tasarımı - Bölüm 8

42

Örnek

Kobay.java

© Altuğ B. Altıntaş 2003

Java ve Yazılım Tasarımı - Bölüm 8

43

Ekran Çıktısı ---------------------Hata Olustu-1:sonuc eksi ! onemli hata ! 2 ---------------------Hata Olustu-2:SeninHatan: b parametresi sifir geldi ---------------------Hata Olustu-2:SeninHatan

© Altuğ B. Altıntaş 2003

Java ve Yazılım Tasarımı - Bölüm 8

44

finally Bloğu

• Bir işlemin her koşulda ( istisna olsun ya da olmasın ) kesin olarak yapılmasını istiyorsak finally bloğu kullanmalıyız. FinallyOrnek1.java FinallyOrnek2.java

© Altuğ B. Altıntaş 2003

Java ve Yazılım Tasarımı - Bölüm 8

45

return ve finally Bloğu

• finally bloğu her zaman çalıştırılır. • Örneğin bir yordam hiçbir şey döndürmüyorsa (void) ama bu yordamın içerisinde return ifadesi kullanılmış ise, finally bloğu, bu return ifadesi devreye girmeden hemen önce çalıştırılır. ReturnOrnek.java

© Altuğ B. Altıntaş 2003

Java ve Yazılım Tasarımı - Bölüm 8

46

Dikkat System.exit();

• Eğer System sınıfının statik bir yordamı olan exit() çağrılırsa finally bloğuna hiç girilmez. SystemExitOrnek.java

© Altuğ B. Altıntaş 2003

Java ve Yazılım Tasarımı - Bölüm 8

47

İstisnanın Tekrardan Fırlatılması

• Oluşan bir istisnayı catch bloğunda yakaladıktan sonra tekrardan bir üst kısma fırlatmanız mümkündür.

© Altuğ B. Altıntaş 2003

Java ve Yazılım Tasarımı - Bölüm 8

48

Gösterim

try { // riskli kod } catch (Exception ex){ System.out.println("istisna yakalandi: " + ex); throw ex; // dikkat }

© Altuğ B. Altıntaş 2003

Java ve Yazılım Tasarımı - Bölüm 8

49

Örnek

TekrarFirlatimOrnek1.java

© Altuğ B. Altıntaş 2003

Java ve Yazılım Tasarımı - Bölüm 8

50

İlginç Gelişme

• Oluşan bir istisna her zaman fırlatılamayabilir. FirlatimOrnek1.java FirlatimOrnek2.java

© Altuğ B. Altıntaş 2003

Java ve Yazılım Tasarımı - Bölüm 8

51

Çözüm

FirlatimOrnek3.java

© Altuğ B. Altıntaş 2003

Java ve Yazılım Tasarımı - Bölüm 8

52

İptal Etme (Overrride) ve İstisnalar

• İptal etme şartları
– İptal eden yordamın, iptal edilen yordam ile aynı parametrelere, – Aynı isme, – Üst sınıfa ait yordamın erişim belirleyicisinden daha erişilebilir veya aynı erişim belirleyicisine sahip olması gerekir.

© Altuğ B. Altıntaş 2003

Java ve Yazılım Tasarımı - Bölüm 8

53

Örnek

AB.java CD.java EF.java

© Altuğ B. Altıntaş 2003

Java ve Yazılım Tasarımı - Bölüm 8

54

İstisnaların Sıralanması

• Bir istisna catch bloğunda veya catch bloklarında yakalanırken, istisnaların hiyarerşik yapılarına dikkat edilmelidir. IstisnaSiralamasi.java IstisnaSiralamasi2.java IstisnaSiralamasi3.java
© Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 8 55

Sorular ...

© Altuğ B. Altıntaş 2003

Java ve Yazılım Tasarımı - Bölüm 8

56

You're Reading a Free Preview

Download
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->