1. throw
pengendali
Apabila pengecualian ditangkap oleh catch
blok, dan sehingga ia dilemparkan ke mesin Java, ia hanyalah objek yang mewarisi Exception
(atau lebih tepat, Throwable
). Objek pengecualian itu sendiri tidak mempunyai sebarang sifat ajaib.
Semua logik tentang cara pengecualian berfungsi hanyalah cara khas mesin Java berkelakuan apabila pengecualian dilemparkan kepadanya.
Anda sentiasa boleh melemparkan semula pengecualian yang ditangkap pada mesin Java. Untuk melakukan ini, anda perlu menggunakan throw
operator:
throw exception;
Contoh:
Kod | Output konsol |
---|---|
|
|
Dalam kod ini, kami menangkap pengecualian, memaparkan mesej mengenainya pada skrin, dan kemudian melemparkannya semula.
Pengecualian yang dilemparkan semula tidak boleh ditangkap oleh catch
blok lain dalam try
blok yang sama.
2. Pengecualian anda
Ngomong-ngomong, anda boleh mencipta objek pengecualian sendiri: ia hanyalah objek yang jenisnya Exception
atau kelas yang mewarisinya. Dan membuangnya.
Ia lebih mudah daripada kedengaran. Contoh:
Kod | Output konsol |
---|---|
|
|
Dalam contoh di atas, kami mencipta objek pengecualian baharu yang jenisnya RuntimeException
dan segera melemparkannya menggunakan throw
operator.
Ia akan segera ditangkap oleh catch
blok, kerana RuntimeException mewarisi Exception
. Kod ini catch (Exception except)
menangkap objek pengecualian semua kelas yang mewarisi Exception
kelas.
3. finally
kata kunci
Satu lagi perkara penting. Kadangkala pengaturcara perlu melakukan beberapa tindakan tanpa mengira sama ada pengecualian berlaku dalam kod. Sebagai contoh, katakan kita membuka fail untuk menulis. Fail yang dibuka mesti ditutup dengan memanggil close()
.
try
{
// Code where an exception might occur
}
catch(ExceptionType name)
{
// Exception handling code
}
finally
{
// Code that must executed no matter what happens
}
Untuk melaksanakan tindakan mandatori ini, satu lagi jenis blok ( finally
) telah ditambahkan pada try-catch
konstruk, dengan itu mencipta try-catch-finally
konstruk. Ia kelihatan seperti ini:
Contoh:
FileInputStream source = null;
try
{
source = new FileInputStream("c:\\note.txt");
source.read();
}
catch(Exception except)
{
System.out.println("Caught the exception");
throw except;
}
finally
{
if (source != null)
source.close();
}
Kod dalam finally
blok akan dilaksanakan dalam apa jua keadaan, tidak kira sama ada terdapat pengecualian. Walaupun pengecualian dilemparkan dan tidak ditangkap, finally
blok itu masih akan dilaksanakan.
Ngomong-ngomong, jika anda tidak mahu menangkap pengecualian, tetapi anda memerlukan blok finally
, gunakan notasi trengkas untuk try-catch-finally
binaan: try-finally
blok. Ia kelihatan seperti ini:
try
{
// Code where an exception might occur
}
finally
{
// Code that must executed no matter what happens
}
GO TO FULL VERSION