java
Pengecualian (atau kejadian luar biasa) adalah masalah yang muncul selama eksekusi suatu program. Saat Pengecualian terjadi aliran normal program terganggu dan program/Aplikasi berakhir secara tidak normal, yang tidak disarankan, oleh karena itu, pengecualian ini harus ditangani.
Pengecualian dapat terjadi karena berbagai alasan. Berikut adalah beberapa skenario di mana pengecualian terjadi.
Seorang pengguna memasukkan data yang tidak valid.
File yang perlu dibuka tidak dapat ditemukan.
Sambungan jaringan terputus di tengah komunikasi atau JVM kehabisan memori.
Beberapa pengecualian ini disebabkan oleh kesalahan pengguna, yang lain oleh kesalahan pemrogram, dan lainnya oleh sumber daya fisik yang gagal dalam beberapa cara.
Berdasarkan ini, kami memiliki tiga kategori Pengecualian. Anda perlu memahaminya untuk mengetahui cara kerja penanganan pengecualian di Java.
Pengecualian yang diperiksa Pengecualian yang diperiksa adalah pengecualian yang diperiksa (diberitahu) oleh kompiler pada waktu kompilasi, ini juga disebut sebagai pengecualian waktu kompilasi. Pengecualian ini tidak dapat diabaikan begitu saja, programmer harus menangani (menangani) pengecualian ini.
Misalnya, jika Anda menggunakan FileReader class dalam program Anda untuk membaca data dari file, jika file yang ditentukan dalam konstruktornya tidak ada, maka FileNotFoundException terjadi, dan kompilator meminta programmer untuk menangani pengecualian.
import java.io.File; import java.io.FileReader; public class FilenotFound_Demo { public static void main(String args[]) { File file = new File("E://file.txt"); FileReader fr = new FileReader(file); } }
Jika Anda mencoba mengkompilasi program di atas, Anda akan mendapatkan pengecualian berikut.
C:\>javac FilenotFound_Demo.java FilenotFound_Demo.java:8: error: unreported exception FileNotFoundException; must be caught or declared to be thrown FileReader fr = new FileReader(file); ^ 1 error
Catatan Karena metode read() dan tutup() kelas FileReader melempar IOException, Anda dapat mengamati bahwa compiler memberi tahu untuk menangani IOException, bersama dengan FileNotFoundException.
Pengecualian yang tidak dicentang Pengecualian yang tidak dicentang adalah pengecualian yang terjadi pada saat eksekusi. Ini juga disebut sebagai Pengecualian Waktu Proses . Ini termasuk bug pemrograman, seperti kesalahan logika atau penggunaan API yang tidak tepat. Pengecualian runtime diabaikan pada saat kompilasi.
Misalnya, jika Anda telah mendeklarasikan larik berukuran 5 dalam program Anda, dan mencoba memanggil th ke-6 elemen array maka ArrayIndexOutOfBoundsExceptionexception terjadi.
public class Unchecked_Demo { public static void main(String args[]) { int num[] = {1, 2, 3, 4}; System.out.println(num[5]); } }
Jika Anda mengkompilasi dan menjalankan program di atas, Anda akan mendapatkan pengecualian berikut.
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5 at Exceptions.Unchecked_Demo.main(Unchecked_Demo.java:8)
Kesalahan Ini sama sekali bukan pengecualian, tetapi masalah yang muncul di luar kendali pengguna atau pemrogram. Kesalahan biasanya diabaikan dalam kode Anda karena Anda jarang dapat melakukan apa pun terhadap kesalahan. Misalnya, jika terjadi stack overflow, akan muncul error. Mereka juga diabaikan pada saat kompilasi.
Semua kelas pengecualian adalah subtipe dari kelas java.lang.Exception. Kelas pengecualian adalah subkelas dari kelas Throwable. Selain kelas pengecualian ada subkelas lain yang disebut Error yang diturunkan dari kelas Throwable.
Kesalahan adalah kondisi abnormal yang terjadi jika terjadi kegagalan parah, ini tidak ditangani oleh program Java. Kesalahan dihasilkan untuk menunjukkan kesalahan yang dihasilkan oleh lingkungan runtime. Contoh:JVM kehabisan memori. Biasanya, program tidak dapat pulih dari kesalahan.
Kelas Exception memiliki dua subclass utama:kelas IOException dan Kelas RuntimeException.
Berikut adalah daftar Pengecualian Bawaan Java yang paling umum dicentang dan tidak dicentang.
Berikut adalah daftar metode penting yang tersedia di kelas Throwable.
No.Pr. | Metode &Deskripsi |
---|---|
1 | getMessage() String publik() Mengembalikan pesan mendetail tentang pengecualian yang telah terjadi. Pesan ini diinisialisasi dalam konstruktor Throwable. |
2 | getPenyebab Throwable publik() Mengembalikan penyebab pengecualian yang diwakili oleh objek Throwable. |
3 | String publik toString() Mengembalikan nama kelas yang digabungkan dengan hasil getMessage(). |
4 | public void printStackTrace() Mencetak hasil toString() bersama dengan pelacakan tumpukan ke System.err, aliran keluaran kesalahan. |
5 | publik StackTraceElement [] getStackTrace() Mengembalikan array yang berisi setiap elemen pada pelacakan tumpukan. Elemen pada indeks 0 mewakili bagian atas tumpukan panggilan, dan elemen terakhir dalam array mewakili metode di bagian bawah tumpukan panggilan. |
6 | Publik Throwable fillInStackTrace() Mengisi pelacakan tumpukan objek Throwable ini dengan pelacakan tumpukan saat ini, menambahkan informasi sebelumnya dalam pelacakan tumpukan. |
Metode menangkap pengecualian menggunakan kombinasi coba dan menangkap kata kunci. Blok coba/tangkap ditempatkan di sekitar kode yang mungkin menghasilkan pengecualian. Kode dalam blok try/catch disebut sebagai kode yang dilindungi, dan sintaks untuk menggunakan try/catch terlihat seperti berikut −
try { // Protected code } catch (ExceptionName e1) { // Catch block }
Kode yang rentan terhadap pengecualian ditempatkan di blok coba. Ketika pengecualian terjadi, pengecualian yang terjadi ditangani oleh blok tangkap yang terkait dengannya. Setiap blok try harus segera diikuti oleh blok catch atau blok akhirnya.
Pernyataan tangkap melibatkan mendeklarasikan jenis pengecualian yang Anda coba tangkap. Jika pengecualian terjadi dalam kode yang dilindungi, blok tangkap (atau blok) yang mengikuti percobaan dicentang. Jika jenis eksepsi yang terjadi tercantum dalam blok catch, eksepsi akan diteruskan ke blok catch seperti halnya argumen diteruskan ke parameter metode.
Berikut ini adalah array yang dideklarasikan dengan 2 elemen. Kemudian kode mencoba mengakses ke-3 elemen array yang melempar pengecualian.
Demo Langsung// File Name : ExcepTest.java import java.io.*; public class ExcepTest { public static void main(String args[]) { try { int a[] = new int[2]; System.out.println("Access element three :" + a[3]); } catch (ArrayIndexOutOfBoundsException e) { System.out.println("Exception thrown :" + e); } System.out.println("Out of the block"); } }
Ini akan menghasilkan hasil berikut
Exception thrown :java.lang.ArrayIndexOutOfBoundsException: 3 Out of the block
Sebuah blok try dapat diikuti oleh beberapa blok catch. Sintaks untuk beberapa blok tangkapan terlihat seperti berikut −
try { // Protected code } catch (ExceptionType1 e1) { // Catch block } catch (ExceptionType2 e2) { // Catch block } catch (ExceptionType3 e3) { // Catch block }
Pernyataan sebelumnya menunjukkan tiga blok tangkapan, tetapi Anda dapat memiliki berapa pun jumlahnya setelah satu percobaan. Jika pengecualian terjadi dalam kode yang dilindungi, pengecualian dilemparkan ke blok tangkapan pertama dalam daftar. Jika tipe data dari eksepsi yang dilempar cocok dengan ExceptionType1, itu akan ditangkap di sana. Jika tidak, pengecualian diteruskan ke pernyataan catch kedua. Ini berlanjut hingga pengecualian ditangkap atau jatuh melalui semua tangkapan, dalam hal ini metode saat ini menghentikan eksekusi dan pengecualian dilemparkan ke metode sebelumnya pada tumpukan panggilan.
Berikut adalah segmen kode yang menunjukkan cara menggunakan beberapa pernyataan try/catch.
try { file = new FileInputStream(fileName); x = (byte) file.read(); } catch (IOException i) { i.printStackTrace(); return -1; } catch (FileNotFoundException f) // Not valid! { f.printStackTrace(); return -1; }
Sejak Java 7, Anda dapat menangani lebih dari satu pengecualian menggunakan satu blok tangkap, fitur ini menyederhanakan kode. Inilah cara Anda melakukannya
catch (IOException|FileNotFoundException ex) { logger.log(ex); throw ex;
Jika suatu metode tidak menangani pengecualian yang dicentang, metode tersebut harus mendeklarasikannya menggunakan throws kata kunci. Kata kunci throws muncul di akhir tanda tangan metode.
Anda dapat melempar pengecualian, baik yang baru dipakai atau pengecualian yang baru saja Anda tangkap, dengan menggunakan lemparan kata kunci.
Coba pahami perbedaan antara kata kunci lempar dan lempar, lempar digunakan untuk menunda penanganan pengecualian yang diperiksa dan melempar digunakan untuk memanggil pengecualian secara eksplisit.
Metode berikut mendeklarasikan bahwa ia melempar RemoteException
import java.io.*; public class className { public void deposit(double amount) throws RemoteException { // Method implementation throw new RemoteException(); } // Remainder of class definition }
Sebuah metode dapat mendeklarasikan bahwa ia melempar lebih dari satu pengecualian, dalam hal ini pengecualian dideklarasikan dalam daftar yang dipisahkan dengan koma. Misalnya, metode berikut mendeklarasikan bahwa ia melempar RemoteException dan InsufficientFundsException
import java.io.*; public class className { public void withdraw(double amount) throws RemoteException, InsufficientFundsException { // Method implementation } // Remainder of class definition }
Blok akhirnya mengikuti blok coba atau blok tangkap. Sebuah blok kode akhirnya selalu dieksekusi, terlepas dari terjadinya Pengecualian.
Menggunakan blok akhirnya memungkinkan Anda menjalankan pernyataan jenis pembersihan apa pun yang ingin Anda jalankan, apa pun yang terjadi dalam kode yang dilindungi.
Blok akhirnya muncul di akhir blok tangkap dan memiliki sintaks berikut
try { // Protected code } catch (ExceptionType1 e1) { // Catch block } catch (ExceptionType2 e2) { // Catch block } catch (ExceptionType3 e3) { // Catch block }finally { // The finally block always executes. }
public class ExcepTest { public static void main(String args[]) { int a[] = new int[2]; try { System.out.println("Access element three :" + a[3]); } catch (ArrayIndexOutOfBoundsException e) { System.out.println("Exception thrown :" + e); }finally { a[0] = 6; System.out.println("First element value: " + a[0]); System.out.println("The finally statement is executed"); } } }
Ini akan menghasilkan hasil berikut
Exception thrown :java.lang.ArrayIndexOutOfBoundsException: 3 First element value: 6 The finally statement is executed
Perhatikan berikut ini
Klausa catch tidak dapat ada tanpa pernyataan try.
Tidak wajib memiliki klausa last setiap kali ada blok try/catch.
Blok try tidak dapat hadir tanpa klausa catch atau klausa last.
Kode apa pun tidak boleh ada di antara blok coba, tangkap, akhirnya.
Umumnya, ketika kita menggunakan sumber daya apa pun seperti aliran, koneksi, dll. Kita harus menutupnya secara eksplisit menggunakan blok akhirnya. Dalam program berikut, kita membaca data dari sebuah file menggunakan FileReader dan kami menutupnya menggunakan blok akhirnya.
import java.io.File; import java.io.FileReader; import java.io.IOException; public class ReadData_Demo { public static void main(String args[]) { FileReader fr = null; try { File file = new File("file.txt"); fr = new FileReader(file); char [] a = new char[50]; fr.read(a); // reads the content to the array for(char c : a) System.out.print(c); // prints the characters one by one } catch (IOException e) { e.printStackTrace(); }finally { try { fr.close(); } catch (IOException ex) { ex.printStackTrace(); } } } }
coba-dengan-sumber daya , juga disebut sebagai pengelolaan sumber daya otomatis , adalah mekanisme penanganan pengecualian baru yang diperkenalkan di Java 7, yang secara otomatis menutup sumber daya yang digunakan dalam blok try catch.
Untuk menggunakan pernyataan ini, Anda hanya perlu mendeklarasikan sumber daya yang diperlukan dalam tanda kurung, dan sumber daya yang dibuat akan ditutup secara otomatis di akhir blok. Berikut adalah sintaks dari pernyataan try-with-resources.
try(FileReader fr = new FileReader("file path")) { // use the resource } catch () { // body of catch } }
Berikut adalah program yang membaca data dalam file menggunakan pernyataan try-with-resources.
import java.io.FileReader; import java.io.IOException; public class Try_withDemo { public static void main(String args[]) { try(FileReader fr = new FileReader("E://file.txt")) { char [] a = new char[50]; fr.read(a); // reads the contentto the array for(char c : a) System.out.print(c); // prints the characters one by one } catch (IOException e) { e.printStackTrace(); } } }
Poin-poin berikut harus diingat saat bekerja dengan pernyataan try-with-resources.
Untuk menggunakan kelas dengan pernyataan try-with-resources, ia harus mengimplementasikan AutoCloseable antarmuka dan close() metode itu dipanggil secara otomatis saat runtime.
Anda dapat mendeklarasikan lebih dari satu kelas dalam pernyataan try-with-resources.
Saat Anda mendeklarasikan beberapa kelas dalam blok try dari pernyataan try-with-resources, kelas-kelas ini ditutup dalam urutan terbalik.
Kecuali deklarasi sumber daya dalam tanda kurung, semuanya sama dengan blok try/catch normal dari blok try.
Sumber daya yang dideklarasikan dalam percobaan akan dipakai tepat sebelum dimulainya blok percobaan.
Resource yang dideklarasikan di blok try secara implisit dideklarasikan sebagai final.
Anda dapat membuat pengecualian Anda sendiri di Java. Ingatlah poin-poin berikut saat menulis kelas pengecualian Anda sendiri −
Semua pengecualian harus merupakan turunan dari Throwable.
Jika Anda ingin menulis pengecualian yang dicentang yang secara otomatis diterapkan oleh Handle atau Declare Rule, Anda perlu memperluas kelas Exception.
Jika Anda ingin menulis pengecualian waktu proses, Anda perlu memperluas kelas RuntimeException.
Kita dapat mendefinisikan kelas Pengecualian kita sendiri seperti di bawah ini
class MyException extends Exception { }
Anda hanya perlu memperluas Pengecualian yang telah ditentukan sebelumnya kelas untuk membuat Pengecualian Anda sendiri. Ini dianggap sebagai pengecualian yang diperiksa. Berikut InsufficientFundsException class adalah pengecualian yang ditentukan pengguna yang memperluas kelas Pengecualian, menjadikannya pengecualian yang diperiksa. Kelas pengecualian seperti kelas lainnya, berisi bidang dan metode yang berguna.
// File Name InsufficientFundsException.java import java.io.*; public class InsufficientFundsException extends Exception { private double amount; public InsufficientFundsException(double amount) { this.amount = amount; } public double getAmount() { return amount; } }
Untuk mendemonstrasikan menggunakan pengecualian yang ditentukan pengguna kami, kelas CheckingAccount berikut berisi metode withdraw() yang melempar InsufficientFundsException.
// File Name CheckingAccount.java import java.io.*; public class CheckingAccount { private double balance; private int number; public CheckingAccount(int number) { this.number = number; } public void deposit(double amount) { balance += amount; } public void withdraw(double amount) throws InsufficientFundsException { if(amount <= balance) { balance -= amount; }else { double needs = amount - balance; throw new InsufficientFundsException(needs); } } public double getBalance() { return balance; } public int getNumber() { return number; } }
Program BankDemo berikut mendemonstrasikan pemanggilan metode deposit() dan withdraw() dari CheckingAccount.
// File Name BankDemo.java public class BankDemo { public static void main(String [] args) { CheckingAccount c = new CheckingAccount(101); System.out.println("Depositing $500..."); c.deposit(500.00); try { System.out.println("\nWithdrawing $100..."); c.withdraw(100.00); System.out.println("\nWithdrawing $600..."); c.withdraw(600.00); } catch (InsufficientFundsException e) { System.out.println("Sorry, but you are short $" + e.getAmount()); e.printStackTrace(); } } }
Kompilasi ketiga file di atas dan jalankan BankDemo. Ini akan menghasilkan hasil berikut
Depositing $500... Withdrawing $100... Withdrawing $600... Sorry, but you are short $200.0 InsufficientFundsException at CheckingAccount.withdraw(CheckingAccount.java:25) at BankDemo.main(BankDemo.java:13)
Di Java, dimungkinkan untuk mendefinisikan dua kategori Pengecualian dan Kesalahan.
Pengecualian JVM Ini adalah pengecualian/kesalahan yang secara eksklusif atau logis dilemparkan oleh JVM. Contoh:NullPointerException, ArrayIndexOutOfBoundsException, ClassCastException.
Pengecualian Terprogram Pengecualian ini dilontarkan secara eksplisit oleh aplikasi atau pemrogram API. Contoh:IllegalArgumentException, IllegalStateException.
java
Daftar Java Dalam tutorial ini, kita akan belajar tentang antarmuka Daftar di Java dan metodenya. Dalam Java, List interface adalah kumpulan terurut yang memungkinkan kita untuk menyimpan dan mengakses elemen secara berurutan. Ini memperluas Collection antarmuka. Kelas yang Menerapkan Daftar Seja
Apa itu Pengecualian di Java? Pengecualian di Jawa adalah peristiwa yang mengganggu eksekusi instruksi program dan mengganggu aliran normal eksekusi program. Ini adalah objek yang membungkus informasi peristiwa kesalahan yang terjadi dalam suatu metode dan diteruskan ke sistem runtime. Di Java, pen
Apa itu Pengecualian Buatan Pengguna di Java? Pengecualian Buatan Pengguna atau pengecualian khusus membuat kelas pengecualian Anda sendiri dan melempar pengecualian itu menggunakan kata kunci lempar. Ini dapat dilakukan dengan memperluas Pengecualian kelas. Tidak perlu mengganti salah satu me
Java melempar kata kunci Kata kunci lemparan Java digunakan untuk mendeklarasikan informasi pengecualian yang mungkin terjadi selama eksekusi program. Ini memberikan informasi tentang pengecualian untuk programmer. Sebaiknya berikan kode penanganan pengecualian sehingga aliran normal eksekusi progr