JavaRush /Blog Jawa /Random-JV /Ngopi #220. Cara Ndandani Pengecualian ing Jawa - Pandhua...

Ngopi #220. Cara Ndandani Pengecualian ing Jawa - Pandhuan sing Detil

Diterbitake ing grup
Sumber: JavaTechOnline Tutorial iki bakal mbantu sampeyan sinau carane ndandani pangecualian umum ing Jawa. Saliyane teori, sampeyan bakal weruh conto kode kanggo ndandani masalah kasebut. Ngopi #220.  Cara Ndandani Pengecualian ing Jawa - Pandhuan sing Detil - 1Kaya basa pamrograman liyane, pangembang Jawa bisa nemoni kesalahan utawa pangecualian nalika nulis kode. Pangecualian kudu ditindakake kanthi serius amarga kedadeyan kasebut mbutuhake wektu kerja. Nanging, kanthi kawruh sing sethithik, sampeyan bisa nyepetake resolusi paling akeh masalah kasebut. Dadi, ayo sinau carane ndandani pangecualian umum ing Jawa.

Pedoman Umum kanggo Nyingkiri Pengecualian ing Jawa

Kanggo ngindhari pangecualian ing Jawa, penting kanggo ngerti lan tindakake pedoman kode:
  1. Tansah validasi input pangguna sadurunge digunakake ing kode sampeyan.
  2. Gunakake try-catch , throws , throw blocks , gumantung saka apa sing cocok kanggo skenario tartamtu.
  3. Aja nglirwakake pesen ing kode babagan pangolahan lan kesalahan. Iki bakal mbantu ngenali lan mbenerake masalah.
  4. Pesthekake log pengecualian kanggo tujuan debugging. Sampeyan bisa nggunakake pesen logger kanggo mbantu ngenali masalah.
  5. Tindakake praktik paling apik kanggo ngindhari pangecualian lan nyoba kode sampeyan kanthi lengkap.
  6. Nganyari dependensi API kanggo mesthekake yen sampeyan nggunakake versi perpustakaan lan kerangka kerja sing paling anyar lan paling stabil.
  7. Gunakake alat lan kerangka uji coba sing dibutuhake kanggo ngenali masalah potensial ing kode sampeyan sadurunge nggawe pengecualian.
  8. Ngawasi kinerja lan log aplikasi sampeyan kanggo ngenali lan ngrampungake masalah kanthi cepet.
  9. Tetep gaul karo praktik keamanan paling apik kanggo mesthekake kode sampeyan aman lan dilindhungi saka serangan potensial.
  10. Dokumentasi kode lan pangecualian kanthi sak tenane supaya pangembang liyane luwih gampang ngerti lan njaga.

Dhaptar pangecualian sing paling umum ing Jawa

Jawa nduweni daftar pangecualian sing cukup dawa. Ayo ndeleng sawetara sing paling umum:

NullPointerException

NullPointerException minangka jinis pengecualian RuntimeException . Iki kedadeyan nalika kita nyoba nggunakake variabel referensi sing duwe nilai null. Iki tegese nuduhake obyek utawa variabel sing nilaine null . Kesalahan kasebut bisa kedadeyan nalika kita nyoba nelpon cara utawa ngakses lapangan obyek sing durung diinisialisasi, utawa nalika null dadi parameter kanggo metode sing ora ditangani. Kanggo nyegah NullPointerException dibuwang , sampeyan bisa mriksa manawa variabel referensi nol nggunakake operator == . Yen ngono, mula kasus null kudu ditangani kanthi bener. Utawa, kita bisa nginisialisasi variabel dadi nilai standar (yen bisa) kanggo mesthekake yen kita ora tau nemoni referensi null. Cara liya kanggo nyegah NullPointerException yaiku nggunakake kelas Opsional . Ing Jawa, Opsional minangka obyek wadhah sing bisa uga ora ngemot nilai non-null. Iki digunakake kanggo makili ana utawa ora ana nilai, padha karo carane nilai null digunakake kanggo makili anané nilai. Yen programmer nyoba ngakses nilai kosong saka obyek Opsional , program kasebut ora bakal mbuwang NullPointerException nanging bakal ngasilake obyek Opsional sing kosong . Ing tembung liyane, Opsional meksa programmer kanggo nangani cilik ngendi Nilai wis ilang, kang mbantu supaya NullPointerException a .

