1.1 sürümünde Java’ya eklenen dahili sınıflar, bir çok açıdan bize avantaj sağlıyorlar. Dahili sınıfların ne olduğudan kısaca bahsedip, sağladığı avantajlar üzerine birkaç şey söylemek istiyorum.
Bir sınıfın içinde tanımlanan sınıflara dahili sınıf adı veriliyor. Normal bir sınıf bir paketin üyesi iken, dahili bir sınıf ise içinde tanımlandığı sınıfın bir üyesi oluyor.
Dahili sınıfları 4’e ayırıyoruz: Statik üye sınıflar, statik olmayan üye sınıflar, yerel sınıflar ve isimsiz sınıflar.
Statik üye sınıf, tanımlandığı bir sınıfın statik bir üyesi oluyor (çok açıklayıcı oldu değil mi
). Statik üye sınıflar, aynı statik metodlar gibi, tanımlandığı sınıfın diğer statik üyelerine erişim yapabiliyorken, statik olmayan alanlarına doğrudan erişim yapamıyor.
Statik olmayan üye sınıf da içinde tanımlandığı sınıfın bir üyesi iken, statik üye sınıfın aksine tanımlandığı sınıfın private da dahil tüm üyelerine doğrudan erişebiliyor (hatta this referansını farklı bir şekilde kullanarak tanımlandığı sınıfın nesnesine doğrudan erişiyor).
Yerel sınıflar herhangi bir kod bloğunun içinde tanımlanıp aynı yerel değişken mantığında olduğu gibi yalnızca o kod bloğunda etkin oluyorlar.
İsimsiz sınıf ise isim verilmeden yerel olarak tanımlanan sınıflara deniyor. Bu tanım biraz garip oldu biraz daha açık söyleyecek olursak herhangi bir kod bloğunda bir arayüzü gerçekleştiren bir sınıf tanımını isimsiz olarak yapabiliyoruz. Kodla göstereyim. Şöyle bir arayüzümüz olsun.
interface A { public void doSomething(); }
Herhangi bir kod bloğunun içinde:
//... A a = new A() { Public void doSomething() { System.out.println(“I am doing something”); }}; //...
diyerek, A arayüzünü gerçekleştiren isimsiz bir sınıftan bir nesne yaratıp a nesnesine atamış olduk. Bu tarz kodlar GUI yazarken event handler’larda falan çok kullanılıyor görmüş olmanız kuvvetle muhtemel.
Güzel bir şey daha, normal sınıflar yalnızca public veya package-private olabiliyorken, dahili sınıflar public, protected, private, package-private yani tüm erişim belirteçlerine sahip olabiliyor.
Başlığa bak çay demle. İngilizcesini yazsam daha mı anlaşılır olur dedim bir an (???). Biliyodum ben bunu lazım oldu bi baktım unutmuşum. Sonra baktım hafızaya, denedim birkaç şey, çat buldum. Sonra buraya da yazayım dedim.
Java’da statik bir dahili sınıf kendisini kapsayan sınıfın herhangi bir üyesine erişim yapamazken, statik olmayan bir dahili sınıf kendisini kapsayan sınıfın public, protected, private, package-private tüm üyelerine doğrudan erişebiliyor. Bu gayet esnek ve bir çok açıdan güzel bir özellik. Kodu da şöyle oluyor hatta:
class A { private int outerMember; public class C { public void innerMethod() { A.this.outerMember = 5; } } }
Gördüğünüz gibi dahili sınıfın içinden kendisini kapsayan nesneye A.this diyerek doğrudan ulaştık. Niye lazım olsun ki bu dahili sınıflar ne saçma bir şey bu diyorsanız dahili sınıfların mantığı üzerine kısa bir yazı yazmak niyetindeyim beni takip edin anacım.
Bu ne arkadaş ya, salıncaklara sığmıyorum artık
Tamam bilgisayar başında otura otura kilo aldık ama bizim çocukluğumuzdaki salıncaklar bu kadar dar değildi ya. Ahşap olurdu, demir olurdu, geniş olurdu çılgınlar gibi binerdik
Şimdi hangi parka baksam salıncaklar plastik, insanın g.tünün bi yanağı bile zor sığıyor bırak sallanmayı
Hayır şimdiki nesil de fastfood nesli hepsi dibek gibi maşşallah onlar nasıl sığıp da sallanıyorlar?
Ubuntu’da CHM dosyalarını görüntülemek için Gnochm, ChmSee, XChm gibi programları kullanabilirsiniz. Ben ChmSee’yi kullanıyorum.
Kurmak için
sudo apt-get install chmsee
komutunu kullanmanız yeterli.
Ayrıca CHM dosyalarınızı PDF formatına chm2pdf konsol uygulamasını kullanarak dönüştürebilirsiniz. chm2pdf aracını
sudo apt-get install libchm-bin htmldoc python-chm chm2pdf
komutuyla indirebilirsiniz. Bu araç htmldoc, libchm gibi araçları kullandığından gerekli araçları temin etmeniz gerekiyor (üstteki komut).
Peki dönüştürme işlemini nasıl yapacağız? Varsayılan ayarlarda dönüştürme işlemini gerçekleştirmek için (ki çoğu durum için işinizi görür)
chm2pdf --webpage chm_dosyasi.chmkomutu yeterli. Kullanımına yönelik detaylı bilgi için her zamanki gibi
man chm2pdfEski bir yazı ama şu adreste JUnit 4 üzerine çok güzel bir özet var. Okumak, öğrenmek lazım.
Ayrıca şunu da ben söylemiş olayım:
Bir keresinde lazım olmuştu ve Google’dan aratıp bulmuştum.
JUnit 4′te Birden fazla test sınıfını tek bir seferde nasıl çalıştırırız?
Önce örnek kodu vereyim:
import org.junit.runner.RunWith; import org.junit.runners.Suite; import org.junit.runners.Suite.SuiteClasses; // Runner sınıfı: Suite.class @RunWith(Suite.class) // Çalıştırılacak olan test sınıflarının Class nesnelerinden oluşan dizi @Suite.SuiteClasses({ Test1.class, Test2.class, Test3.class } ) // Hepsini grup olarak çalıştıracak boş sınıf public class AllTests { }
Peki nasıl oldu bu?
@RunWith(Suite.class)
satırıyla org.junit.runner.Suite sınıfının testimizi çalıştıracağını belirtiyoruz. Kendisi birden fazla test sınıfından oluşan bir grubu çalıştırıyor.
@Suite.SuiteClasses({ Test1.class, Test2.class, Test3.class } )
annotation’uyla da hangi test sınıflarımızın çalıştırılacağını bildiriyoruz. Rahatça anlaşılıyor aslında açıklamasam da olurmuş
Şubat 2009′da yazdığım iPhone güncellemesi yazısı sayesinde yüzlerce kişinin Google’dan beni bulması üzerine 1.5 yıl sonra akıllanıp o yazıyı güncelleyeyim dedim
Evet çok zekiyim (!) değil mi? En azından insanlara işe yarar bir şey sunmuşum, olayı basit de olsa güzelce anlatmışım
Şimdi bir kez daha üstünden geçelim.
Aşağıdaki adımlar ile 4.0 sürümü altındaki herhangi bir sürümde olan iPhone 3G / 3GS veya iPod zamazingonuzu 4.0′a yükseltebilirsiniz. Yalnız iTunes’ın son sürümünü kullandığınızdan emin olun.
Adım 1:
iPhone’unuzu bilgisayara bağlayıp iTunes’u açın.
Adım 2:
iTunes’da, sol menüdeki Source List kısmından Devices’a gelip cihazınızı seçin.
Adım 3:
Karşınıza çıkan iPhone’unuza ait bilgilerin olduğu ekranda, Check for Update’e basın.
Adım 4:
Download and Install’e tıklayın. Güncelleme ekranındaki ilerleme çubuğu dolmadan cihazınızın bilgisayar bağlantısını koparmayın.
Bu kadar.
Saatin gecenin ikisi olmasının verdiği uykulu hal olmasaydı 4.0 için jailbreak olayını da anlatacaktım ama artık jailbreak sizi Google’a havale ediyorum. Esen kalın efenim.
Java Reflection (Türkçe karşılığıyla Yansıtma kütüphanesi ama ben reflection ile devam edeceğim), JVM tarafından yüklenmiş olan sınıflar, arayüzler, sınıfların statik alanları, metod ve nitelikleri hakkında bilgilere çalışma zamanında programatik olarak erişmemizi sağlayan sınıf ve arayüzleri içeren bir kütüphanedir. Reflection’ı kullanarak bir nesnenin hangi sınıfın instance’ı olduğunu öğrenebilir, bir sınıfın yapılandırıcılarına, metodlarına, niteliklerine erişebilir, çalışma zamanında bir sınıf yaratabilir, bir sınıfın çalışma zamanına kadar ismini bilmediğimiz yöntemlerini çağırabilir, boyunu çalışma zamanında belirleyebildiğimiz diziler yaratabilir, elimize çalışma zamanında gelen sınıflar üzerinden nesneler yaratabiliriz. Peki bu tarz işlemlere ne zaman ihtiyaç duyulur? Bir hata ayıklayıcıyı ele alalım. Sözgelimi Eclipse’de debug yaparken, herhangi bir anda bir nesnenin alanlarının değerini görebiliyor, değiştirebiliyoruz. İşte burada Reflection kullanılıyor. Ya da Junit framework’ünü düşünün. Siz bir test sınıfı yazıyorsunuz. Yöntem adlarınızı, test sınıflarınızın adlarını seçmekte tamamen özgürsünüz. Sadece yazdığınız yöntemlerin ne iş yaptığına dair Junit’e yine size Junit’in sunduğu Annotation’larla bilgi veriyorsunuz. Örneğin “@Test” ile işaretlediğiniz metodlar test metodu olarak çalıştırılıyor, “@Before” dedikleriniz her test metodu çalıştırılmadan önce, “@After” dediğiniz metodlar ise tanımladığınız her test metodu çağrıldıktan sonra çağrılıyor. İşte bu gibi esnekliklerin hepsi Reflection ile sağlanıyor.
Bu kadar uzun bir girişin ardından Reflection’ı incelemeye başlayabiliriz. Belirtmek istediğim bir nokta şu ki Reflection’ın bize sağladığı sınıf ve arayüzleri tek tek her detayına kadar anlatamayacağım. Daha çok mevzunun ne olduğunu kavramanız için basit açıklama ve örneklerle ilerleyeceğim.
Ayrıca JAVA bilginiz başlangıç seviyede ise içerik biraz ağır gelebilir.
Bilgisayarınızın belirli bir saatte otomatik olarak kapanmasını sağlamak için Windows’a yönelik bir çok üçüncü parti yazılım mevcut. Ubuntu’da ise bu işi shutdown komutu ile kolayca halledebiliyoruz. Yalnız shutdown komutunu çalıştırmak için root yetkisine sahip olmak gerekiyor.
Bilgisayarı hemen kapatmak için:
sudo shutdown -h now
Bilgisayarı belirli bir saatte örneğin saat 5.30′da kapatmak için:
sudo shutdown -h 05:30
Bilgisayarı 2 saat sonra kapatmak için (verilen parametre dakika cinsinden):
sudo shutdown -h +120
komutlarını kullanabiliriz.
Ayrıca -h yerine -r yazarsak da bilgisayara restart attırmış oluyoruz.
Komutlar hakkında daha detaylı bilgi için:
man shutdown
Avatar: The Last Airbender. Küfretmeye nereden başlayayım bilemedim. Vallahi bilemedim.
Avatar’ı herhalde daha iğrenç çekemezlerdi.
Sinemadan sonra girdim IMDB puanına baktım 4.3. Çok bile. Vallahi çok bile. Gitmişler Aang’i Noah Ringer mıdır nedir mal bi velede oynatmışlar. Yanaklar tombik, tamam tatlı ama mal. Bilmiyorum başka filmde oynamışlığı da var mıdır. Zuko’ya da benim Slumdog Millionaire’den tanıdığım Dev Patel’i koymuşlar. Fragmandan biliyordum gerçi elemanları. Hoşuma da gitmemişti. Ama yine de merak ettim gidip göreyim dedim. 3D sinema diye aldıkları 12 liraya mı yanayım, güzelim hikayeyi 90-100 dakikaya tıkıştırıp bok ettiklerine mi?
Bir kere çizgi dizide Aang neşeli şen şakrak uşaktı. Filmde ise sürekli asık suratlı. Şimdi hikayenin asıl metnini bilmiyorum. Ama herhalde asık suratlı değildir. Uşak 3 sezon boyunca çizgi dizide hopladı zıpladı güldü oynadı neticede.
Ya Zuko’ya ne demeli?
Allahım koymuşlar elin gapçuğunu oraya. Çingen gibi. Ulan koskoca dünyada başka oynatacak adam mı kalmadı?
Zuko’nun amcası Iroh ile Ateş Kralı Ozai de Zuko kadar iğrenç olmuş. Herhalde çizgi diziden sonra izlememek lazım bu filmi. Ulan herif o çizgi dizide bildiğin kocaman göbekli general Iroh’tu. Çalı süpürgesi gibi herifi oynatmışınız Iroh diye. Ozai’de de çizgi dizideki o karizma, o ihtişam, o duruş nerdeee… Tam büzük o da.
Bilmiyorum. Rollerdeki oyuncular iyi oyuncular olabilirler. Ama Avatar’a hiç gitmemiş. Katara hariç
Taş maşallah taş
Hasta oldum hatuna
Bir de ben filmi Türkçe dublaj izledim. Allahım o da ayrı bir işkenceydi. 40 yılın “Eng”i, olmuş “Ang”! Ang ne lan? “Amg” deseydiniz bari?
Gitmeyin, gittiyseniz de oturun tövbe edin.
Giden paranın peşine oturup bir bardak soğuk su içmeyi de ihmal etmeyin benim gibi 12 lira falan bayıldıysanız.
Eve gelince Avatar’ın çizgi dizisinden üç beş parça bir şey izledim. Şu sahne, favori sahnelerimden birisidir. Dublaj da on numara. Çizgifilm izlerken acayip duygulandım, evet.
(Haziran 2011′de güncellendi)
Muhtemelen çoğunu biliyorsunuzdur ama ben yine de aralarından bilmedikleriniz çıkabilir diye çok sık kullandığım Eclipse kısayollarını paylaşayım dedim. Kısayollarla aranız henüz iyi değilse kısayolları öğrenmenizi ve kullanmaya çalışmanızı şiddetle tavsiye ederim zira işlerinizi çok kolaylaştırıyorlar.
CTRL + 1
Quick Fix. Bunu öğrendikten sonra bana göre en mübarek Eclipse Kısayolu.
CTRL + SHIFT + R
Open Resource: İsmini yazacağınız kaynak dosyasını açar.
CTRL + SHIFT + T
Open Type: İsmini yazacağınız türü açar.
CTRL + D
Üzerinizde bulunduğunuz satırı siler. Tek tuşla ov şit.
CTRL + E
Açık olan editörleri listeler. Onlarca sınıfa aynı anda göz atıyorsanız sınıflar arasında hızlıca geçiş yapabilirsiniz.
CTRL + I
Girintilemeyi düzeltir.
CTRL + M
Maximize / Unmaximize. Bulunduğunuz alanı genişletir, genişletilmiş halde ise küçültür.
CTRL + Delete / Ctrl + Backspace
İmlecin sağındaki / solundaki kelimeyi siler. Otomatik tamamlayıcıyı fazla kullanıyorsanız yararlı olabiliyor.
CTRL + L
Numarasını vereceğiniz satıra atlar.
SHIFT + CTRL + UP / SHIFT + CTRL + DOWN
Sonraki / önceki sınıf üyesine sıçrar. Az sayıda metodunuz falan varsa bir metoddan diğer metoda hızlıca geçmek için kullanabilirsiniz. Ben kullanıyorum zira.
ALT + UP / ALT + DOWN
İmlecin o anda bulunduğu satırı ya da seçtiğiniz satırları aşağı yukarı kaydırır. Kod bloklarının yerini kolayca değiştirebilirsiniz. Lazım olduğu zaman çok kullanışlı oluyor.
F3
Tanıma git. İmlecin üzerinde bulunduğu öğenin tanımına gider. Bir niteliğin adının üstünde iseniz niteliğe, bir sınıf adının üstünde iseniz sınıfın kaynak koduna gider.
SHIFT + ALT + J
Sınıf / Metod başlarına Javadoc yorumları ekler.
SHIFT + CTRL + C
Seçili kod bloğunu yorum satırı haline getirir. Daha önce yorum satırı yapılmış kod bloğunu normal hale getirir.
SHIFT + CTRL + O
Import’ları düzenler. Gereksiz import’ları kaldırır. Eklenmesi gereken import’ları ekler. Bazen kullandığınız bir sınıf adı birden fazla paketin altında bulunabilir. Böyle bir durumda SHIFT + CTRL + O dediğinizde size hangisini ekleyeceğinizi de sorar.
SHIFT + CTRL + F
Yazdığınız kodun stilini düzeltir. Yani girintileri, boşlukları, noktanın virgülün vesairenin konumlarını ayarlar (Girinti şu kadar olsun, noktadan sonra boşluk olsun gibi ayarları Preferences’ten yapabilirsiniz).
SHIFT + CTRL + B
İmlecin olduğu satıra breakpoint koyar. Koyulmuş bir breakpointi kaldırır.
CTRL + N
Files > New yoluyla gelen pencereyi açar.
SHIFT + ALT + M
Seçili kod bloğunu yeni bir metod tanımlayıp içerisine yerleştirir.
Bilmemenin değil öğrenmemenin ayıp olduğu Debug kısayolları:
F11
Debug’ı başlatır.
F5 (Step into)
Debug yaparken bir metod tanımında iseniz işletime o çağrının içinden devam eder ve bazı durumlarda metodun içinde neler olup bittiğine bakmanız gerekiyorsa çok yararlı olur.
F6 (Step Over)
Bir sonraki komutu işletir.
F8 (Resume)
Bir sonraki breakpoint’e kadar olan komutları tek seferde işletir.
Ayrıca Windows > Preferences > General > Keys yoluna giderek kısayolları düzenleyebilirsiniz. Örneğin ben ekstradan şu kısayolları da kullanıyorum:
CTRL + SHIFT + N
Yeni sınıf tanımlama penceresi açar (Keys bölümünde New Class seçeneğiyle ayarlanıyor).
CTRL + SHIFT + I
Yeni interface tanımlama penceresi açar (Keys bölümünde New Interface seçeneğiyle ayarlanıyor).


