Kesalahan Runtime Java Paling Umum

Feb 27 2023
Runtime error terjadi ketika sebuah program tidak berisi kesalahan sintaks apa pun tetapi meminta komputer untuk melakukan sesuatu yang tidak dapat dilakukan oleh komputer dengan andal. Selama kompilasi, kompiler tidak memiliki teknik untuk mendeteksi kesalahan semacam ini.

Runtime error terjadi ketika sebuah program tidak mengandung kesalahan sintaks apapun tetapi meminta komputer untuk melakukan sesuatu yang tidak dapat dilakukan oleh komputer . Selama kompilasi, kompiler tidak memiliki teknik untuk mendeteksi kesalahan semacam ini. Ini adalah JVM (Java Virtual Machine) yang mendeteksinya saat program sedang berjalan.

· Pengecualian StackOverflowError
· Pengecualian OutOfMemoryError
· NegativeArraySizeException
· ArithmeticException
· ArrayIndexOutOfBoundsException
· ArrayStoreException
· UnsupportedOperationException
· NoSuchElementException
· ClassCastException
· DateTimeException
· ConcurrentModificationException
· InputMismatchException
· IllegalFormatConversionException
· NumberFormatException
· InvalidParameterException
· NullPointer Pengecualian

Pengecualian StackOverflowError

StackOverflowError adalah kesalahan yang tidak dapat ditangkap oleh Java, misalnya, tumpukan kehabisan ruang, karena ini adalah salah satu kesalahan runtime paling umum yang dapat ditemui.

Penyebab utama StackOverflowError adalah kita belum menyediakan kondisi penghentian yang tepat untuk fungsi atau template rekursif kita , yang artinya akan berubah menjadi infinite loop . Jadi kesalahan ini muncul saat Java kehabisan memori yang tersedia.

// Java program to demonstrate
// infinite recursion error
public class StackOverflowErrorClass {
 static int i = 0;
 // Method to print numbers
 public static int printNumber(int x)
 {
  i = i + 2;
  System.out.println(i);
  return i + printNumber(i + 2);
 }
 public static void main(String[] args)
 {
  // Recursive call without any
  // terminating condition
  StackOverflowErrorClass.printNumber(i);
 }
}

RunTime Error in java code :- Exception in thread “main” java.lang.StackOverflowError
at java.io.PrintStream.write(PrintStream.java:526)
at java.io.PrintStream.print(PrintStream.java:597)
at java.io.PrintStream.println(PrintStream.java:736)
at StackOverflowErrorClass.printNumber(StackOverflowErrorClass.java:13)
at StackOverflowErrorClass.printNumber(StackOverflowErrorClass.java:14)
at StackOverflowErrorClass.printNumber(StackOverflowErrorClass.java:14)
.
.
.

Pengecualian OutOfMemoryError

Kesalahan ruang/memori tidak mencukupi (java.lang.OutOfMemoryError) di utas

Java.lang.OutOfMemoryError adalah kesalahan runtime di Java yang terjadi ketika Java Virtual Machine ( JVM ) tidak dapat mengalokasikan objek karena ruang yang tidak mencukupi di tumpukan Java . Java Garbage Collector ( GC ) tidak dapat mengosongkan ruang yang diperlukan untuk objek baru, yang menyebabkan java.lang.OutOfMemoryError . Kesalahan ini juga dapat terjadi ketika memori asli tidak cukup untuk mendukung pemuatan kelas Java.

Berikut adalah contoh lemparan karena ruang heap Java tidak mencukupi:

public class OutOfMemoryErrorExample {
    public static void main(String[] args) {
        Integer[] myArray = new Integer[1000 * 1000 * 1000];
    }
}

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
    at OutOfMemoryErrorExample.main(OutOfMemoryErrorExample.java:8)

NegativeArraySizeException

NegativeArraySizeException adalah pengecualian runtime di Java yang terjadi saat aplikasi mencoba membuat larik dengan ukuran negatif . Karena NegativeArraySizeException adalah pengecualian yang tidak dicentang (extend RuntimeException ), tidak perlu dideklarasikan dalam klausa throws dari sebuah metode atau konstruktor.

Pengembang harus menetapkan ukuran larik ke bilangan bulat positif. Jika tanda minus dimasukkan ke dalam deklarasi ukuran array, ini akan melontarkan NegativeArraySizeException.

class JavaError {
public static void main(String[] args) {
    int[] arr = new int[-5]; // Negative size of the array
    arr[8] = 89;
    System.out.println("Something went wrong!");
  }
}

java -cp /tmp/UDRgGsLLQ6 JavaError
Exception in thread "main" java.lang.NegativeArraySizeException: -5
at JavaError.main(JavaError.java:4)

