JavaRush /Java Blog /Random-ID /Rehat kopi #220. Cara Memperbaiki Pengecualian di Java - ...

Rehat kopi #220. Cara Memperbaiki Pengecualian di Java - Panduan Lengkap

Dipublikasikan di grup Random-ID
Sumber: JavaTechOnline Tutorial ini akan membantu Anda mempelajari cara memperbaiki pengecualian umum di Java. Selain teorinya, Anda akan melihat contoh kode untuk memperbaiki masalah tersebut. Rehat kopi #220.  Cara Memperbaiki Pengecualian di Java - Panduan Lengkap - 1Seperti bahasa pemrograman lainnya, pengembang Java mungkin mengalami kesalahan atau pengecualian saat menulis kode. Pengecualian harus ditanggapi dengan serius karena kejadiannya menyita waktu kerja. Namun, dengan sedikit pengetahuan, Anda dapat mempercepat penyelesaian sebagian besar masalah ini. Jadi, mari pelajari cara memperbaiki pengecualian umum di Java.

Pedoman Umum untuk Menghindari Pengecualian di Java

Untuk menghindari pengecualian apa pun di Java, penting untuk memahami dan mengikuti pedoman pengkodean:
  1. Selalu validasi input pengguna sebelum menggunakannya dalam kode Anda.
  2. Gunakan try-catch , throws , throw block , bergantung pada apa yang sesuai untuk skenario tertentu.
  3. Jangan abaikan pesan dalam kode tentang pemrosesan dan kesalahan. Ini akan membantu mengidentifikasi dan memperbaiki masalah.
  4. Pastikan untuk mencatat pengecualian untuk tujuan debugging. Anda dapat menggunakan pesan logger untuk membantu mengidentifikasi masalah.
  5. Ikuti praktik terbaik pengkodean untuk menghindari pengecualian dan uji kode Anda secara menyeluruh.
  6. Perbarui dependensi API Anda untuk memastikan Anda menggunakan versi pustaka dan kerangka kerja terbaru dan paling stabil.
  7. Gunakan alat dan kerangka pengujian yang diperlukan untuk mengidentifikasi potensi masalah dalam kode Anda sebelum menimbulkan pengecualian.
  8. Pantau kinerja dan log aplikasi Anda untuk mengidentifikasi dan menyelesaikan masalah apa pun dengan cepat.
  9. Ikuti perkembangan praktik terbaik keamanan untuk memastikan kode Anda aman dan terlindungi dari potensi serangan apa pun.
  10. Dokumentasikan kode Anda dan pengecualiannya secara menyeluruh untuk memudahkan pengembang lain memahami dan memeliharanya.

Daftar pengecualian paling umum di Java

Java memiliki daftar pengecualian yang cukup panjang. Mari kita lihat beberapa yang paling umum:

NullPointerException

NullPointerException adalah jenis pengecualian RuntimeException . Hal ini terjadi ketika kita mencoba menggunakan variabel referensi yang memiliki nilai null. Artinya menunjuk ke suatu objek atau variabel yang nilainya null . Kesalahan seperti itu dapat terjadi saat kita mencoba memanggil suatu metode atau mengakses bidang objek yang belum diinisialisasi, atau saat kita meneruskan null sebagai parameter ke metode yang tidak menanganinya. Untuk mencegah NullPointerException dilempar , Anda dapat memeriksa apakah variabel referensi bernilai null menggunakan operator == . Jika hal ini terjadi, maka kasus null perlu ditangani dengan benar. Alternatifnya, kita dapat menginisialisasi variabel kita ke nilai default (jika memungkinkan) untuk memastikan bahwa kita tidak pernah menemukan referensi nol. Cara lain untuk menghindari NullPointerException adalah dengan menggunakan kelas Opsional . Di Java, Opsional adalah objek kontainer yang mungkin berisi atau tidak berisi nilai bukan nol. Ini digunakan untuk mewakili ada atau tidaknya suatu nilai, mirip dengan bagaimana nilai nol digunakan untuk mewakili tidak adanya suatu nilai. Jika seorang pemrogram mencoba mengakses nilai kosong dari objek Opsional , program tidak akan menampilkan NullPointerException tetapi akan mengembalikan objek Opsional yang kosong . Dengan kata lain, Opsional memaksa pemrogram untuk menangani kasus di mana nilainya hilang, yang membantu menghindari NullPointerException .

IndexOutOfBoundsException

IndexOutOfBoundsException adalah pengecualian runtime yang muncul ketika indeks yang digunakan untuk mengakses array atau koleksi bernilai negatif atau lebih besar atau sama dengan ukuran array atau koleksi. Untuk mencegah terjadinya pengecualian ini, kita harus memastikan bahwa indeks yang digunakan untuk mengakses array atau koleksi berada dalam batasannya, yaitu harus lebih besar atau sama dengan nol dan lebih kecil dari ukuran array atau koleksi.

ArrayIndexOutOfBoundsException

ArrayIndexOutOfBoundsException adalah tipe IndexOutOfBoundsException yang muncul ketika ada upaya untuk mengakses array pada indeks yang tidak valid. Di Java, indeks array dimulai dari 0 dan diakhiri pada length()-1 , dengan length() adalah jumlah elemen dalam array. Jika Anda mencoba mengakses elemen pada indeks di luar rentang ini, Java akan memunculkan ArrayIndexOutOfBoundsException . Saat menemukan ArrayIndexOutOfBoundsException , Anda harus meninjau kode Anda untuk memastikan bahwa Anda menggunakan indeks yang benar saat mengakses elemen dalam array.

StringIndexOutOfBoundsException

StringIndexOutOfBoundsException adalah tipe IndexOutOfBoundsException yang muncul ketika ada upaya untuk mengakses karakter dalam string yang memiliki indeks tidak valid. Seperti ArrayIndexOutOfBoundsException sebelumnya , ingat bahwa di Java, indeks string dimulai dari 0 dan berakhir di length()-1 , di mana length() adalah jumlah karakter dalam string. Jika Anda mencoba mengakses karakter pada indeks di luar rentang ini, Anda mungkin menemukan StringIndexOutOfBoundsException . Jika Anda menemukan StringIndexOutOfBoundsException , Anda harus meninjau kode Anda untuk memastikan Anda menggunakan indeks yang benar saat mengakses karakter dalam string.

ClassCastException

Pengecualian ini terjadi ketika kita mencoba melemparkan objek ke tipe yang tidak sesuai dengan tipe sebenarnya. Untuk mengatasi masalah seperti ini, penting untuk memastikan bahwa program Java Anda hanya mencoba untuk melemparkan objek ke kelas yang merupakan instance dari objek tersebut. Anda dapat memeriksa jenis objek menggunakan operator instanceof sebelum menerapkan cast.

Pengecualian Argumen Ilegal

IllegalArgumentException adalah tipe RuntimeException yang muncul ketika suatu metode dipanggil dengan argumen ilegal atau tidak pantas. Dengan kata lain, kesalahan ini bisa terjadi ketika suatu metode dipanggil dengan argumen yang berada di luar rentang yang diharapkan atau tidak memiliki format atau struktur yang diharapkan. Misalnya, suatu metode memerlukan bilangan positif sebagai argumen dan kami memberikan bilangan negatif, yang merupakan masukan tidak valid. Jika Anda menemukan IllegalArgumentException , Anda harus memeriksa kode Anda untuk memastikan bahwa Anda memanggil metode dengan argumen yang valid dan sesuai.

IlegalStateException

IllegalStateException adalah jenis RuntimeException yang dilempar ketika suatu objek berada dalam keadaan yang tidak sesuai untuk operasi yang sedang dilakukan. Hal ini dapat terjadi jika suatu metode dipanggil pada suatu objek yang tidak berada pada keadaan yang diharapkan. Misalnya kita membuat objek koneksi database lalu menutupnya. Kemudian jika kita mencoba membuat objek Pernyataan dalam koneksi tertutup, ia akan memunculkan IllegalStateException karena metode createStatement() memerlukan koneksi terbuka. Jika Anda menemukan IllegalStateException , Anda harus meninjau kode Anda untuk memastikan bahwa Anda memanggil metode pada objek yang berada dalam keadaan yang sesuai.