IndexOutOfBoundsException

IndexOutOfBoundsException minangka pangecualian runtime sing dibuwang nalika indeks sing digunakake kanggo ngakses array utawa koleksi negatif utawa luwih gedhe tinimbang utawa padha karo ukuran array utawa koleksi. Kanggo nyegah pangecualian iki, kita kudu mesthekake yen indeks sing digunakake kanggo ngakses array utawa koleksi ana ing watese, yaiku, kudu luwih gedhe tinimbang utawa padha karo nol lan kurang saka ukuran array utawa koleksi.

ArrayIndexOutOfBoundsException

ArrayIndexOutOfBoundsException minangka jinis IndexOutOfBoundsException sing dibuwang nalika nyoba kanggo ngakses array ing indeks sing ora bener. Ing Jawa, indeks array diwiwiti saka 0 lan diakhiri kanthi dawa () -1 , ing ngendi dawa () minangka jumlah unsur ing array. Yen sampeyan nyoba ngakses unsur ing indeks ing njaba kisaran iki, Jawa bakal mbuwang ArrayIndexOutOfBoundsException . Nalika nemoni ArrayIndexOutOfBoundsException , sampeyan kudu mriksa kode kanggo mesthekake yen sampeyan nggunakake indeks sing bener nalika ngakses unsur ing array.

StringIndexOutOfBoundsException

StringIndexOutOfBoundsException minangka jinis IndexOutOfBoundsException sing dibuwang nalika nyoba kanggo ngakses karakter ing string sing indeks ora bener. Kaya ArrayIndexOutOfBoundsException sadurunge , elinga yen ing Jawa, indeks string diwiwiti saka 0 lan pungkasane dawa () -1 , ing ngendi dawa () minangka jumlah karakter ing string. Yen sampeyan nyoba ngakses karakter ing indeks ing njaba kisaran iki, sampeyan bisa nemokake StringIndexOutOfBoundsException . Yen sampeyan nemoni StringIndexOutOfBoundsException , sampeyan kudu mriksa kode sampeyan kanggo mesthekake yen sampeyan nggunakake indeks sing bener nalika ngakses karakter ing string.

ClassCastException

Pangecualian iki dumadi nalika kita nyoba ngirim obyek menyang jinis sing ora cocog karo jinis asline. Kanggo ngatasi masalah kaya iki, penting kanggo mesthekake yen program Java sampeyan mung nyoba ngirim obyek menyang kelas sing dadi conto. Sampeyan bisa mriksa jinis obyek nggunakake instanceof operator sadurunge nglamar cast.

IllegalArgumentException

IllegalArgumentException minangka jinis RuntimeException sing dibuwang nalika metode diarani kanthi argumen sing ora sah utawa ora cocog. Ing tembung liya, kesalahan iki bisa kedadeyan nalika metode diarani kanthi argumen sing ana ing njaba kisaran sing dikarepake utawa ora duwe format utawa struktur sing dikarepake. Contone, cara mbutuhake nomer positif minangka argumen lan kita menehi nomer negatif, sing input ora bener. Yen sampeyan nemoni IllegalArgumentException , sampeyan kudu mriksa kode sampeyan kanggo mesthekake yen sampeyan nelpon metode kanthi argumen sing bener lan cocok.

IllegalStateException

IllegalStateException minangka jinis RuntimeException sing dibuwang nalika obyek ora cocog kanggo operasi sing ditindakake. Iki bisa kedadeyan yen metode diarani obyek sing ora ana ing kahanan sing dikarepake. Contone, yen kita nggawe obyek sambungan database banjur nutup. Banjur yen kita nyoba kanggo nggawe obyek Statement ing sambungan ditutup, bakal uncalan IllegalStateException amarga createStatement () cara mbutuhake sambungan mbukak. Yen sampeyan nemoni IllegalStateException , sampeyan kudu mriksa kode sampeyan kanggo mesthekake yen sampeyan nelpon metode ing obyek sing ana ing kahanan sing cocog.

Ora DidhukungOperationException

UnsupportedOperationException minangka jinis RuntimeException sing dibuwang nalika nyoba nindakake operasi sing ora didhukung ing obyek. Kesalahan iki bisa kedadeyan nalika kita nelpon cara sing ora ditindakake dening obyek utawa ora didhukung dening obyek kasebut. Kanggo nyegah pangecualian supaya ora dibuwang, kita ora kudu nelpon operasi kasebut sing ora didhukung ing obyek. Kita kudu mriksa kode kita kanggo mesthekake yen kita nelpon metode ing obyek sing ndhukung operasi kasebut.

ArithmeticException

ArithmeticException minangka jinis RuntimeException sing dibuwang nalika operasi aritmetika ngasilake asil sing ora bener. Pangecualian iki bisa kedadeyan nalika kita nyoba nindakake operasi aritmetika kanthi argumen sing ora bener utawa ora bener. Contone, nalika nyoba kanggo dibagi dening nul. Kanggo ngatasi masalah iki, kita bisa nindakake validasi input lan mesthekake yen argumen kasebut cocog karo kondisi sing dibutuhake sadurunge nindakake operasi aritmetika.

SecurityException

SecurityException minangka jinis RuntimeException sing dibuwang nalika ana pelanggaran keamanan sajrone eksekusi program. Kesalahan iki bisa kedadeyan nalika program nyoba nindakake operasi sing ora diidini dening kabijakan keamanan. Kanggo ngatasi masalah kasebut, kita kudu mesthekake yen kita duwe akses menyang sumber daya lan nindakake operasi sing duwe ijin khusus.

NumberFormatException

NumberFormatException minangka jinis RuntimeException sing dibuwang nalika cara diarani ngowahi senar menyang format angka, nanging senar kasebut ora ana ing format sing cocog. Kanggo ngatasi masalah iki, kita kudu verifikasi input pangguna sadurunge nyoba ngowahi. Priksa uga kode sampeyan kanggo mesthekake yen sampeyan nyoba ngowahi senar sing diformat kanthi tepat kanggo jinis angka target.

InterruptedException

InterruptedException minangka pangecualian sing dicenthang sing dibuwang yen utas nunggu, turu, utawa mblokir kanggo sawetara acara lan acara kasebut diselani dening utas liyane. Kesalahan bisa kedadeyan nalika thread nunggu input, ngeculake kunci, utawa ngrampungake sawetara operasi liyane, lan thread liyane interrupts thread nunggu. Kanggo ngatasi masalah iki, sampeyan bisa nyekel InterruptedException lan nanggapi kanthi ngresiki sumber daya, mungkasi thread, utawa njupuk tindakan liyane sing cocog. Yen sampeyan nemoni InterruptedException , sampeyan kudu mriksa kode kanggo mesthekake yen sampeyan nangani gangguan thread kanthi bener.

FileNotFoundException

FileNotFoundException minangka pangecualian sing dicenthang sing dibuwang nalika program nyoba ngakses file sing ora ana utawa ora bisa ditemokake ing lokasi sing ditemtokake. Bisa katon yen file salah ejaan, dipindhah utawa dibusak, utawa malah nalika program ora duwe idin sing perlu kanggo ngakses file. Kanggo ndandani kesalahan, sampeyan bisa nindakake validasi input kanggo mesthekake yen path file bener lan program nduweni ijin sing dibutuhake kanggo ngakses file kasebut.

IOException

IOException minangka pangecualian sing dicenthang ing Jawa sing nuduhake kesalahan nalika nindakake operasi input utawa output, kayata maca utawa nulis menyang file utawa soket jaringan. Iki bisa kedadeyan amarga sawetara alasan, kayata file sing ditemtokake ilang utawa ora bisa diakses, kesalahan jaringan, utawa ijin ora cukup. Kanggo ndandani masalah, sampeyan kudu nindakake sawetara tumindak kayata mriksa pesen kesalahan, nangani pengecualian nggunakake try-catch , nutup sumber daya, mriksa ijin file, lan sapiturute.

NoSuchMethodException

