Lihatlah Java Runtime Errors
Tinjauan singkat tentang Java Runtime Errors
· Apa Runtime Error di Jawa?
· Runtime Error VS Compile-Time Error
· Jenis Runtime Error
· Bagaimana runtime error muncul?
· Apakah saya perlu membuang Runtime Errors
· Apa yang terjadi ketika Anda tidak menangkap Pengecualian Runtime
· Contoh Runtime Error
Apa itu Runtime Error di Java?
Kesalahan yang terjadi pada saat eksekusi program disebut sebagai kesalahan runtime. Jenis kesalahan ini tidak dapat dideteksi pada waktu kompilasi karena tidak ada yang salah dengan sintaksnya. Jadi kesalahan Runtime terjadi ketika program berhasil dikompilasi tanpa memberikan kesalahan apa pun dan membuat file “.class”. Namun, program tidak dijalankan dengan benar. Kesalahan ini terdeteksi saat runtime atau pada saat eksekusi program.
Kompiler Java tidak mendeteksi kesalahan runtime karena kompiler Java tidak memiliki teknik apa pun untuk menangkap kesalahan ini karena tidak memiliki semua informasi waktu proses yang tersedia. Kesalahan runtime ditangkap oleh Java Virtual Machine (JVM) saat program sedang berjalan.
Kesalahan runtime ini disebut pengecualian dan menghentikan program secara tidak normal, memberikan pernyataan kesalahan.
Pengecualian adalah kesalahan yang dilemparkan saat runtime. Kita dapat menggunakan teknik exception handling di Java untuk menangani error runtime ini. Dalam exception handling, potongan kode yang menurut pemrogram dapat menghasilkan kesalahan diletakkan di dalam blok try dan pemrogram dapat menangkap kesalahan di dalam blok catch.
Kesalahan Runtime VS Kesalahan Waktu Kompilasi
Kesalahan waktu kompilasi umumnya mengacu pada kesalahan yang sesuai dengan semantik atau sintaksis. Kesalahan runtime mengacu pada kesalahan yang kami temui selama eksekusi kode selama runtime . Kami dapat dengan mudah memperbaiki kesalahan waktu kompilasi selama pengembangan kode. Kompiler tidak dapat mengidentifikasi kesalahan runtime.
Deteksi
Kompiler dapat dengan mudah mendeteksi kesalahan waktu kompilasi selama pengembangan kode. Kompiler tidak dapat dengan mudah mendeteksi kesalahan waktu proses. Jadi, kita perlu mengidentifikasinya selama eksekusi kode.
Referensi
Kesalahan waktu kompilasi umumnya mengacu pada kesalahan yang sesuai dengan semantik atau sintaks. Kesalahan waktu proses mengacu pada kesalahan yang tidak terdeteksi oleh kompiler tetapi kami menemukannya selama eksekusi kode (selama waktu proses).
dampak
Kesalahan Waktu Kompilasi adalah kesalahan semantik atau sintaks , mereka mencegah kode berjalan (kompilasi) karena mendeteksi beberapa kesalahan sintaks. Wheares Runtime Errors mencegah kode dari eksekusi lengkap.
Fiksasi
Kami dapat dengan mudah memperbaiki kesalahan waktu kompilasi selama pengembangan kode. Kompiler tidak dapat mengidentifikasi kesalahan waktu proses. Tapi kita bisa memperbaikinya setelah eksekusi kode dan identifikasi kode sebelumnya.
Jenis Kesalahan Runtime
Ada beberapa jenis error runtime yang dapat kita hadapi pada saat eksekusi program. Beberapa kesalahan runtime yang sering ditemui tercantum di bawah ini:
Kesalahan entri data : Kesalahan input-output
Ada banyak cara input pengguna dapat merusak aplikasi.
Pada papan komentar berbasis HTML, pengguna yang diizinkan untuk mengirimkan tanda kurang dari (<) atau lebih besar dari (>) yang tidak terenkode memiliki potensi untuk benar-benar merusak kemampuan halaman web tersebut untuk merender. Demikian pula, sistem pemrosesan teks yang dibuat untuk mengharapkan semua input dalam format ASCII dapat dihentikan sebelum waktunya jika menerima emoji atau input karakter yang tidak standar.
Lebih jahat lagi, vektor serangan favorit para peretas adalah injeksi SQL , yang menyembunyikan kueri basis data berbahaya yang dapat dieksekusi di dalam bidang input yang tidak berbahaya. Hal ini tidak hanya dapat menyebabkan kegagalan aplikasi, tetapi juga berpotensi menyerahkan kendali atas seluruh lapisan data.
Proses sanitasi input, atau penggosokan data , mengubah spektrum data yang luas yang berpotensi dimasukkan ke dalam aplikasi menjadi rentang nilai yang aman yang dipahami oleh program. Penggunaan pustaka semacam itu membantu mengurangi kesalahan runtime yang disebabkan oleh kegagalan sanitasi input.
Kerangka kerja Java yang populer seperti Apache BVal dan Hibernate Validator melakukan pembersihan input berbasis anotasi yang sederhana, dan dapat diintegrasikan dengan mudah ke dalam aplikasi berbasis Java apa pun.
Logika yang diimplementasikan dengan buruk
Hanya karena kompilasi kode tidak berarti itu berfungsi dengan baik. Kode sering berisi masalah logis yang menyebabkan aplikasi gagal saat runtime.
Java berisi konstruk bawaan untuk menangani kelas kesalahan runtime terkait kode umum, yang disebut RuntimeException, atau pengecualian yang tidak dicentang. Java 17 mendefinisikan 78 kesalahan seperti itu di SDK saja, dan proyek serta kerangka kerja lainnya juga menentukan kesalahan RuntimeException mereka sendiri.
- RuntimeException
- ArrayIndexOutOfBoundException
- ConcurrentModificationException
- ClassCastException
- …
Paling tidak, setiap aplikasi harus menyertakan kerangka pengecualian generik yang dapat menangkap setiap kemungkinan RuntimeException, mencatat kesalahan, dan membiarkan utas eksekusi yang bermasalah mati daripada membatalkan seluruh aplikasi.
Sumber daya runtime tidak mencukupi
Pengembang perangkat lunak tidak bertanggung jawab atas setiap jenis kesalahan runtime yang terjadi. Banyak kesalahan runtime di Java melibatkan keterbatasan sumber daya yang disebabkan oleh masalah dengan infrastruktur yang mendasarinya. Contohnya termasuk: waktu tunggu jaringan, kondisi kehabisan memori , penggunaan CPU yang berlebihan , atau ketidakmampuan untuk menjadwalkan utas pada prosesor.
Salah satu cara untuk menghindari error runtime terkait sumber daya adalah dengan menggunakan alat pengujian beban, seperti JMeter atau LoadRunner, dalam pipeline CI/CD aplikasi. Jika alat ini mendeteksi kemungkinan masalah kinerja, mereka dapat menghentikan aplikasi sebelum bergerak lebih jauh ke saluran pipa menuju penerapan produksi.
Beban beberapa aplikasi bervariasi secara drastis. Misalnya, aplikasi layanan keuangan mungkin melihat beban tetap di sebagian besar waktu, tetapi menjadi sangat sibuk di akhir hari perdagangan. Layanan pajak mungkin mencapai beban puncak sebelum batas waktu pengarsipan tetapi memiliki beban yang relatif sedikit di sisa tahun ini.
Tim DevOps harus memantau metrik kinerja mereka dengan alat untuk mendeteksi dan memitigasi kesalahan runtime terkait sumber daya terlebih dahulu. Contoh alat tersebut termasuk JDK Flight Recorder dan Java Mission Control .
Untuk aplikasi dengan beban kerja yang sama sekali tidak dapat diprediksi, gunakan teknologi load balancing berbasis cloud untuk mengalokasikan sumber daya secara elastis. Ini menghilangkan sumber daya yang kurang dialokasikan, dan jebakan untuk membeli perangkat keras yang mahal dan jarang digunakan.
Konfigurasi sumber daya eksternal
Aplikasi perusahaan jarang ada dalam gelembung yang terisolasi. Mereka biasanya berinteraksi dengan segala hal mulai dari database NoSQL dan sistem relasional hingga antrean Kafka dan RESTful API. Sayangnya, jika aplikasi Anda tidak dapat terhubung ke sistem eksternal yang diperlukan, hal ini pasti akan menyebabkan kesalahan runtime.
Sumber daya eksternal dapat memicu kesalahan runtime jika salah satu dari situasi berikut ini terjadi tanpa pemutakhiran yang sesuai dengan program panggilan:
- perubahan alamat IP;
- perubahan kredensial;
- perubahan konfigurasi firewall; atau
- sistem eksternal turun untuk pemeliharaan.
Terkait, alat rekayasa kekacauan secara acak menghentikan proses di mana aplikasi bergantung. Alat semacam itu memaksa pengembang untuk menulis kode yang tetap responsif dan tangguh bahkan saat sistem eksternal gagal.
Masalah yang melekat dengan sumber daya eksternal adalah pengembang tidak dapat mengontrolnya — tetapi mereka dapat mengontrol bagaimana aplikasi merespons ketika sumber daya eksternal tersebut gagal. Antisipasi kesalahan runtime yang dihasilkan oleh sistem yang tidak Anda kontrol, dan tulis aplikasi yang merespons dengan baik saat sistem eksternal gagal.
Kerentanan perpustakaan pihak ketiga
Setiap aplikasi perusahaan nontrivial mencakup lusinan ketergantungan pada pustaka pihak ketiga untuk menjalankan fungsi seperti pencatatan log, pemantauan, validasi input, penanganan formulir, dan lainnya.
Sayangnya, bug apa pun di perpustakaan pihak ketiga menjadi bug di aplikasi yang Anda terapkan. Hal ini menjadi sangat tidak nyaman bagi dunia Java pada bulan Desember 2021, karena cacat injeksi LDAP di pustaka Log4j 2 yang banyak digunakan memaksa JVM di seluruh dunia untuk offline.
Salah satu cara untuk mengurangi kemungkinan bahwa ketergantungan perangkat lunak memperkenalkan kesalahan waktu proses ke dalam aplikasi adalah dengan hanya menggunakan pustaka tepercaya dari organisasi seperti Apache atau Eclipse.
Tindakan perlindungan lainnya adalah memperbarui dependensi aplikasi ke versi terbaru secara teratur segera setelah pembaruan tersedia.
Terakhir, waspadai dependensi sekunder atau tersier — yang bergantung pada dependensi primer Anda sendiri — dan waspadai segala risiko yang ditimbulkannya.
Dalam dunia pengembangan perangkat lunak, "sempurna" adalah musuh dari "selesai". Tidak ada program yang kebal dari ancaman kesalahan runtime yang tidak terduga. Namun, ketika pengembang perusahaan meningkatkan kesadaran mereka tentang kemungkinan penyebabnya dan mengambil langkah-langkah untuk mengurangi potensi ancaman, mereka dapat membuat perangkat lunak yang meminimalkan kemungkinan menghadapi kesalahan waktu proses.
Bagaimana kesalahan runtime muncul?
Selamat! Jika prompt perintah Anda terlihat seperti ini:
Maka Anda telah berhasil mengkompilasi program Anda ke dalam bytecode Java, artinya tidak ada masalah sintaksis dengan kode Anda! Tapi, seperti namanya, ketika kita menjalankan program ini:
Kami sekarang mengalami kesalahan runtime. Run time error umumnya terjadi ketika ada sesuatu yang salah secara logis dengan kode Anda. Dokumen ini akan menjelaskan cara membaca dan memperbaiki kesalahan runtime.
Berikut adalah bagian utama dari kesalahan runtime
Pengecualian di utas "utama" : Bagian ini muncul untuk sebagian besar kesalahan runtime. Itu hanya memberi tahu Anda bahwa pengecualian terjadi pada metode utama, yang seharusnya terjadi setiap saat.
java.lang.ArrayIndexOutOfBoundsException: 5 : Ini adalah kesalahan yang terjadi. Nama kesalahan umumnya akan memberi Anda gambaran tentang apa yang mungkin terjadi. Dalam hal ini, kita tahu itu berurusan dengan array dan keluar dari ruang yang diberikan untuk array.
di RunTimeErrors.main(RunTimeErrors.java:10) : Ini disebut pelacakan tumpukan, yang memberi tahu Anda daftar metode yang dieksekusi saat kesalahan terjadi.
- RunTimeErrors.main memberi tahu kita bahwa kesalahan ini terjadi dalam metode utama kelas RunTimeErrors.
- RunTimeErrors.java:10 memberi tahu kita file ini terjadi dan di baris mana itu terjadi. Dalam hal ini, ini terjadi di kelas utama kami di baris 10 .
Terkadang Anda perlu melakukan pemeriksaan untuk memutuskan apakah akan melontarkan pengecualian runtime jika sistem tidak dapat melakukannya sendiri, seringkali saat bekerja dengan IllegalArgumentException, tetapi sering kali Anda tidak perlu melakukan pemeriksaan karena ini adalah bagian dari pemeriksaan runtime standar yang dilakukan Java untuk Anda.
mari kita ambil NullPointerException sebagai contoh:
if(t == null)
throw new NullPointerException();
if(t != null) {
// work with t reference
}
Apa yang terjadi jika Anda tidak menangkap pengecualian Runtime? Karena kompiler tidak menerapkan spesifikasi pengecualian untuk ini, cukup masuk akal bahwa RuntimeException dapat meresap sampai ke metode main() Anda tanpa tertangkap. Untuk melihat apa yang terjadi dalam kasus ini, coba contoh berikut:
//: exceptions/NeverCaught.java
// Ignoring RuntimeExceptions.
// {ThrowsException}
public class NeverCaught {
static void f() {
throw new RuntimeException("From f()");
}
static void g() {
f();
}
public static void main(String[] args) {
g();
}
} ///:~
Exception in thread "main" Java.lang.RuntimeException: From f()
at NeverCaught.f(NeverCaught.Java:7)
at NeverCaught.g(NeverCaught.Java:10)
at NeverCaught.main(NeverCaught.Java:13)
Ingatlah bahwa hanya pengecualian bertipe RuntimeException (dan subkelas) yang dapat diabaikan dalam pengkodean Anda, karena kompiler dengan hati-hati memberlakukan penanganan semua pengecualian yang diperiksa. Alasannya adalah RuntimeException mewakili kesalahan pemrograman, yaitu:
Kesalahan yang tidak dapat Anda antisipasi. Misalnya, referensi nol yang berada di luar kendali Anda.
Kesalahan yang Anda, sebagai pemrogram, harus periksa dalam kode Anda (seperti ArraylndexOutOfBoundsException di mana Anda seharusnya memperhatikan ukuran larik). Pengecualian yang terjadi dari poin #1 sering menjadi masalah untuk poin
Anda dapat melihat betapa besar manfaatnya memiliki pengecualian dalam kasus ini, karena mereka membantu dalam proses debugging.
Menarik untuk diperhatikan bahwa Anda tidak dapat mengklasifikasikan penanganan eksepsi Java sebagai alat tujuan tunggal. Ya, ini dirancang untuk menangani kesalahan waktu proses yang mengganggu yang akan terjadi karena kekuatan di luar kendali kode Anda, tetapi juga penting untuk jenis bug pemrograman tertentu yang tidak dapat dideteksi oleh kompiler.
Contoh Kesalahan Runtime
public class Temp {
public static void main(String[] args) {
Temp t = initT();
t.foo("Hi");
}
private static Temp initT() {
return null;
}
public void foo(String s) {
System.out.println(s.toLowerCase());
}
}
Exception in thread "main" java.lang.NullPointerException
at Temp.main(Temp.java:7)
Ada seluruh kelompok jenis pengecualian yang ada di kategori ini. Mereka selalu dilemparkan secara otomatis oleh Java dan Anda tidak perlu memasukkannya ke dalam spesifikasi pengecualian Anda. Cukup nyaman, mereka semua dikelompokkan bersama dengan menempatkan mereka di bawah satu kelas dasar yang disebut RuntimeException , yang merupakan contoh sempurna dari pewarisan: Ini membentuk keluarga tipe yang memiliki beberapa karakteristik dan perilaku yang sama. Selain itu, Anda tidak perlu menulis spesifikasi pengecualian yang mengatakan bahwa suatu metode mungkin melontarkan RuntimeException ( atau jenis apa pun yang diwarisi dari RuntimeException ), karena itu adalah pengecualian yang tidak dicentang. Karena menunjukkan bug, Anda biasanya tidak menangkap RuntimeException- itu ditangani secara otomatis. Jika Anda dipaksa untuk memeriksa RuntimeExceptions , kode Anda bisa menjadi terlalu berantakan. Meskipun Anda biasanya tidak menangkap RuntimeExceptions , dalam paket Anda sendiri, Anda mungkin memilih untuk membuang beberapa RuntimeExceptions .
Lihat Pengecualian Waktu Proses Paling Umum
Selamat belajar
Bergabunglah dengan Mouad Oumous Java WhatsApp Group GABUNG
Bergabunglah dengan Saluran Telegram Mouad Oumous GABUNG
Dukung publikasi kami dengan mengikutinya
GraphQL Dengan Spring Boot Kesalahan Java Runtime Paling Umum Memulai dengan Spring Boot: Tutorial Komprehensif untuk Pemula 10 Cara Sederhana namun Efektif untuk Meningkatkan Kualitas Hidup Anda Pertanyaan Wawancara berbasis Java8 Stream yang paling sering ditanyakan — Bagian Terakhir Saya Menghasilkan $300 dengan Menulis Buku dalam 2 Hari — Inilah Bagaimana Pengecualian Berantai Di Jawa | Penanganan Pengecualian Cara Membuat Proyek Quarkus Sederhana dengan Integrasi Database
![Apa itu Linked List? [Bagian 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































