try-with-resources
- Java kursu
- Orta seviye
- Ders 74/116
- 5 dk
try-with-resources ile otomatik kapatmayı öğrenirsin.
try-with-resources
Java 7 ile gelen try-with-resources, dosya gibi kaynakları otomatik kapatır. Kaynak try bloğunun başında tanımlanır; blok bitince Java otomatik olarak close() çağırır. BufferedReader r = new BufferedReader(...) kaynağı try parantezi içine yazılır.
Bu yapı, close() çağrısını unutma hatasını ortadan kaldırır. Kaynak AutoCloseable arayüzünü uygulamalıdır; Java'nın I/O sınıflarının çoğu uygular. Birden fazla kaynak noktalı virgülle ayrılır.
AutoCloseable arayüzü
Bir sınıfın try-with-resources'ta kullanılabilmesi için AutoCloseable arayüzünü uygulaması gerekir. Bu arayüz tek bir metot içerir: void close() throws Exception. Kendi kaynak sınıflarını yazarken bu arayüzü uygulayıp close'uoverride edersin.
Eğer try bloğunda bir istisna fırlarsa ve close da istisna fırlatırsa, close istisnası suppressed (bastırılmış) olarak ana istisnaya eklenir; kaybolmaz. Throwable.getSuppressed() ile erişilir.
Uygulama try-with-resources ile dosya oku
import java.io.BufferedReader; ve import java.io.FileReader; ve import java.io.FileWriter; ve import java.io.IOException; içe aktar. main içine throws IOException ekle. Önce dosyaya yaz: new FileWriter("k.txt").write("Satır"); — bu kapanmaz ama burada sorun değil. Asıl görev: try (BufferedReader r = new BufferedReader(new FileReader("k.txt"))) bloğu içinde System.out.println(r.readLine()); yaz. close çağrısı yapma; try-with-resources halleder.
Başlangıç kodu
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
// Önce dosyaya bir satır yaz (FileWriter ile)
// try-with-resources ile BufferedReader aç ve readLine yazdır
}
}Örnek çözüm
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
FileWriter fw = new FileWriter("k.txt");
fw.write("Satır");
fw.close();
try (BufferedReader r = new BufferedReader(new FileReader("k.txt"))) {
System.out.println(r.readLine());
}
}
}Beklenen çıktı
Satır
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 try-with-resources başlangıcını tamamla
try (BufferedReader r = new BufferedReader(new FileReader("a.txt"____)) {
System.out.println(r.readLine());
}
try (BufferedReader r = new BufferedReader(new FileReader("a.txt"))) {
System.out.println(r.readLine());
}
Açıklama: İki kapanış parantezi FileReader ve BufferedReader'ı kapatır.
2 try-with-resources neyi garanti eder?
- Kaynağın hiç acilmamasını
- İstisnanın hiç fırlamamasını
- Dosyanın otomatik silinmesini
- Kaynağın otomatik kapatılmasını Doğru cevap
Açıklama: try-with-resources blok sonunda close'u otomatik çağırır.
3 try-with-resources kavramlarını eşleştir
| Kavram | Anlamı |
|---|---|
AutoCloseable |
Kaynak için gereken arayüz |
close() |
Otomatik çağrılan metot |
suppressed |
close'tan gelen bastırılmış istisna |
try (...) |
Kaynak bildirimi |