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.
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 occursBirden 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.
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.
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
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.
İ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
Ö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.
İ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
Hem FirstResource'u hem de SecondResource'u aynı try-with-resources yapısında bildirin. 'Hata' yazdırarak İstisnayı işleyin.
İpucu göster
İki kaynağın bildirimini "try" parantezleri içinde noktalı virgül ";" kullanarak ayırın.
3 denemeden sonra çözüm mevcut