NoSuchMethodException minangka pangecualian sing dibuwang nalika runtime nalika kita nyoba nelpon cara sing ora ana ing kelas kasebut. Pangecualian iki biasane ana yen kita nelpon cara nggunakake Class.getMethod () utawa Class.getDeclaredMethod () lan jeneng cara kasebut ora ditemokaké ing kelas utawa antarmuka. Pangecualian uga bisa kedadeyan nalika kita nyoba nelpon cara nggunakake kelas java.lang.reflect.Method lan jeneng metode kasebut ora ana ing obyek kasebut. Kanggo ngindhari pangecualian iki, pesthekake nelpon metode sing bener kanthi teken metode lan penentu akses sing bener.

NoSuchFieldException

NoSuchFieldException minangka pangecualian runtime sing kedadeyan nalika kita nyoba ngakses lapangan sing ora ana ing kelas kasebut. Pangecualian iki biasane ana nalika kita nelpon cara nggunakake Class.getField () utawa Class.getDeclaredField () lan jeneng lapangan kasebut ora ditemokaké ing kelas utawa antarmuka. Kajaba iku, bisa uga diarani yen kita nyoba ngakses lapangan nggunakake kelas java.lang.reflect.Field lan jeneng lapangan sing ditemtokake ora ana ing obyek kasebut. Kanggo ngindhari pangecualian iki, priksa manawa sampeyan ngakses kolom sing bener kanthi jeneng sing bener lan modifikasi akses. Yen sampeyan ngakses lapangan pribadi, priksa manawa sampeyan nggunakake metode getDeclaredField () tinimbang metode getField () .

IllegalAccessException

IllegalAccessException minangka pangecualian run-time sing kedadeyan nalika kita nyoba ngakses lapangan utawa metode ing kelas nanging kita ora duwe hak akses sing dibutuhake. Pangecualian iki biasane katon nalika kita nyoba ngakses lapangan pribadi utawa cara saka njaba kelas utawa nalika nyoba ngakses lapangan utawa cara sing dilindhungi saka kelas sing dudu subclass saka kelas asli. Bisa uga diarani nalika nyoba ngakses lapangan utawa cara sing wis ditandhani minangka ora kasedhiya dening kelas java.lang.reflect.AccessibleObject . Kanggo ngindhari masalah iki, priksa manawa sampeyan duwe ijin sing dibutuhake ing lapangan utawa metode sing sampeyan coba akses. Yen lapangan utawa cara pribadi, sampeyan bisa uga kudu nggunakake refleksi lan nyetel AccessibleObject dadi bener (kanggo ngakses). Nanging, ati-ati nalika nggunakake refleksi kanggo ngakses lapangan utawa metode pribadi, amarga bisa ngrusak enkapsulasi lan kompromi integritas kelas.

VerifyError

VerifyError minangka kesalahan run-time sing minangka subclass saka LinkageError . Iki kedadeyan nalika Java Virtual Machine (JVM) nemoni file kelas sing nglanggar aturan validasi tartamtu. Nalika kelas Jawa dikompilasi, compiler mriksa apa bytecode nderek aturan lan watesan tartamtu, kayata safety jinis lan panggunaan sing tepat saka tumpukan lan variabel lokal. Yen file kelas nglanggar aturan iki, JVM bakal uncalan VerifyError nalika loading lan mriksa kelas ing runtime. Kanggo ngindhari VerifyError , priksa manawa kode sampeyan manut sintaks lan semantik basa Jawa sing bener. Yen sampeyan nemoni VerifyError , sampeyan kudu mriksa kode sampeyan kanggo mesthekake yen kode kasebut sah lan ora ana pelanggaran aturan verifikasi bytecode Java.

OutOfMemoryError

OutOfMemoryError minangka subclass saka Error , jinis Throwable sing ngenalake masalah abot sing ora bisa dirampungake nalika runtime. Sanajan Java 8 kalebu sawetara dandan ing koleksi sampah lan manajemen memori, sampeyan isih bisa nemoni OutOfMemoryError yen aplikasi sampeyan nggunakake memori sing akeh banget utawa salah ngatur panggunaan memori. Kanggo ngindhari OutOfMemoryError , sampeyan kudu ngatur panggunaan memori kanthi bener ing aplikasi Java. Iki kalebu nggunakake struktur data lan algoritma sing nggunakake memori kanthi efisien, ngindhari nggawe obyek sing ora perlu, lan mbusak obyek kanthi bener nalika ora dibutuhake maneh. Kajaba iku, sampeyan bisa nambah ukuran tumpukan maksimum kanggo JVM kanthi nggunakake flag -Xmx nalika mbukak program Java.