Tidak DidukungOperationException

UnsupportedOperationException adalah tipe RuntimeException yang muncul ketika ada upaya untuk melakukan operasi yang tidak didukung pada suatu objek. Kesalahan ini bisa terjadi ketika kita memanggil metode yang tidak diimplementasikan oleh objek atau tidak didukung oleh objek. Untuk mencegah pengecualian dilempar, kita tidak boleh memanggil operasi yang tidak didukung pada objek. Kita perlu meninjau kode kita untuk memastikan bahwa kita memanggil metode pada objek yang mendukung operasi tersebut.

Pengecualian Aritmatika

ArithmeticException adalah jenis RuntimeException yang dilempar ketika operasi aritmatika menghasilkan hasil yang tidak valid. Pengecualian ini dapat terjadi ketika kita mencoba melakukan operasi aritmatika dengan argumen yang tidak valid atau tidak valid. Misalnya saat mencoba membagi dengan nol. Untuk mengatasi masalah ini, kita dapat melakukan validasi input dan memastikan bahwa argumen memenuhi kondisi yang diperlukan sebelum melakukan operasi aritmatika.

Pengecualian Keamanan

SecurityException adalah jenis RuntimeException yang dilempar ketika terjadi pelanggaran keamanan selama eksekusi program. Kesalahan ini dapat terjadi ketika suatu program mencoba melakukan operasi yang tidak diizinkan oleh kebijakan keamanan. Untuk mengatasi masalah ini, kita harus memastikan bahwa kita memiliki akses ke sumber daya dan melakukan operasi yang izin khusus kita miliki.

NumberFormatException

NumberFormatException adalah jenis RuntimeException yang ditampilkan ketika suatu metode dipanggil untuk mengonversi string ke format angka, tetapi string tersebut tidak dalam format yang sesuai. Untuk mengatasi masalah ini, pertama-tama kita harus memvalidasi masukan pengguna sebelum mencoba mengonversinya. Periksa juga kode Anda untuk memastikan Anda mencoba mengonversi string yang diformat dengan tepat untuk tipe numerik target.

Pengecualian Terganggu

InterruptedException adalah pengecualian yang dicentang yang dilempar jika thread sedang menunggu, tidur, atau memblokir beberapa kejadian dan kejadian tersebut diinterupsi oleh thread lain. Kesalahan dapat terjadi ketika sebuah thread menunggu input, melepaskan kunci, atau menyelesaikan beberapa operasi lainnya, dan thread lain mengganggu thread yang menunggu. Untuk mengatasi masalah ini, Anda dapat menangkap InterruptedException dan meresponsnya dengan membersihkan sumber daya, menghentikan thread, atau mengambil tindakan lain yang sesuai. Jika Anda menemukan InterruptedException , Anda harus memeriksa kode Anda untuk memastikan Anda menangani gangguan thread dengan benar.

FileNotFoundException

FileNotFoundException adalah pengecualian yang dicentang yang muncul ketika suatu program mencoba mengakses file yang tidak ada atau tidak dapat ditemukan di lokasi yang ditentukan. Ini dapat muncul jika suatu file salah eja, dipindahkan atau dihapus, atau bahkan ketika suatu program tidak memiliki izin yang diperlukan untuk mengakses file tersebut. Untuk memperbaiki kesalahan, Anda dapat melakukan validasi input untuk memastikan bahwa jalur file sudah benar dan program memiliki izin yang diperlukan untuk mengakses file.

Pengecualian IO

IOException adalah pengecualian yang dicentang di Java yang mewakili kesalahan yang ditemui saat melakukan operasi input atau output, seperti membaca atau menulis ke file atau soket jaringan. Hal ini dapat terjadi karena beberapa alasan, seperti file tertentu hilang atau tidak dapat diakses, kesalahan jaringan, atau izin tidak mencukupi. Untuk memperbaiki masalah, Anda perlu melakukan beberapa tindakan seperti memeriksa pesan kesalahan, menangani pengecualian menggunakan try-catch , menutup sumber daya, memeriksa izin file, dan sebagainya.

