Saya akan memberi Anda contoh pertama (tetapi pada akhirnya adalah jawaban mengapa kontroversi).
Mari kita misalkan Anda mengedit dokumen dalam editor dokumen berbasis Java dan setelah Anda selesai Anda memilih File-> Save as ... dan Anda memilih untuk menyimpan dokumen ke dalam volume yang Anda tidak memiliki izin menulis. Editor tidak akan crash pada Anda dengan stacktrace jelek, itu hanya akan memberi tahu Anda bahwa itu tidak dapat menyimpan file dan itu akan membiarkan Anda terus mengedit dan / atau menyimpan ke lokasi lain.
Dalam kasus seperti itu, mungkin pengecualian yang dicentang diharapkan, ditangkap, dan ditindaklanjuti untuk memulihkannya.
Di sisi lain, anggap saja ini sebuah divisi dengan nol atau pengecualian pointer nol yang disebabkan oleh kesalahan pemrograman yang memundurkan kepala jeleknya hanya dalam kondisi tertentu. Itu bisa terjadi di mana saja dalam kode, RAM dapat rusak, dll. Tidak ada API API akan memberitahu Anda "metode ini akan membuang pembagian dengan nol jika RAM rusak" .
Pengecualian yang diperiksa harus menjadi bagian dari desain dan pengguna API itu harus bersiap untuk menanganinya. Pengecualian yang tidak diperiksa dapat terjadi hampir di mana-mana dan berada di luar kendali kami.
Kontroversi muncul dari pemrogram menggunakan pengecualian yang tidak dicentang (memanjang dari RuntimeException) ketika mereka harus menggunakan pengecualian yang diperiksa:
- sebagai shorcut tidak diganggu oleh kompiler
- untuk membuat tanda tangan mereka terlihat lebih sederhana
- karena mereka menganggap bahwa pengecualian yang diperiksa adalah masalah ketergantungan (jika Anda melempar pengecualian yang diperiksa baru di kelas pelaksana, Anda harus memodifikasi tanda tangan antarmuka) dan sebaliknya.