Saya mencoba mempelajari lebih lanjut tentang Java dasar dan berbagai jenis Throwables, dapatkah seseorang memberi tahu perbedaan antara Pengecualian dan Kesalahan?
Saya mencoba mempelajari lebih lanjut tentang Java dasar dan berbagai jenis Throwables, dapatkah seseorang memberi tahu perbedaan antara Pengecualian dan Kesalahan?
Jawaban:
Kesalahan tidak boleh ditangkap atau ditangani (kecuali dalam kasus yang paling jarang terjadi). Pengecualian adalah roti dan mentega dari penanganan pengecualian. The Javadoc menjelaskan dengan baik:
Sebuah Kesalahan adalah subkelas Throwable yang menunjukkan masalah serius yang tidak boleh ditangkap oleh aplikasi yang masuk akal. Sebagian besar kesalahan tersebut adalah kondisi abnormal.
Lihatlah beberapa subclass dari Error, mengambil beberapa komentar JavaDoc mereka:
AnnotationFormatError - Dilemparkan ketika pengurai penjelasan mencoba membaca anotasi dari file kelas dan menentukan bahwa anotasi tersebut salah bentuk.AssertionError - Dilemparkan untuk menunjukkan bahwa pernyataan telah gagal.LinkageError- Subclass dari LinkageError menunjukkan bahwa suatu kelas memiliki ketergantungan pada kelas lain; Namun, kelas yang terakhir telah berubah secara tidak kompatibel setelah kompilasi dari kelas yang sebelumnya.VirtualMachineError - Dilemparkan untuk menunjukkan bahwa Java Virtual Machine rusak atau telah kehabisan sumber daya yang diperlukan untuk terus beroperasi. Sebenarnya ada tiga subkategori penting Throwable:
Error - Sesuatu yang cukup parah telah salah, sebagian besar aplikasi harus crash daripada mencoba untuk menangani masalah,RuntimeException) - Sangat sering terjadi kesalahan pemrograman seperti NullPointerExceptionargumen yang ilegal. Aplikasi terkadang dapat menangani atau memulihkan dari Throwablekategori ini - atau setidaknya menangkapnya di metode Thread run(), mencatat keluhan, dan terus berjalan.FileNotFoundExceptiondan TimeoutException...Slide ini menunjukkan hierarki pengecualian Java oleh @ georgios-gousios secara ringkas menjelaskan perbedaan antara Kesalahan dan Pengecualian di Jawa.
Kesalahan cenderung memberi sinyal pada akhir aplikasi Anda seperti yang Anda tahu. Biasanya tidak dapat dipulihkan dari dan menyebabkan VM Anda keluar. Menangkapnya tidak boleh dilakukan kecuali untuk mencatat atau menampilkan dan pesan yang sesuai sebelum keluar.
Contoh: OutOfMemoryError - Tidak banyak yang dapat Anda lakukan karena program Anda tidak dapat lagi berjalan.
Pengecualian seringkali dapat dipulihkan dan bahkan jika tidak, umumnya hanya berarti operasi yang dicoba gagal, tetapi program Anda masih dapat melanjutkan.
Contoh: IllegalArgumentException - Melewati data yang tidak valid ke metode sehingga panggilan metode gagal, tetapi itu tidak mempengaruhi operasi di masa depan.
Ini adalah contoh sederhana, dan ada banyak informasi lain hanya tentang Pengecualian saja.
Errors di java adalah tipe java.lang.Error.ErrorTerjadi pada saat run time. Mereka tidak akan diketahui dikompilasi. Errors sebagian besar disebabkan oleh lingkungan di mana aplikasi berjalan. java.lang.StackOverflowError ,java.lang.OutOfMemoryErrorExceptions di java adalah tipe java.lang.Exception.ExceptionTermasuk kedua jenis yang dicentang dan tidak dicentang.try-catchblokir.Exceptionterutama disebabkan oleh aplikasi itu sendiri.SQLException, IOException ArrayIndexOutOfBoundException, ClassCastException,NullPointerExceptionbacaan lebih lanjut: http://javaconceptoftheday.com/difference-between-error-vs-exception-in-java/

