Rumah > Java > javaTutorial > Blok akhirnya di Jawa

Blok akhirnya di Jawa

Mary-Kate Olsen
Lepaskan: 2024-11-13 02:10:02
asal
645 orang telah melayarinya

El bloque finally en Java

Apabila bekerja dengan pengecualian di Java, adalah perkara biasa untuk mencari keperluan untuk menggunakan blok cuba-tangkap untuk mengendalikannya dan bukan hanya menyerahkan pengendaliannya kepada sesiapa yang memanggil bahagian kod ini . Walau bagaimanapun, kadangkala perlu melakukan tindakan tertentu, tidak kira sama ada pengecualian telah dilemparkan atau tidak, atau sama ada aliran pelaksanaan program berjaya diselesaikan, contohnya, menutup fail, sambungan ke pangkalan data, dsb. .

Untuk kes ini blok akhirnya digunakan. Blok ini diletakkan selepas blok tangkapan, atau bahkan selepas blok cuba jika blok tangkapan tidak digunakan. Kod yang diletakkan di dalam blok akhirnya akan dilaksanakan dalam dua senario:

  • Apabila blok percubaan tamat dan tiada pengecualian telah dilemparkan.
  • Apabila pengecualian berlaku, maka aliran pelaksanaan akan terganggu dan blok tangkapan akan dilaksanakan.

Contoh 1

Mari kita pertimbangkan kaedah bahagi yang menerima dua integer dan mengembalikan hasil pembahagian antara mereka. Ini menggunakan blok cuba-tangkap untuk mengendalikan pengecualian yang dilemparkan apabila cuba membahagi dengan sifar, serta blok akhirnya untuk mencetak mesej yang menunjukkan bahawa sumber sedang dibersihkan.

public static int divide(int a, int b) {
        try {
            return a / b;
        } catch (ArithmeticException e) {
            System.out.println("Error: " + e.getMessage());
            throw e;
        } finally {
            System.out.println("Cleaning up resources...");
        }
    }
Salin selepas log masuk
Salin selepas log masuk

Dengan memanggil kaedah bahagi dengan nilai 10 dan 2, output berikut akan diperoleh:

Cleaning up resources...
5
Salin selepas log masuk
Salin selepas log masuk

Seperti yang kita lihat, tiada pengecualian telah dilemparkan, jadi kaedah mengembalikan hasil pembahagian dan blok akhirnya dilaksanakan, walaupun output blok akhirnya ditunjukkan terlebih dahulu. Sebaliknya, jika kaedah bahagi dipanggil dengan nilai 10 dan 0, output berikut akan diperoleh:

Error: / by zero
Cleaning up resources...
Exception in thread "main" java.lang.ArithmeticException: / by zero ...
Salin selepas log masuk

Dalam kes ini, pengecualian telah dilemparkan, jadi aliran pelaksanaan terganggu dan blok tangkapan telah dilaksanakan, tetapi sebelum melontar pengecualian sekali lagi, blok akhirnya telah dilaksanakan. Dalam kedua-dua contoh kita telah melihat bahawa blok akhirnya sentiasa dilaksanakan, tanpa mengira hasil yang diperolehi.

Contoh 2

Penggunaan utama blok akhirnya adalah untuk membebaskan sumber yang telah digunakan dalam blok cuba, seperti menutup fail, sambungan pangkalan data atau sambungan rangkaian. Untuk memberi contoh ini, mari kita pertimbangkan kaedah readFile yang membaca kandungan fail dan mengembalikan baris pertama. Ini menggunakan blok cuba-tangkap untuk mengendalikan pengecualian yang dilemparkan jika fail tidak boleh dibaca, serta blok akhirnya untuk menutup fail.

public static String readFile() throws IOException {
    FileReader reader = null;
    try {
        reader = new FileReader("file.txt");
        BufferedReader buffer = new BufferedReader(reader);
        return buffer.readLine();
    } catch (IOException e) {
        System.out.println("Error: " + e.getMessage());
        throw new RuntimeException(e);
    } finally {
        if (reader != null) reader.close();
    }
}
Salin selepas log masuk

Sekiranya kaedah readFile dilaksanakan dan fail tidak boleh dibaca, output berikut akan diperoleh:

public static int divide(int a, int b) {
        try {
            return a / b;
        } catch (ArithmeticException e) {
            System.out.println("Error: " + e.getMessage());
            throw e;
        } finally {
            System.out.println("Cleaning up resources...");
        }
    }
Salin selepas log masuk
Salin selepas log masuk

Seperti yang kita dapat lihat, pengecualian telah dilemparkan, jadi aliran pelaksanaan telah terganggu dan blok tangkapan telah dilaksanakan, tetapi sebelum melontar pengecualian sekali lagi, blok akhirnya telah dilaksanakan untuk menutup fail. Sebaliknya, jika fail file.txt dicipta dengan kandungan Hello world! dan kaedah readFile dipanggil, output berikut akan diperoleh, tanpa membuang sebarang pengecualian:

Cleaning up resources...
5
Salin selepas log masuk
Salin selepas log masuk

Beberapa aspek yang perlu diambil kira dalam contoh ini ialah:

  • Pembolehubah pembaca telah diisytiharkan di luar blok cuba supaya ia boleh diakses dari blok akhirnya, iaitu, ia berada dalam skop kedua-dua blok.
  • Semak sama ada pembolehubah pembaca berbeza daripada null sebelum cuba menutup fail, kerana jika fail tidak boleh dibuka, pembolehubah ini akan kekal null dan akan membuang pengecualian apabila cuba menutupnya.
  • Kemungkinan pengecualian bahawa kaedah tutup boleh lemparkan apabila cuba menutup fail dalam blok akhirnya tidak dikendalikan dan disebarkan dalam tandatangan kaedah, sekiranya anda ingin mengendalikannya, anda boleh membungkusnya dalam tangkapan cuba blok di dalam blok akhirnya.

Kesimpulan

Penggunaan akhirnya dalam Java telah menjadi sangat biasa sehingga bahasa itu sendiri mempunyai alternatif yang membolehkan kami memudahkan pengurusan sumber, blok cuba-dengan-sumber. Blok ini bertanggungjawab untuk menutup sumber secara automatik pada akhir penggunaannya, jadi tidak perlu menggunakan blok akhirnya untuk melepaskan sumber. Walau bagaimanapun, adalah penting untuk ambil perhatian bahawa blok akhirnya masih berguna dalam kes tertentu dan kedua-dua pilihan boleh digunakan bersama.

Atas ialah kandungan terperinci Blok akhirnya di Jawa. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:dev.to
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan