ماڈیول اسباق (2/2)
وسائل کے ساتھ کوشش کریں۔
جاوا کے پرانے ورژنز میں، وسائل کو منظم کرنے کے لیے جن کو واضح طور پر بند کرنے کی ضرورت ہوتی ہے (جیسے فائلیں، ڈیٹا بیس کنکشن، یا نیٹ ورک اسٹریمز) کو ایک لازمی finally بلاک کی ضرورت ہوتی ہے تاکہ یہ یقینی بنایا جا سکے کہ وہ بند ہیں۔ اس سے وربوز اور لیک ہونے والے کوڈ کی وجہ بنی۔
Java 7 نے وسائل کے ساتھ کوشش کریں بیان متعارف کرایا، جو try بلاک کے اندر اعلان کردہ تمام وسائل کے خودکار بندش کی ضمانت دیتا ہے، بشرطیکہ وہ AutoCloseable انٹرفیس کو نافذ کریں۔
نحو
وسائل کو try کلیدی لفظ کے فوراً بعد قوسین کے اندر اعلان اور شروع کیا جاتا ہے۔
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متعدد وسائل کا اعلان کرنا
آپ ایک ہی try بلاک کے اندر متعدد وسائل کو انسٹیٹیوٹ کر سکتے ہیں، انہیں ایک سیمیکولن ; سے الگ کر کے۔ وسائل کو ان کے اعلان کے الٹ ترتیب میں بند کر دیا جائے گا۔
try (
FileReader fr = new FileReader("input.txt");
FileWriter fw = new FileWriter("output.txt")
) {
// Use resources
} catch (IOException e) {
System.out.println("Error: " + e.getMessage());
}اپنی مرضی کے وسائل کی تخلیق
ایک حسب ضرورت وسیلہ try-with-resources بلاک میں استعمال کیا جا سکتا ہے جب تک کہ یہ java.lang.AutoCloseable کو نافذ کرتا ہے اور close() طریقہ کو اوور رائیڈ کرتا ہے۔
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!");
}
}خود ہی آزمائیں۔
فائل ریڈر کو راستے پر لپیٹتے ہوئے بفرڈ ریڈر کو شروع کرنے کے لیے وسائل کے ساتھ کوشش کرنے کے بیان کا استعمال کرتے ہوئے readFile طریقہ کو مکمل کریں۔ کیچ بلاک میں، IOException کو روکیں اور 'Error read file' پرنٹ کریں۔
اشارہ دکھائیں۔
'Try' کے فوراً بعد قوسین میں 'BufferedReader' کا اعلان کریں، اور 'IOException' ہینڈلنگ کو لاگو کریں۔
3 کوششوں کے بعد حل دستیاب ہے۔
وسائل کے ساتھ کوشش کرنے والے بلاک کے اندر حسب ضرورت وسائل CustomResource کو انسٹینٹیٹ کریں، اس پر doWork() طریقہ استعمال کریں، اور 'Error' پرنٹ کرکے Exception کو ہینڈل کریں۔
اشارہ دکھائیں۔
استعمال کریں `try (CustomResource res = new CustomResource())` اور اس کے اندر `res.doWork();` کال کریں۔
3 کوششوں کے بعد حل دستیاب ہے۔
وسائل کے ساتھ ایک ہی کوشش میں فرسٹ ریسورس اور سیکنڈ ریسورس دونوں کا اعلان کریں۔ 'Error' پرنٹ کرکے استثنا کو ہینڈل کریں۔
اشارہ دکھائیں۔
سیمی کالون کا استعمال کرتے ہوئے `کوشش` کے قوسین کے اندر دو وسائل کے اعلان کو الگ کریں۔
3 کوششوں کے بعد حل دستیاب ہے۔