The throws Exception
deklarasi adalah cara otomatis melacak metode yang mungkin melemparkan pengecualian untuk alasan diantisipasi tetapi tidak dapat dihindari. Deklarasi biasanya spesifik tentang tipe atau tipe pengecualian yang mungkin dilemparkan seperti throws IOException
atau throws IOException, MyException
.
Kita semua memiliki atau pada akhirnya akan menulis kode yang berhenti tiba-tiba dan melaporkan pengecualian karena sesuatu yang tidak kita antisipasi sebelum menjalankan program, seperti pembagian dengan nol atau indeks di luar batas. Karena kesalahan tidak diharapkan oleh metode, mereka tidak dapat "ditangkap" dan ditangani dengan klausa coba tangkap. Pengguna metode yang tidak curiga juga tidak akan mengetahui kemungkinan ini dan program mereka juga akan berhenti.
Ketika pemrogram mengetahui jenis kesalahan tertentu yang mungkin terjadi tetapi ingin menangani pengecualian ini di luar metode, metode dapat "melempar" satu atau lebih jenis pengecualian ke metode pemanggil alih-alih menanganinya. Jika pemrogram tidak mendeklarasikan bahwa metode (mungkin) memunculkan pengecualian (atau jika Java tidak memiliki kemampuan untuk mendeklarasikannya), kompilator tidak dapat mengetahuinya dan akan tergantung pada pengguna metode yang akan datang untuk mengetahuinya, menangkap dan menangani pengecualian apa pun yang mungkin dilontarkan metode. Karena program dapat memiliki banyak lapisan metode yang ditulis oleh banyak program berbeda, menjadi sulit (tidak mungkin) untuk melacak metode mana yang mungkin mengeluarkan pengecualian.
Meskipun Java memiliki kemampuan untuk mendeklarasikan pengecualian, Anda masih dapat menulis metode baru dengan pengecualian yang tidak tertangani dan tidak dideklarasikan, dan Java akan mengkompilasinya dan Anda dapat menjalankannya dan berharap yang terbaik. Apa yang tidak boleh dilakukan oleh Java adalah mengompilasi metode baru Anda jika ia menggunakan metode yang telah dideklarasikan sebagai pelemparan pengecualian, kecuali Anda menangani pengecualian yang dideklarasikan dalam metode Anda atau mendeklarasikan metode Anda sebagai melempar yang sama pengecualian atau jika ada beberapa pengecualian, Anda dapat menangani beberapa dan membuang sisanya.
Ketika seorang programmer menyatakan bahwa metode tersebut melempar tipe pengecualian tertentu, itu hanyalah cara otomatis untuk memperingatkan programmer lain menggunakan metode bahwa pengecualian dimungkinkan. Programmer kemudian dapat memutuskan untuk menangani pengecualian atau meneruskan peringatan dengan mendeklarasikan metode pemanggilan sebagai juga melempar pengecualian yang sama. Karena kompilator telah diperingatkan, pengecualian dimungkinkan dalam metode baru ini, ia dapat secara otomatis memeriksa apakah pemanggil metode baru di masa mendatang menangani pengecualian atau mendeklarasikannya dan memaksakan satu atau yang lain terjadi.
Hal yang menyenangkan tentang jenis solusi ini adalah ketika kompilator melaporkannya Error: Unhandled exception type java.io.IOException
memberikan file dan nomor baris dari metode yang dideklarasikan untuk membuang pengecualian. Anda kemudian dapat memilih untuk meneruskan tanggung jawab dan mendeklarasikan metode Anda juga "melempar IOException". Ini bisa dilakukan sampai ke metode utama yang kemudian akan menyebabkan program berhenti dan melaporkan pengecualian kepada pengguna. Namun, lebih baik menangkap pengecualian dan menanganinya dengan cara yang baik seperti menjelaskan kepada pengguna apa yang telah terjadi dan bagaimana memperbaikinya. Ketika sebuah metode menangkap dan menangani pengecualian, metode tersebut tidak lagi harus mendeklarasikan pengecualian. Uang berhenti di situ untuk berbicara.