Pengecualian Aritmatika

mantan. dibagi dengan nol kesalahan

Manipulasi data adalah fungsi utama dari sebagian besar aplikasi Java. Saat manipulasi data mencakup pembagian, pengembang harus berhati-hati terhadap pembagian dengan nol . Jika nol pernah menjadi penyebut dalam perhitungan, Java melempar ArithmeticException. Jadi kami tidak dapat membagi apa pun dari nol sehingga ketika kami mencoba melakukan itu, kami mendapatkan pengecualian aritmatika saat runtime.

class JavaError {
public static void main(String[] args) {
    int a = 23;
    int b = 0;
    System.out.println(a / b);
  }
}

java -cp /tmp/UDRgGsLLQ6 JavaError
Exception in thread "main" java.lang.ArithmeticException: / by zeroat JavaError.main(JavaError.java:7)

ArrayIndexOutOfBoundsException

ketika elemen yang tidak ada dalam array diakses

Array di Java membutuhkan ukuran yang ditetapkan. Jika Anda mencoba menambahkan lebih banyak elemen daripada yang dapat ditampung oleh array, ini akan menghasilkan ArrayIndexOutOfBoundsException . Kode berikut mencoba untuk menambahkan elemen ke delapan indeks array yang dibangun hanya berisi lima elemen:

Mengakses indeks array yang tidak ada :

class JavaError {
public static void main(String[] args) {
    String[] arr = new String[5];
    arr[6] = "Hi"; // Accessing array index that does not exsist
    System.out.println("Something went wrong!");
  }
}

java -cp /tmp/UDRgGsLLQ6 JavaError
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 6 out of bounds for length 5
at JavaError.main(JavaError.java:6)

Java menerapkan penghitungan berbasis nol ke elemen dalam array, jadi indeks 6 dari array akan merujuk ke elemen ketujuh. Bahkan kode berikut akan memicu ArrayIndexOutOfBoundsException di Java, karena indeks 4 adalah referensi ke elemen kelima array:

String[] arr = new String[5];
arr[5] = "Hi"; // Accessing array index that does not exsist

ArrayStoreException

ArrayStoreException berbagi kesamaan dengan ClassCastException. Pengecualian runtime Java ini terjadi ketika tipe objek yang salah ditempatkan ke dalam array.

Pada contoh di bawah, larik BigInteger dibuat, diikuti dengan upaya untuk menambahkan Double. Double tidak berbagi hubungan dengan BigInteger, jadi ini memicu ArrayStoreException saat runtime.

Number[] bigInt = new BigInteger[5];
bigInt[0] = Double.valueOf(12345);

BigInteger[] bigInt = new BigInteger[5];
bigInt[0] = Double.valueOf(12345); // Java compile error

UnsupportedOperationException

Pemrogram Java sering menggunakan kelas Array untuk mengubah array Java menjadi Daftar yang lebih mudah digunakan. Namun, Daftar yang dikembalikan Java bersifat hanya-baca. Pengembang yang tidak mengetahui fakta ini dan mencoba menambahkan elemen baru akan mengalami UnsupportedOperationException. Contoh ini menunjukkan bagaimana ini terjadi:

Integer[] data = {1,2,3,5,8,13,21};
List<Integer> list = Arrays.asList(data);
list.add(new Integer(0));

NoSuchElementException

Anda tidak dapat mengulang melalui iterator kosong. Kode berikut, yang mencoba untuk mendapatkan elemen berikutnya dalam HashSet kosong, melontarkan NoSuchElementException.

Set set = new HashSet();
set.iterator().next(); // Java runtime exception thrown

if (!set.isEmpty()) {
  set.iterator().next();
}

untuk kesalahan konversi tipe data

Java adalah bahasa yang diketik dengan kuat. Itu secara ketat menegakkan hierarki tipe, dan tidak akan melemparkan satu objek ke objek lain kecuali mereka berbagi hubungan polimorfik. Jadi ClassCastException terjadi ketika Anda mencoba salah melemparkan objek ke kelas tertentu. Ini berarti bahwa objek Anda bukanlah turunan atau subkelas dari kelas ini.

Dalam kode berikut, upaya untuk mentransmisikan objek Date ke Timestamp melontarkan kesalahan ClassCastException saat runtime.

Date today = new Date();Timestamp time = (Timestamp)today;

long seconds = System.currentTimeMillis();
Timestamp time = new Timestamp(seconds);
Date today = (Date)time; // this cast works

DateTimeException

Manipulasi data adalah usaha yang rumit. Zona waktu, garis tanggal, dan format tanggal yang tidak konsisten dapat menyebabkan Java melontarkan berbagai DateTimeExceptions saat runtime.