StackOverflowError

StackOverflowError minangka jinis kesalahan sing kedadeyan nalika ukuran tumpukan sing dibutuhake dening program ngluwihi jumlah memori sing diparengake. Bisa kedadeyan nalika program nelpon akeh banget cara nested utawa nalika cara nelpon dhewe recursively kakehan, asil ing loop tanpa wates. Java Virtual Machine (JVM) nyedhiyakake jumlah memori sing tetep kanggo tumpukan eksekusi, sing digunakake kanggo nglacak panggilan metode lan variabel lokal. Nalika tumpukan overflows, JVM mbuwang StackOverflowError . Kanggo ngindhari StackOverflowError , penting kanggo mesthekake yen program Java sampeyan nggunakake rekursi lan cara panggilan sing nyukupi. Yen sampeyan nemoni StackOverflowError , sampeyan bisa nyoba nambah ukuran tumpukan kanthi nggunakake flag -Xss nalika mbukak program Java.

InvocationTargetException

InvocationTargetException minangka pangecualian sing dicenthang sing dibuwang dening mekanisme refleksi Jawa. Iku bagéan saka paket java.lang.reflect.InvocationTargetException lan digunakake kanggo nunjukaké sing ana pangecualian sak cara utawa invocation konstruktor. Nalika cara utawa konstruktor diarani nggunakake mekanisme bayangan Jawa, disebut () cara java.lang.reflect.Method utawa java.lang.reflect.Constructor kelas . Yen metode utawa konstruktor sing dijaluk mbuwang pengecualian, metode invoke () nyekel lan mbungkus ing InvocationTargetException . Pangecualian iki banjur diterusake menyang panelpon metode invoke() . Kanggo ndandani InvocationTargetException , kita kudu nyekel, njaluk pangecualian ROOT sabab nggunakake metode getCause () , lan nangani pangecualian sabab ROOT patut. Elinga yen panyebab oyod bisa dadi pangecualian sing dicenthang utawa pangecualian runtime, dadi manawa kanggo nangani kanthi bener.

Cara kanggo ndandani pangecualian sing paling umum ing Jawa

Carane ndandani NullPointerException

Skenario: Sampeyan duwe cara sing ngakses obyek sing duwe nilai null .
String title= null;
System.out.println(title.length()); // Это вызовет NullPointerException
Solusi #1: Priksa manawa obyek kasebut nol sadurunge digunakake.
if(title!= null) {
   System.out.println(title.length());
} else {
   System.out.println("title is null");
}
Solusi #2: Gunakake Opsional kanggo ngindhari 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.");
}

Carane ndandani ArrayIndexOutOfBoundsException

Skenario: Sampeyan nyoba ngakses larik ing indeks sing ora ana watese.
int[] numbers = {4, 5, 6};
System.out.println(numbers[3]);   // Это вызовет ArrayIndexOutOfBoundsException
Solusi: Priksa dawa array sadurunge ngakses lan priksa manawa sampeyan nggunakake indeks sing bener.
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");
}

Cara ndandani ClassCastException

Skenario: Sampeyan nyoba ngirim obyek menyang jinis sing ora cocog karo jinis asline.
Object obj = "Java Exception";
Integer number = (Integer) obj; // Это вызовет ClassCastException
Solusi: Priksa manawa sampeyan mung ngirim obyek menyang jinis sing cocog karo.
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");
}

Carane ndandani IllegalArgumentException

Skenario: Sampeyan ngirim argumen sing ora bener menyang 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: Priksa manawa sampeyan ngirim argumen sing bener menyang metode. Ing kasus iki, pass nomer positif.
printNumber(1); //  Это успешно напечатает 1.

Cara ndandani IllegalStateException

Skenario: Obyek ana ing kahanan ora bener.
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: Priksa manawa sampeyan njaga status obyek kanthi bener.
Bike bike= new Bike();
bike.start();

Cara ndandani UnsupportedOperationException