Sun mengatakannya dengan baik :
Sebuah Kesalahan adalah subkelas Throwable yang menunjukkan masalah serius yang tidak boleh ditangkap oleh aplikasi yang masuk akal.
Deskripsi Errorkelasnya cukup jelas:
An
Erroradalah subkelas dariThrowableyang mengindikasikan masalah serius yang tidak boleh ditangkap oleh aplikasi yang masuk akal. Sebagian besar kesalahan tersebut adalah kondisi abnormal. TheThreadDeathkesalahan, meskipun kondisi "normal", juga subclass dariErrorkarena sebagian besar aplikasi tidak harus mencoba untuk menangkapnya.Suatu metode tidak diperlukan untuk menyatakan dalam klausa pelemparannya setiap subclass dari
Erroryang mungkin dilemparkan selama pelaksanaan metode tetapi tidak tertangkap, karena kesalahan ini adalah kondisi abnormal yang seharusnya tidak pernah terjadi.
Dikutip dari dokumentasi kelasError Java sendiri .
Singkatnya, Anda tidak boleh menangkap Error, kecuali Anda memiliki alasan yang bagus untuk melakukannya. (Misalnya untuk mencegah implementasi server web Anda mogok jika servlet kehabisan memori atau sesuatu seperti itu.)
ExceptionSebaliknya, An hanyalah pengecualian normal seperti pada bahasa modern lainnya. Anda akan menemukan deskripsi terperinci dalam dokumentasi Java API atau sumber daya online atau offline.
Ada beberapa persamaan dan perbedaan antara kelas java.lang.Exceptiondan java.lang.Error.
Kesamaan:
Pertama - kedua kelas meluas java.lang.Throwabledan sebagai hasilnya mewarisi banyak metode yang umum digunakan ketika berhadapan dengan kesalahan seperti: getMessage, getStackTrace, printStackTracedan sebagainya.
Kedua, sebagai subclass dari java.lang.Throwablekeduanya mewarisi properti berikut:
Throwable sendiri dan semua subkelasnya (termasuk java.lang.Error) dapat dideklarasikan dalam daftar pengecualian metode menggunakan throwskata kunci. Deklarasi semacam itu hanya diperlukan untuk java.lang.Exceptiondan subkelas, untuk java.lang.Throwable, java.lang.Errordan java.lang.RuntimeExceptiondan subkelas mereka, merupakan opsional.
Hanya java.lang.Throwabledan subkelas yang diizinkan untuk digunakan dalam catchklausa.
Hanya java.lang.Throwabledan subkelas yang dapat digunakan dengan kata kunci - throw.
Kesimpulan dari properti ini mengikuti keduanya java.lang.Errordan java.lang.Exceptiondapat dideklarasikan di header metode, bisa dalam catchklausa, dapat digunakan dengan kata kunci throw.
Perbedaan:
Perbedaan konseptual pertama: java.lang.Errordirancang untuk dilemparkan oleh JVM dan menunjukkan masalah serius dan dimaksudkan untuk menghentikan pelaksanaan program alih-alih tertangkap (tetapi dimungkinkan seperti halnya java.lang.Throwablepenerus lainnya ).
Sebuah bagian dari deskripsi javadoc tentang java.lang.Error:
... menunjukkan masalah serius yang tidak boleh ditangkap oleh aplikasi yang masuk akal.
Sebaliknya java.lang.Exceptiondirancang untuk mewakili kesalahan yang diharapkan dan dapat ditangani oleh seorang programmer tanpa menghentikan eksekusi program.
Sebuah bagian dari deskripsi javadoc tentang java.lang.Exception:
... menunjukkan kondisi yang mungkin ingin ditangkap oleh aplikasi yang masuk akal.
java.lang.Errordan java.lang.Exceptionyang pertama dianggap sebagai pengecualian yang tidak dicentang untuk pemeriksaan pengecualian waktu kompilasi. Karena kode hasil melempar java.lang.Erroratau subkelasnya tidak perlu menyatakan kesalahan ini di header metode. Sambil melempar java.lang.Exceptiondeklarasi yang diperlukan di header metode.Throwable dan diagram kelas penggantinya (properti dan metode dihilangkan).