Misalnya, kode berikut dikompilasi, tetapi bidang HourOfDay kelas LocalDate akan menyebabkan upaya untuk memformat tanggal gagal.

LocalDate now = LocalDate.now();
DateTimeFormatter.RFC_1123_DATE_TIME.format(now);

LocalDate now = LocalDate.now();
DateTimeFormatter.ISO_DATE.format(now);

untuk perhitungan paralel yang diimplementasikan secara tidak benar

Metode asList dari kelas Array bukan satu-satunya saat koleksi membutuhkan perawatan hanya-baca.

Saat Anda mengulangi daftar, koleksi yang mendasarinya harus diperbaiki dan tidak diperbarui. Dengan demikian, metode add di dalam potongan kode berikut melontarkan ConcurrentModificationException.

List servers = new ArrayList();
servers.add("Tomcat");
                   
Iterator<String> iterator = servers.iterator();
while (iterator.hasNext()) {
  String server = iterator.next();
  servers.add("Jetty");  // throws a Runtime Exception
}

InputMismatchException

InputMismatchException umumnya terjadi saat bekerja dengan program Java yang meminta pengguna untuk memasukkan menggunakan kelas Pemindai . Pengecualian ini umumnya disebabkan selama input pengguna ketika Anda mengharapkan jenis input tertentu dan pengguna memasukkan jenis input yang berbeda. Dengan kata lain pengecualian ini dapat terjadi ketika input tidak valid untuk tipe yang diharapkan. Input tidak cocok dengan pola untuk tipe yang diharapkan, atau berada di luar jangkauan.

Seperti meneruskan data yang tidak valid misalnya meneruskan nilai numerik ke bidang non-numerik. Misalnya, jika suatu program mengharapkan nilai Integer untuk input tetapi pengguna memasukkan nilai String sebagai gantinya, InputMismatchException dilempar.

Solusi : Bungkus kode yang meminta input pengguna dalam loop sementara yang akan terus meminta pengguna untuk input yang benar.

IllegalFormatConversionException

Penjelasan : Ini terkait dengan printf() dan String.format() . Ini berarti ada placeholder yang tidak terkait (terlalu banyak placeholder, tidak cukup argumen) atau placeholder yang salah untuk jenis argumen. Misalnya, a %s menjadi placeholder untuk bilangan bulat akan membuang kesalahan ini.

Solusi : Pastikan jumlah placeholder cocok dengan jumlah argumen dan pastikan tipe placeholder benar.

NumberFormatException

Mencoba mengonversi string yang tidak valid menjadi angka

NumberFormatException terjadi saat upaya dilakukan untuk mengonversi string dengan format yang tidak benar menjadi nilai numerik . Itu berarti, ketika tidak mungkin untuk mengonversi string dalam tipe numerik apa pun (float, int, dll), pengecualian ini dilemparkan. Ini adalah Pengecualian Runtime (Pengecualian Tidak Dicentang) di Jawa. Ini adalah subkelas dari kelas IllegalArgumentException .

PengecualianParameter tidak valid

Melewati parameter/argumen yang tidak valid ke suatu metode

Pengecualian ini, adalah subkelas dari IllegalArgumentException yang dirancang untuk digunakan oleh kelas mesin JCA/JCE, dilontarkan saat parameter yang tidak valid diteruskan ke metode .

NullPointerException

NullPointerException adalah RuntimeException yang sangat umum ditemui oleh aplikasi Java. pengecualian ini dilontarkan saat Java menemukan referensi nol saat tidak mengharapkannya. dan pengembang java menulis kode yang memanggil metode pada referensi ini (objek yang tidak diinisialisasi).

String data = null;
System.out.println( data.length() ); // throws NullPointerException

Untuk menghindari RuntimeException ini di program Java Anda, inisialisasi setiap objek yang Anda buat sebelum Anda menggunakannya, dan lakukan pemeriksaan null pada objek apa pun yang diteruskan oleh pustaka eksternal ke dalam program Anda.

Dukung publikasi kami dengan mengikutinya

Lihat Java Runtime Error Memaksimalkan Potensi Tim Anda: Bagaimana Membuat Tim Pengiriman Perangkat Lunak Anda Sibuk Pertanyaan Wawancara Berbasis Java8 Stream yang paling sering ditanyakan — Bagian Terakhir Cara Membuat Proyek Quarkus Sederhana dengan Integrasi Database Apa itu Exception Chaining Di Java | Penanganan Pengecualian Saya Menghasilkan $300 dengan Menulis Buku dalam 2 Hari — Inilah Cara 10 Cara Sederhana namun Efektif untuk Meningkatkan Kualitas Hidup Anda Memulai dengan Spring Boot: Tutorial Komprehensif untuk Pemula