Ana içeriğe geç
Modül 5 · Ders 2 ders 2Kurstaki 10/14~12 min
Modül dersleri (2/2)

Kaynaklarla Deneyin

Java'nın eski sürümlerinde, açık kapatma gerektiren kaynakların (dosyalar, veritabanı bağlantıları veya ağ akışları gibi) yönetilmesi, kapatıldıklarından emin olmak için zorunlu bir finally bloğu gerektiriyordu. Bu, ayrıntılı ve sızıntıya yatkın kodlara yol açtı.

Java 7, try bloğu içinde bildirilen tüm kaynakların, AutoCloseable arayüzünü uygulamaları koşuluyla otomatik olarak kapatılmasını garanti eden try-with-resources deyimini kullanıma sundu.

Sözdizimi

Kaynaklar, try anahtar sözcüğünden hemen sonra parantez içinde bildirilir ve başlatılır.

Java
try (BufferedReader br = new BufferedReader(new FileReader("file.txt"))) {
    String line = br.readLine();
    System.out.println(line);
} catch (IOException e) {
    System.out.println("I/O Error: " + e.getMessage());
}
// br is closed automatically here, even if an exception occurs

Birden Fazla Kaynak Bildirme

Aynı try bloğu içinde birden çok kaynağı, bunları noktalı virgülle ; ayırarak başlatabilirsiniz. Kaynaklar bildirimlerinin tersi sırayla kapatılacaktır.

Java
try (
    FileReader fr = new FileReader("input.txt");
    FileWriter fw = new FileWriter("output.txt")
) {
    // Use resources
} catch (IOException e) {
    System.out.println("Error: " + e.getMessage());
}

Özel Kaynaklar Oluşturma

Özel bir kaynak, java.lang.AutoCloseable uyguladığı ve close() yöntemini geçersiz kıldığı sürece try-with-resources bloğunda kullanılabilir.

Java
public class DatabaseConnection implements AutoCloseable {
    public void query(String sql) {
        System.out.println("Running query: " + sql);
    }

    @Override
    public void close() {
        System.out.println("Connection closed!");
    }
}

Kendin dene

Egzersiz#java.m5.l2.e1
Denemeler: 0Yükleniyor…

Yolda bir FileReader'ı saran BufferedReader'ı başlatmak için try-with-resources ifadesini kullanarak readFile yöntemini tamamlayın. Catch bloğunda, IOException'ı durdurun ve 'Dosya okunurken hata' yazdırın.

Düzenleyici yükleniyor…
İpucu göster

'Try' işleminden hemen sonra 'BufferedReader'ı parantez içinde belirtin ve 'IOException' işlemeyi uygulayın.

3 denemeden sonra çözüm mevcut

Egzersiz#java.m5.l2.e2
Denemeler: 0Yükleniyor…

Özel kaynak CustomResource'u kaynaklarla dene bloğunun içinde örnekleyin, üzerinde doWork() yöntemini çağırın ve 'Hata' yazdırarak İstisna'yı işleyin.

Düzenleyici yükleniyor…
İpucu göster

'try (CustomResource res = new CustomResource())' kullanın ve bunun içinde 'res.doWork();' öğesini çağırın.

3 denemeden sonra çözüm mevcut

Egzersiz#java.m5.l2.e3
Denemeler: 0Yükleniyor…

Hem FirstResource'u hem de SecondResource'u aynı try-with-resources yapısında bildirin. 'Hata' yazdırarak İstisnayı işleyin.

Düzenleyici yükleniyor…
İpucu göster

İki kaynağın bildirimini "try" parantezleri içinde noktalı virgül ";" kullanarak ayırın.

3 denemeden sonra çözüm mevcut