Tidak AdaMetodePengecualian

NoSuchMethodException adalah pengecualian yang muncul saat runtime ketika kita mencoba memanggil metode yang tidak ada di kelas. Pengecualian ini biasanya terjadi jika kita memanggil suatu metode menggunakan Class.getMethod() atau Class.getDeclaredMethod() dan nama metode yang ditentukan tidak ditemukan di kelas atau antarmuka. Pengecualian juga dapat terjadi ketika kita mencoba memanggil suatu metode menggunakan kelas java.lang.reflect.Method dan nama metode yang ditentukan tidak ada di objek tersebut. Untuk menghindari pengecualian ini, pastikan untuk memanggil metode yang valid dengan tanda tangan metode dan penentu akses yang benar.

Tidak Ada Pengecualian Bidang Tersebut

NoSuchFieldException adalah pengecualian runtime yang terjadi saat kita mencoba mengakses kolom yang tidak ada di kelas. Pengecualian ini biasanya terjadi ketika kita memanggil metode menggunakan Class.getField() atau Class.getDeclaredField() dan nama field yang ditentukan tidak ditemukan di kelas atau antarmuka. Selain itu, dapat juga dipanggil jika kita mencoba mengakses suatu field menggunakan kelas java.lang.reflect.Field dan nama field yang ditentukan tidak ada di objek tersebut. Untuk menghindari pengecualian ini, pastikan Anda mengakses bidang yang valid dengan nama dan pengubah akses yang benar. Jika Anda mengakses bidang pribadi, pastikan untuk menggunakan metode getDeclaredField() alih-alih metode getField() .

IlegalAccessException

IllegalAccessException adalah pengecualian run-time yang terjadi ketika kita mencoba mengakses suatu bidang atau metode di kelas tetapi kita tidak memiliki hak akses yang diperlukan. Pengecualian ini biasanya muncul ketika kita mencoba mengakses field atau metode privat dari luar kelas atau ketika kita mencoba mengakses field atau metode yang dilindungi dari kelas yang bukan merupakan subkelas dari kelas asli. Hal ini juga dapat dipanggil ketika mencoba mengakses bidang atau metode yang telah ditandai sebagai tidak tersedia oleh kelas java.lang.reflect.AccessibleObject . Untuk menghindari masalah ini, pastikan Anda memiliki izin yang diperlukan pada bidang atau metode yang Anda coba akses. Jika bidang atau metode bersifat pribadi, Anda mungkin perlu menggunakan refleksi dan menyetel AccessibleObject ke true (untuk mengaksesnya). Namun, berhati-hatilah saat menggunakan refleksi untuk mengakses bidang atau metode pribadi, karena dapat merusak enkapsulasi dan membahayakan integritas kelas.

VerifikasiKesalahan

VerifyError adalah kesalahan run-time yang merupakan subkelas dari LinkageError . Ini terjadi ketika Java Virtual Machine (JVM) menemukan file kelas yang melanggar aturan validasi tertentu. Ketika kelas Java dikompilasi, kompiler memeriksa apakah bytecode mengikuti aturan dan batasan tertentu, seperti keamanan tipe dan penggunaan tumpukan dan variabel lokal dengan benar. Jika file kelas melanggar aturan ini, JVM akan menampilkan VerifyError saat memuat dan memeriksa kelas saat runtime. Untuk menghindari VerifyError , pastikan kode Anda mengikuti sintaksis dan semantik bahasa Java yang benar. Jika Anda menemukan VerifyError , Anda harus memeriksa kode Anda untuk memastikan bahwa kode tersebut valid dan tidak ada pelanggaran aturan verifikasi bytecode Java.

OutOfMemoryError