IMO kesalahan adalah sesuatu yang dapat menyebabkan aplikasi Anda gagal dan tidak boleh ditangani. Pengecualian adalah sesuatu yang dapat menyebabkan hasil yang tidak terduga, tetapi dapat dipulihkan dari.
Contoh:
Jika sebuah program kehabisan memori, ini merupakan kesalahan karena aplikasi tidak dapat melanjutkan. Namun, jika suatu program menerima jenis input yang salah, itu merupakan pengecualian karena program dapat menanganinya dan mengarahkan untuk menerima jenis input yang benar.
Kesalahan terutama disebabkan oleh lingkungan di mana aplikasi sedang berjalan. Sebagai contoh, OutOfMemoryError terjadi ketika JVM kehabisan memori atau StackOverflowError terjadi ketika tumpukan meluap.
Pengecualian terutama disebabkan oleh aplikasi itu sendiri. Misalnya, NullPointerException terjadi ketika aplikasi mencoba mengakses objek nol atau ClassCastException terjadi ketika aplikasi mencoba untuk melemparkan tipe kelas yang tidak kompatibel.
Berikut ringkasan yang cukup bagus dari Java API yang diwakili oleh Kesalahan dan Pengecualian:
Sebuah Kesalahan adalah subkelas Throwable yang menunjukkan masalah serius yang tidak boleh ditangkap oleh aplikasi yang masuk akal. Sebagian besar kesalahan tersebut adalah kondisi abnormal. Kesalahan ThreadDeath, meskipun kondisi "normal", juga merupakan subkelas Kesalahan karena sebagian besar aplikasi tidak boleh mencoba untuk menangkapnya.
Suatu metode tidak diperlukan untuk menyatakan dalam klausa pelemparannya setiap subkelas Kesalahan yang mungkin dilemparkan selama pelaksanaan metode tetapi tidak ditangkap, karena kesalahan ini adalah kondisi abnormal yang seharusnya tidak pernah terjadi.
OTOH, untuk Pengecualian, Java API mengatakan:
Pengecualian kelas dan subkelasnya adalah bentuk Throwable yang menunjukkan kondisi yang mungkin ingin ditangkap oleh aplikasi yang masuk akal.
Kesalahan disebabkan oleh lingkungan tempat aplikasi atau program Anda berjalan. Sering kali, Anda tidak dapat memulihkannya karena ini mengakhiri aplikasi atau program Anda. Javadoc menyarankan agar Anda tidak perlu repot-repot menangkap kesalahan seperti itu karena lingkungan misalnya JVM, pada kesalahan seperti itu akan berhenti.
Contoh:
VirtualMachineError- Dilemparkan untuk menunjukkan bahwa Java Virtual Machine rusak atau telah kehabisan sumber daya yang diperlukan untuk terus beroperasi.
OutOfMemoryErrorterjadi ketika JVM kehabisan memori atau StackOverflowErrorterjadi ketika tumpukan habis
.
Pengecualian disebabkan oleh aplikasi atau program Anda sendiri; mungkin karena kesalahanmu sendiri. Sering kali Anda dapat memulihkannya dan aplikasi Anda masih akan terus berjalan. Anda disarankan untuk menangkap kesalahan seperti itu untuk mencegah penghentian aplikasi atau program Anda yang tidak normal dan / atau untuk dapat menyesuaikan pesan pengecualian sehingga pengguna melihat pesan yang diformat dengan baik alih-alih pesan pengecualian buruk rupa yang tersebar di seluruh tempat.
Contoh:
NullPointerExceptionterjadi ketika aplikasi mencoba mengakses objek nol. atau Mencoba mengakses array dengan indeks yang tidak ada atau memanggil fungsi dengan data atau parameter yang salah.
Unchecked exceptions != RuntimeExceptions;Unchecked exceptions = RuntimeExceptions + Errors. Saya tahu itu menimbulkan pertanyaan: Apakah kesalahan merupakan pengecualian? , tapi ini yang mereka tulis. Berikut adalah salah satu contohnya: docs.oracle.com/javase/tutorial/essential/exceptions/… .