Java – Throw ve Throws Kavramları

Merhaba arkadaşlar. Bu yazımda Java’da kullanılan throw ve throws kavramlarını ele alacağım.

Throw Kavramı

Yazdığımız Java programında açıkca throw ifadesini kullanarak bir istisna fırlatmak mümkündür. throw ifadesinin genel formu aşağıdaki gibidir.

throw FırlatılabilirNesne;

Burada FirlatilabilirNesne, Throwable veya onun herhangi bir alt sınıfı tipinde bir nesne olmak zorundadır. Throwable olmayan String, Object, Int, Char.. gibi tipler istisna olarak kullanılamaz. Throwable bir nesne elde etmenin iki yolu vardır. Birinci yolu catch cümleciği içinde parametre olarak kullanılabilir ya da new operatörü ile yeni bir nesne oluşturabilirsiniz.

Programın işleyişi throw ifadesinden hemen sonra durur ve sonra hiçbir ifade çalıştırılamaz. Kapsayan en yakın try bloğunda istisna tipiyle eşleşen bir catch cümleciği aranır. Bulunmaz ise sıradaki kapsayan try bloğu denetlenir. Denetleme try bloklarının sonuna kadar devam eder. Eğer istisna tipiyle eşleşen bir catch bulunamazsa program durur.

Şimdi bir istisna oluşturan ve bunu fırlatan basit bir örneği inceleyelim.

Ekran Alıntısı

Bu program aynı hatayı yakalamak için iki şansa sahiptir. Birincisi main() metodunun içinde çağırılan olustur_firlat metodunun try bloğunda hata oluşturulur ve catch bloğunda yakalanır. İkincisi main() metodunun içindeki catch bloğudur. Örnek kodumuzda kullanılan new kelimesini hata nesnesi oluşturmak için kullanırız.

Throws Kavramı

Eğer bir metot yakalayamadığı bir istisnaya neden olursa, metodu çağıranların kendilerini istisnaya karşı koruyabilmeleri için çağıran metodun bu davranışı belirtmesi gerekir. Bunu metodun bildirimine bir throws ifadesi ekleyerek yapabilirsiniz. throws ifadesi bir metodun fırlatabileceği istisna tiplerini belirtir. Eğer belirtilmez ise derleme zamanı hatası alınır.

throws ifadesinin genel formu aşağıdaki gibidir.

tip metot_adi (parametreler) throws istisna_listesi {

//metot gövdesi

}

Burada istisna_listesi metodun fırlatabileceği istisna tiplerinin virgülle ayrılmış halidir.

Aşağıdaki örnek kodumuza bakalım.

Ekran Alıntısı

Kodda gördüğünüz IllegalAccessException ifadesi metodumuzun fırlatabileceği hatanın tipidir. Bunu yazmazsak derleme hatası alırız. throwOne() metodunun içinde yeni bir hata nesnesi yaratılıp, fırlatılmıştır. Fırlatılan bu hata main() metodumuzun catch bloğunda yakalanmaktadır. Bu şekilde hata potansiyeline sahip metotlarımızın hata bildirimini yaparak bu metotları çağıran programların herhangi bir çalışma hatasıyla karşılaşmadan işleyişine devam etmesini sağlayabiliriz.

Bir daha ki yazımda görüşmek üzere..

 

Java This Anahtar Kelimesi

Merhaba arkadaşlar. Bu yazımda nesneye yönelik programlama dillerinde özellikle Java’da sıkça kullandığımız this ifadesinden bahsedeceğim.

Basitçe söylemek gerekirse this ifadesi o anda hangi nesne üzerinde işlemler yapılıyorsa o nesnenin ifadesini döndürür.

This ifadesinin bir kaç kullanımından bahsedelim.

Bu ifade genellikle değişken ismi çakışmalarını önlemek için kullanılabilir. Bu durum aslında this ifadesinin en çok kullanıldığı durumlardan birisidir. Çakışma olayını biraz açarsak; bir yapıcı metoda(constructor) gönderdiğimiz parametrelerin ismi sınıf değişkenleriyle aynı ise this kullanarak bu karışıklılığı önleyebiliriz.

Aşağıdaki örneğe bakalım.

Ekran AlıntısıEkran Alıntısı1

