মডিউল পাঠ (2/2)
সম্পদের সাথে চেষ্টা করুন
জাভা-এর পুরানো সংস্করণগুলিতে, যে সংস্থানগুলিকে স্পষ্টভাবে বন্ধ করার প্রয়োজন হয় (যেমন ফাইল, ডাটাবেস সংযোগ বা নেটওয়ার্ক স্ট্রীম) পরিচালনার জন্য একটি বাধ্যতামূলক finally ব্লকের প্রয়োজন হয় যাতে সেগুলি বন্ধ ছিল। এটি ভার্বোস এবং লিক-প্রবণ কোডের দিকে পরিচালিত করে।
জাভা 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!");
}
}নিজে চেষ্টা করে দেখুন
পাথে একটি FileReader মোড়ানো একটি BufferedReader আরম্ভ করতে ট্রাই-ওয়াই-রিসোর্স স্টেটমেন্ট ব্যবহার করে readFile পদ্ধতিটি সম্পূর্ণ করুন। ক্যাচ ব্লকে, IOException ইন্টারসেপ্ট করুন এবং 'Error read file' প্রিন্ট করুন।
ইঙ্গিত দেখান
'ট্রাই' এর ঠিক পরে বন্ধনীতে 'BufferedReader' ঘোষণা করুন এবং 'IOException' হ্যান্ডলিং প্রয়োগ করুন।
সমাধান 3 প্রচেষ্টার পরে উপলব্ধ
কাস্টম রিসোর্স কাস্টম রিসোর্সটিকে একটি ট্রাই-ওয়াথ-রিসোর্স ব্লকের মধ্যে ইনস্ট্যান্টিয়েট করুন, এটিতে doWork() পদ্ধতি চালু করুন এবং 'Error' প্রিন্ট করে ব্যতিক্রম পরিচালনা করুন।
ইঙ্গিত দেখান
এর ভিতরে `ট্রাই (CustomResource res = new CustomResource())` ব্যবহার করুন এবং `res.doWork();` কল করুন।
সমাধান 3 প্রচেষ্টার পরে উপলব্ধ
ফার্স্টরিসোর্স এবং সেকেন্ড রিসোর্স উভয়কেই একই ট্রাই-ওয়াথ-রিসোর্স নির্মাণে ঘোষণা করুন। 'ত্রুটি' প্রিন্ট করে ব্যতিক্রম পরিচালনা করুন।
ইঙ্গিত দেখান
একটি সেমিকোলন ব্যবহার করে `ট্রাই` এর বন্ধনীর ভিতরে দুটি সম্পদের ঘোষণা আলাদা করুন `;`।
সমাধান 3 প্রচেষ্টার পরে উপলব্ধ