Java Bilgileri | Bölüm 6

MegaCrafter

Obsidyen Madencisi
Mesajlar
1,419
En iyi cevaplar
0
Beğeniler
1,542
Puanları
3,070
Yeniden merhaba. Hala destek geliyo bu konulara. Her neyse. Yine diğer konuların linklerini veriyorum. O konularda da güzel bilgiler var.
Bölüm 1 (final, static, kod blokları, switch-case, if-else'i kısaltma)
Bölüm 2 (main metodu, package-private, protected private, do-while, modüler)
Bölüm 3 (synchronized, interface, enum, abstract, annotation, dosya açma, silme, oluşturma, dosyaya yazı yazma, dosyadan yazı okuma, process oluşturma)
Bölüm 4 (JFrame, JButton, JTextField, JPanel, JLabel)
Bölüm 5 (Değişken Sistemi, Bazı Tavsiyeler, Thread ve Synchronized)
Bu konumuzda continue, try-catch-finally, try-with-resources, instanceof, native ve volatile'i göstericem. Başlayalım.

continue:
Bu anahtar kelime bir döngüyü, geriye kalan kodunu okumadan devam ettirmeye denir. Biraz değişik bir tanım oldu sanki. Kısaca örnek verelim. Siz bir sunucudaki tüm oyuncuları bir döngüye aldınız. Ama diyorsunuz ki adam bilmem ne bölgesinde ise onu alma. Yapmanız gereken şey adamın bölgesini kontrol etmek ve o bölgedeyse bu anahtar kelimeyi kullanmak. Bu sayede döngünün dışına çıkılmadan o oyuncuyu yok sayabilirsiniz.

try-catch-finally: Aslında try-catch ile aynı şey. Ama catch'den sonra bir de finally ekleyebiliyorsunuz. Bu demektir ki ne olursa olsun bir şeyi yapması gerek. Mesela:
Kod:
Writer writer;
try {
    writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(dosya), "utf-8"));// Bölüm 3'te anlattım. Dosyaya yazı yazıcaz.
    writer.write("Bir şey");
} catch (IOException e) {
    System.err.println("Dosyaya yazı yazılamadı!"); // Hata mesajı göndermeye yarayan bir metod.
} finally {
    writer.close; // Bunu da anlattım 3. Bölümde.
}
Burada olacak işlem şudur: Önce bir Writer tanımlıyoruz. Sonra içine bir şey yazıyoruz. Bu bir IOException verebilir. Verirse hata mesajı göndermesini söylüyoruz. Ama en sonunda Writer'ı kapatıyoruz. Tabi burada fazla işe yaramadı. Ama bir işinize yararsa diye aklınızda tutun.

try-with-resources: Bu biraz kafanızı karıştırabilir. Çünkü bunda try yazıcaksınız ama catch ve finally koymayacaksınız. Şöyle kullanabilirsiniz:
Kod:
String yazı;
try (Scanner sc = new Scanner(dosya)) { // Yine Bölüm 3'te anlattım.
    yazı = (sc.hasNextLine) ? sc.nextLine : "";
}
Tam olarak ne işe yarar ben de bilmiyorum. Ama anlatayım. Belki bir gün lazım olur :)

instanceof: Bunu plugin yazan arkadaşlar görmüşlerdir. Şu koda benzer bir kodu neredeyse her plugin içinde görebilirsiniz:
Kod:
if (!(sender instanceof Player)) // Bu sayede komutu gönderen kişinin konsol olduğunu anlıyoruz.
Peki ne işe yarar bu "instanceof"? Aslında bir şeyin örneğine bakar. Mesela:
Kod:
Araba ford_focus = new Araba();
if (ford_focus instanceof Araba) { // Bu doğru olacaktır. Çünkü ford_focus değişkeni Araba class'ını örnek almış.
    // Olaylar
}

native: Bunu siz kullanmayacaksınız zaten. Baya ileri bir konu aslında bu. Ama merak eden kişiler için göstericem. Bu anahtar kelime bir metodun Java'da değil de başka bir dilde var olduğunu belirtir. Yani mesela komut istemcisinin kullandığı dil Batch dilidir. Java'nın buna erişmesi gerekebilir. İşte bu yüzden kullanılır. Tabi bununla korkutma virüsü yapabilirsiniz. Çünkü Visual Basic Script'e de erişim sağlayabiliyor sanırım. O da sizin CD yerinizi açtırabiliyor :D

volatile:
Bu biraz değişik bir şey. Normalde sizin değişkenleriniz ve metodlarınız CPU'da depolanır. Ama bu anahtar kelime bunların ana hafızada saklanmasını garantiler. Bu Thread kullanırken işe yarar. Çünkü Thread'ler bağımsız işlemlerdir ve aynı değişkenleri paylaşmazlar. Eğer ana hafızada saklanırsa bütün Thread'ler aynı değişken değerlerini paylaşırlar. Yani "static" anahtar kelimesinin Thread'ler için olan versiyonu diyebiliriz. Yine kullanılacağını düşünmüyorum.

Pencere Kapanırken İşlem Yaptırmak
Bazen penceremiz kapanırken işlem yapmamız gerekebilir. Bunu Bölüm 4'te söylemiştim ama anlatmamıştım. Şimdi anlatalım. Tabi yine kodumuza bakalım önce:
Kod:
// Pencere tanımı...
frame.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE); // Anlattım.

frame.addWindowListener(new WindowAdapter() { // Pencereyi dinleyen sanal bir class oluşturuyoruz. Pencerenin kapatıldığı anı dinleyecek.
    @Override
    public void windowClosing(WindowEvent e) { // Pencere kapatma metodunu geçersiz kılıp kendimizinkini yazıyoruz.
        // Olaylar
    }
});

// Pencere tanımının devamı...
WindowAdapter abstract bir class. Pencerenin ne zaman kapatıldığını bilmek için oradaki metoddan yararlanıyoruz. Yine basit bir işlem.

Anlamadığınız bir yer varsa lütfen sorun ve bir hatamı görürseniz lütfen belirtin. İnsanları yanlış yönlendirmiş olmayayım diye. Özellikle anahtar kelimelerde bazı belirtmelerde sorun olabilir. Varsa söylemenizden hoşnut olurum :) Bir dahaki bilgi bölümünde görüşürüz diyecem de başka anlatılacak bir şey yok :D Eğer bir şeyi yapmak isterseniz veya bir sorunuz varsa bana özel mesaj olarak atabilirsiniz veya konu altından sorabilirsiniz. Okuduğunuz için teşekkür ederim. Görüşürüz :)
 


Son düzenleme:

MegaCrafter

Obsidyen Madencisi
Mesajlar
1,419
En iyi cevaplar
0
Beğeniler
1,542
Puanları
3,070
Ayrıca konuda belirtmemişim ama pencereyi kapatmanın da bir yolu var. Bunun için de şu kodu kullanabiliyoruz:
Kod:
frame.dispatchEvent(frame, WindowEvent.WINDOW_CLOSING);
Ayrıca programdan çıkmak için de:
Kod:
System.exit(0); // 0 yerine istediğiniz herhangi bir sayı yazabilirsiniz.
Bunları diğer konuda anlatacaktım ama şimdilik burada dursunlar.
 

Dantero

Elmas Madencisi
Mesajlar
881
En iyi cevaplar
0
Beğeniler
514
Puanları
1,310
Ruh hali
Devamı gelicekmi?
 

Üst