Skenario: Sampeyan nggunakake operasi sing ora didhukung dening obyek. Salah sawijining conto populer yaiku nalika sampeyan nggunakake operasi mbusak () ing koleksi sing ora bisa diganti, sampeyan bakal weruh pangecualian UnsupportedOperationException .
List<String> list = Arrays.asList("Java", "Angular", "Spring");
list.add("Python"); // Это вызовет UnsupportedOperationException
Amarga cara Arrays.asList () ngasilake dhaftar immutable, ora ndhukung nambah utawa mbusak unsur. Solusi: Priksa manawa sampeyan mung nelpon operasi sing didhukung ing obyek.
List<String> list = new ArrayList<>(Arrays.asList("Java", "Angular" "Spring"));
list.add("Python");
System.out.println(list);

Cara ndandani ArithmeticException

Skenario #1: Sampeyan nyoba nindakake operasi divisi integer sing ngasilake asil pecahan.
int i = 10;
int j = 4;
int k = i/j; // Это вызовет исключение ArithmeticException: целочисленное деление будет дробным
Ing kene asil operasi divisi yaiku 2,5, yaiku nilai pecahan. Amarga integer ora bisa nyimpen nilai pecahan, ArithmeticException dibuwang . Solusi: Kanggo ngindhari pangecualian iki, kita bisa nggunakake jinis data sing ndhukung nilai pecahan, kayata pindho , kanggo nyimpen asil operasi divisi. Iki contone:
int i = 10;
int j = 4;
double k = (double) i/j;
Skenario #2: Sampeyan nyoba dibagi karo nol lan sampeyan entuk pangecualian iki. Iki minangka skenario sing paling umum.
int i = 4;
int j = 0;
int k = i/j; // Это вызовет исключение ArithmeticException: нельзя делить на ноль
Solusi: Tangani divisi kanthi nol kanthi bener. Contone, kode ing ngisor iki nuduhake pangolahan sing bener.
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");
}

Carane ndandani IndexOutOfBoundsException

Skenario: Sampeyan nyoba ngakses koleksi kanthi indeks sing ana ing njaba.
List<String> list = Arrays.asList("Apple", "Papaya", "Mango");
System.out.println(list.get(3)); // Это вызовет IndexOutOfBoundsException
Solusi: Priksa ukuran koleksi sadurunge ngakses lan priksa manawa sampeyan nggunakake indeks sing bener.
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");
}

Cara ndandani IOException

Skenario: Operasi input/output gagal amarga file ora bisa 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: Nangani kesalahan I/O lan priksa manawa sumber daya ditutup kanthi bener.
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();
}
Elinga yen minangka alternatif, kita bisa nggunakake fitur try-with-resource sing dienal ing Jawa 7 kanggo nutup sumber daya kanthi otomatis kaya ing ngisor iki. Kita bisa ngumumake siji utawa luwih sumber daya ing statement nyoba , lan Jawa bakal kanthi otomatis nutup sumber daya ing mburi pemblokiran, preduli saka pamblokiran rampung normal utawa pangecualian dibuwang.
try (BufferedReader reader = new BufferedReader(new FileReader("pqr.txt"))) {
....
} catch {
....
}

Cara ndandani FileNotFoundException

Skenario: File ora ditemokake ing lokasi sing ditemtokake.
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: Priksa manawa file kasebut ana lan sampeyan duwe ijin sing cocog kanggo ngakses.
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();
}

Carane ndandani NoSuchMethodException

Skenario: Yen sampeyan nyoba ngakses cara sing ora bisa ditemokake.
public class TestClass {
   public void sayHello() {
      System.out.println("Hello");
   }
}

TestClass obj = new TestClass();
Method method = obj.getClass().getMethod("printHello"); // Это вызовет NoSuchMethodException
Solusi: Priksa manawa metode kasebut ana lan jeneng metode lan tandha tangane bener.
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 ndandani ConcurrentModificationException

Skenario: Koleksi diganti nalika lagi diulang.
List<String> list = new ArrayList<>();
list.add("Java");
list.add("Python");
for (String str : list) {
  list.remove(str);  // Это вызовет ConcurrentModificationException
}
Solusi: Gunakake iterator kanggo ngulang koleksi lan ngowahi kanthi nggunakake 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