OutOfMemoryError adalah subkelas dari Error , tipe Throwable yang menimbulkan masalah parah yang tidak dapat diselesaikan saat runtime. Meskipun Java 8 menyertakan beberapa perbaikan dalam pengumpulan sampah dan manajemen memori, Anda mungkin masih mengalami OutOfMemoryError jika aplikasi Anda menggunakan terlalu banyak memori atau salah mengelola penggunaan memori. Untuk menghindari OutOfMemoryError , Anda perlu mengelola penggunaan memori dengan benar di aplikasi Java Anda. Hal ini melibatkan penggunaan struktur data dan algoritme yang menggunakan memori secara efisien, menghindari pembuatan objek yang tidak perlu, dan menghapus objek dengan benar saat tidak diperlukan lagi. Selain itu, Anda dapat meningkatkan ukuran heap maksimum untuk JVM dengan menggunakan flag -Xmx saat menjalankan program Java Anda.

StackOverflowError

StackOverflowError adalah jenis kesalahan yang terjadi ketika ukuran tumpukan yang dibutuhkan oleh suatu program melebihi jumlah memori yang dialokasikan padanya. Hal ini dapat terjadi ketika suatu program memanggil terlalu banyak metode bersarang atau ketika suatu metode memanggil dirinya sendiri secara rekursif terlalu sering, sehingga menghasilkan perulangan tak terbatas. Java Virtual Machine (JVM) mengalokasikan sejumlah memori tetap untuk tumpukan eksekusi, yang digunakan untuk melacak pemanggilan metode dan variabel lokal. Saat tumpukan meluap, JVM memunculkan StackOverflowError . Untuk menghindari StackOverflowError , penting untuk memastikan bahwa program Java Anda memanfaatkan rekursi dan pemanggilan metode secara memadai. Jika Anda menemukan StackOverflowError , Anda dapat mencoba meningkatkan ukuran tumpukan dengan menggunakan flag -Xss saat menjalankan program Java Anda.

InvocationTargetException

InvocationTargetException adalah pengecualian yang dicentang yang dilemparkan oleh mekanisme refleksi Java. Ini adalah bagian dari paket java.lang.reflect.InvocationTargetException dan digunakan untuk menunjukkan bahwa pengecualian terjadi selama pemanggilan metode atau konstruktor. Ketika suatu metode atau konstruktor dipanggil menggunakan mekanisme refleksi Java, metode invoke() dari kelas java.lang.reflect.Method atau java.lang.reflect.Constructor disebut . Jika metode atau konstruktor yang dipanggil memunculkan pengecualian, metode invoke() akan menangkapnya dan membungkusnya dalam InvocationTargetException . Pengecualian ini kemudian diteruskan ke pemanggil metode invoke() . Untuk memperbaiki InvocationTargetException , kita perlu menangkapnya, mendapatkan pengecualian akar permasalahan menggunakan metode getCause() , dan menangani pengecualian akar permasalahan yang sesuai. Perhatikan bahwa penyebab utama dapat berupa pengecualian yang dicentang atau pengecualian runtime, jadi pastikan untuk menanganinya dengan benar.

Cara memperbaiki pengecualian paling umum di Java

Bagaimana cara memperbaiki NullPointerException

Skenario: Anda memiliki metode yang mengakses objek yang memiliki nilai null .
String title= null;
System.out.println(title.length()); // Это вызовет NullPointerException
Solusi #1: Periksa apakah objeknya null sebelum digunakan.
if(title!= null) {
   System.out.println(title.length());
} else {
   System.out.println("title is null");
}
Solusi #2: Gunakan Opsional untuk menghindari NullPointerException .
Optional<String> optionalTitle = Optional.ofNullable(getTitle());
if (optionalTitle.isPresent()) {
   String title= optionalTitle.get();
   System.out.println("Title: " + title);
} else {
   System.out.println("Title is not available.");
}

Bagaimana cara memperbaiki ArrayIndexOutOfBoundsException

Skenario: Anda mencoba mengakses array pada indeks yang berada di luar batasnya.
int[] numbers = {4, 5, 6};
System.out.println(numbers[3]);   // Это вызовет ArrayIndexOutOfBoundsException
Solusi: Periksa panjang array sebelum mengaksesnya dan pastikan Anda menggunakan indeks yang valid.
int[] numbers = {4, 5, 6};
if (numbers.length > 3) {
   System.out.println(numbers[3]);
} else {
   System.out.println("ArrayIndexOutOfBoundsException: Please use valid indexes of the Array");
}