Yukarıdaki örnek kodda gördüğünüz üzere, ana sınıfımızda Ayşe Yılmaz diye bir öğrenci nesnesi oluşturduk ve bu nesneyi oluşturduğumuz ilk anda Ogrenci sınıfının yapıcı metodu çalışacaktır. Yapıcı metot isim ve soyisim adında iki parametre kullanmaktadır. Bir de yapıcı metodumuz dışındaki isim ve soyisim değişkenlerini görmektesiniz. Yapıcı metodun kullandığı parametrelerle bu değişkenlerin isminin aynı olduğuna aldanmayın aslında farklıdır. Yapıcı metottaki parametreler aslında bir iletim görevi görür bu parametreler ana sınıfımızdan gelen Ayşe ve Yılmaz kelimelerini yapıcı metoda iletmektedir. Ogrenci sınıfı değişkenleri olan isim ve soyisim ise bu parametrelerle gönderilen verileri tutmakla görevlidir. İşte tam burada this ifadesini kullanarak bu çakışmayı giderebiliriz. this.isim sınıf değişkeni olan isim değişkenini işaret ederken isim ifadesi yapıcı metoda gönderilen parametreyi temsil etmektedir.

this anahtar kelimesini kullanarak aynı sınıf içindeki diğer yapıcı metodları da çağırabilmemiz mümkün.

Aşağıdaki örneğe bakalım.

Ekran Alıntısı3Ekran Alıntısı5

Yukarıdaki örnek kodlarda gördüğünüz üzere bu seferde Mustafa Işık diye bir öğrenci nesnesi yarattık. Nesneyi yarattığımız anda ilk olarak iki parametre alan yapıcı metodumuz çalışacaktır. Bu yapıcı metodun içinden de this (isim, soyisim, 181) ifadesi ile diğer yapıcı metodumuz çalışacaktır. Böylece öğrencimizin isim ve soy ismine ek olarak numarasını da yapılandırabiliriz. Kısacası this ifadesinin bu kullanımı bir yapıcı metodun içinden başka bir yapıcı metoda göndermede bulunmaktır.

this anahtar kelimesinin diğer bir kullanımı da tek başına nesnelerin referansını temsil edebilmesidir.

Aşağıdaki örneğe bakalım

Ekran Alıntısı Ekran Alıntısı1

Yukarıda örnek kodlarda gördüğünüz üzere iki tane öğrenci nesnesi ve ogr_liste adında öğrencilerin tutulacağı bir ArrayList oluşturulmuştur. Ogrenci sınıfımızda da bu nesnelerimizi listemize eklemeye yarayan ekle metodu bulunmaktadır. Bu metodumuza gönderdiğimiz parametre öğrencilerin tutulduğu listedir ve metodun gövdesinde bulunan this ifadesi de metodun hangi öğrenci nesnesi üzerinden çağrıldığını belirtir. Yani ana sınıfımızda o1.ekle() ifadesi ile Mustafa Işık’ı temsil eden öğrenci nesnesi ekle metodu ile öğrenci listesine eklenir. Ekle metodunun içindeki this ifadesi aslında bu nesneyi temsil etmektedir.

Şunu da hatırlatmakta fayda var this ifadelerini statik metotlarımız içinde kullanamayız çünkü statik metotlar sınıf metotlarıdır. Bu metotlar nesnelerle ilgilenmez.

Bir sonraki yazımda görüşmek dileğiyle. İyi çalışmalar..

 

 

 

DNA Zinciri Eşleştirme

Merhaba arkadaşlar. Bugün Üniversitelerimizin spesifik olarak verdiği bir ödev konusuna değineceğim.

Konumuzun adı DNA zinciri eşleştirme. Çoğunuz özellikle sayısal bir geçmişi herkes zaten bunun ne anlama geldiğini biliyorsunuzdur. Bu yüzden fazla detaya girmeyeceğim.

Peki ödev bizden ne yapmamızı istiyor. Bunu açıklayalım.

Bu ödev; kullanıcının girdiği farklı DNA zincirlerinin eşleşip, eşleşmediğini kontrol edecek. Bu kontrolü bizim yazdığımız bir program sağlayacak.

Bildiğiniz üzere kısaca DNA zincirlerinin üzerinde nükleotitler bulunur. Bu nükleotitler; A (Adenin), T(Timin), G (Guanin), S(Sitozin) ve U(Urasil) dir. Biz urasille ilgilenmeyeceğız ve toplamda dört tane nükleotidimizin olduğunu varsayacağız.

Bu nükleotitler arasında şöyle bir eşleşme kuralı vardır.

A = T ve G = S

Yani bir zincirde bulunan Adenin’in karşısına başka bir zincirde bulunan Timin geliyorsa bu eşleşme uyumludur Aksi takdirde eşleşme olmaz. Programımızı da bunları dikkate alarak yazmamız gerekiyor.

Programımıza input olarak DNA zincirlerini nükleotitleriyle beraber gireceğiz ve çıktı olarak hangi zincirlerin eşleştiği sonucunu alacağız.

Ben bu programı C dili ile tasarladım tabi ki başka diller ile de tasarlanabilir.

Program kodu;