Bagaimana cara memperbaiki ClassCastException

Skenario: Anda mencoba melemparkan objek ke tipe yang tidak kompatibel dengan tipe sebenarnya.
Object obj = "Java Exception";
Integer number = (Integer) obj; // Это вызовет ClassCastException
Solusi: Pastikan Anda hanya mentransmisikan objek ke tipe yang kompatibel dengannya.
Object obj = "Java Exception";
if(obj instanceof Integer) {
   Integer number = (Integer) obj;
   System.out.println(number);
} else {
   System.out.println("Object cannot caste to Integer");
}

Bagaimana cara memperbaiki IllegalArgumentException

Skenario: Anda memberikan argumen yang tidak valid ke suatu metode.
public void printNumber(int number) {
   if(number <= 0) {
      throw new IllegalArgumentException("You cannot pass a negative number or zero");
   }
   System.out.println(number);
}

printNumber(-1); // Это вызовет IllegalArgumentException
Solusi: Pastikan Anda memberikan argumen yang valid ke metode. Dalam hal ini, berikan bilangan positif.
printNumber(1); //  Это успешно напечатает 1.

Cara memperbaiki IllegalStateException

Skenario: Objek berada dalam keadaan tidak valid.
public class Bike {

   private Boolean isStarted;

   public void start() {
      if(isStarted) {
        throw new IllegalStateException("Bike is already started");
      }
      isStarted = true;
      System.out.println("Bike started");
   }
}

Bike bike= new Bike();
bike.start();
bike.start(); // Это вызовет IllegalStateException потому что bike is already started
Solusi: Pastikan Anda mempertahankan status objek dengan benar.
Bike bike= new Bike();
bike.start();

Cara memperbaiki UnsupportedOperationException

Skenario: Anda menggunakan operasi yang tidak didukung oleh suatu objek. Salah satu contoh populer adalah saat Anda menggunakan operasi hapus() pada koleksi yang tidak dapat diubah, kemungkinan besar Anda akan melihat pengecualian UnsupportedOperationException .
List<String> list = Arrays.asList("Java", "Angular", "Spring");
list.add("Python"); // Это вызовет UnsupportedOperationException
Karena metode Arrays.asList() mengembalikan daftar yang tidak dapat diubah, metode ini tidak mendukung penambahan atau penghapusan elemen. Solusi: Pastikan Anda hanya memanggil operasi yang didukung pada objek.
List<String> list = new ArrayList<>(Arrays.asList("Java", "Angular" "Spring"));
list.add("Python");
System.out.println(list);

Cara memperbaiki ArithmeticException

Skenario #1: Anda mencoba melakukan operasi pembagian bilangan bulat yang menghasilkan hasil pecahan.
int i = 10;
int j = 4;
int k = i/j; // Это вызовет исключение ArithmeticException: целочисленное деление будет дробным
Di sini hasil operasi pembagiannya adalah 2,5 yang merupakan nilai pecahan. Karena bilangan bulat tidak dapat menyimpan nilai pecahan, ArithmeticException dilempar . Solusi: Untuk menghindari pengecualian ini, kita bisa menggunakan tipe data yang mendukung nilai pecahan, seperti double , untuk menyimpan hasil operasi pembagian. Berikut ini contohnya:
int i = 10;
int j = 4;
double k = (double) i/j;
Skenario #2: Anda mencoba membagi dengan nol dan Anda mendapatkan pengecualian ini. Ini adalah skenario yang paling umum.
int i = 4;
int j = 0;
int k = i/j; // Это вызовет исключение ArithmeticException: нельзя делить на ноль
Solusi: Tangani pembagian dengan nol dengan benar. Misalnya, kode di bawah ini menunjukkan pemrosesan yang benar.
int i = 4;
int j = 0;
if(j != 0) {
int k = i/j;
System.out.println(k);
} else {
System.out.println("ArithmeticException: Cannot divide by zero");
}

Cara memperbaiki IndexOutOfBoundsException

Skenario: Anda mencoba mengakses koleksi dengan indeks yang berada di luarnya.
List<String> list = Arrays.asList("Apple", "Papaya", "Mango");
System.out.println(list.get(3)); // Это вызовет IndexOutOfBoundsException
Solusi: Periksa ukuran koleksi sebelum mengaksesnya dan pastikan Anda menggunakan indeks yang valid.
List<String> list = Arrays.asList("Apple", "Papaya", "Mango");
if (list.size() > 3) {
   System.out.println(list.get(3));
} else {
   System.out.println("You are using the Index which is out of bounds");
}

Bagaimana cara memperbaiki IOException

Skenario: Operasi input/output gagal karena file tidak dapat diakses.
try {
   File inputFile = new FileReader("pqr.txt");
   BufferedReader reader = new BufferedReader(inputFile);
   String line = reader.readLine();
   System.out.println(line);
} catch (IOException e) {
   e.printStackTrace();
}
Solusi: Tangani kesalahan I/O dan pastikan sumber daya ditutup dengan benar.
File inputFile = new File("pqr.txt");

if (!inputFile.exists() || !inputFile.canRead()) {
 System.out.println("The input file is missing or not readable.");
 return;
}

try {
BufferedReader reader = new BufferedReader(inputFile);
 String line = reader.readLine();
 System.out.println(line);
  reader.close();
} catch (IOException e) {
 e.printStackTrace();
}
Perhatikan bahwa sebagai alternatif, kita dapat menggunakan fitur coba-dengan-sumber daya yang diperkenalkan di Java 7 untuk menutup sumber daya secara otomatis seperti yang ditunjukkan di bawah ini. Kita dapat mendeklarasikan satu atau lebih sumber daya dalam pernyataan try , dan Java akan secara otomatis menutup sumber daya di akhir blok, terlepas dari apakah blok tersebut selesai secara normal atau pengecualian dilemparkan.
try (BufferedReader reader = new BufferedReader(new FileReader("pqr.txt"))) {
....
} catch {
....
}

Bagaimana cara memperbaiki FileNotFoundException

Skenario: File tidak ditemukan di lokasi yang ditentukan.
try {
     BufferedReader reader = new BufferedReader(new FileReader("abc.txt"));
     String line = reader.readLine();
     System.out.println(line);
     reader.close();
} catch (FileNotFoundException | IOException e) {
     System.out.println("An error has occurred while reading the file: " + e.getMessage());
}
Solusi: Pastikan file tersebut ada dan Anda memiliki izin yang sesuai untuk mengaksesnya.
try {
    File file = new File("abc.txt");
    if(!file.exists()) {
    throw new FileNotFoundException("File not found at the specified location");
    }
    BufferedReader reader = new BufferedReader(new FileReader(file));
    String line = reader.readLine();
    System.out.println(line);
    reader.close();
} catch (IOException e) {
    e.printStackTrace();
}

Bagaimana cara memperbaiki NoSuchMethodException

Skenario: Jika Anda mencoba mengakses metode yang tidak dapat ditemukan.
public class TestClass {
   public void sayHello() {
      System.out.println("Hello");
   }
}

TestClass obj = new TestClass();
Method method = obj.getClass().getMethod("printHello"); // Это вызовет NoSuchMethodException
Solusi: Verifikasi bahwa metode tersebut ada dan nama metode serta tanda tangannya sudah benar.
public class TestClass {
   public void sayHello() {
      System.out.println("Hello");
   }
}

TestClass  obj = new TestClass();
try {
    Method method = obj.getClass().getMethod("sayHello");
} catch (NoSuchMethodException e) {
    e.printStackTrace();
}

Cara memperbaiki ConcurrentModificationException

Skenario: Koleksi berubah saat sedang diiterasi.
List<String> list = new ArrayList<>();
list.add("Java");
list.add("Python");
for (String str : list) {
  list.remove(str);  // Это вызовет ConcurrentModificationException
}
Solusi: Gunakan iterator untuk mengulangi koleksi dan memodifikasinya menggunakan metode iterator.
List<String> list = new ArrayList<>();
list.add("Java");
list.add("Python");
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
    String str = iterator.next();
    iterator.remove();
}
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION