Pengecualian Jawa lan Cara Ngatasi Iki

Minangka pangembang Java, sampeyan kudu ngerti babagan istiméwa Java lan penanganan istiméwa.

Tutorial iki nyedhiyakake kawruh dhasar sing kudu diduweni saben programmer nalika nggarap program Java. Kanggo miwiti, ayo miwiti mangertos apa sejatine Pengecualian Java.



Apa sing Disebutake Java

Program Java bisa uga nemoni masalah sing nyebabake program kasebut mandheg nalika ditindakake. Masalah kasebut diarani pangecualian.


Programmer sing apik kudu bisa ngakoni kesalahan sing bisa kedadeyan sajrone eksekusi lan menehi rute alternatif kanggo program sing kudu ditindakake yen ora ana sing dikecualian. Praktek iki diarani penanganan istiméwa.

Saiki sampeyan bisa uga kepengin ngerti kenapa kita kabeh ora butuh penanganan istiméwa. Napa ora nulis program sing ora bakal menehi pangecualian?




Napa Kita Perlu Ngatasi Eksepsi

Jebule, nulis program sing ora bakal ngetokake pangecualian ora gampang kaya swarane. Umume, kesalahan sing ora bisa dihindari iki ora ana ing kontrol programmer.



Program sing nampa input pangguna cenderung ora dikepengini amarga input sing ora valid sing diwenehake pangguna. Mangkono uga maca file eksternal ngelingi kemungkinan dheweke wis dipindhah, diganti jeneng, utawa dibusak dening sumber njaba tanpa ngerti programmer.

Ing kasus kaya ngono, program kasebut kudu bisa ngatasi pangecualian kasebut kanthi apik tanpa mandheg ditindakake.



Hierarki Pengecualian Jawa

Kabeh pengecualian ing Jawa kudu dadi bocah saka Exception kelas, sing dhewe anak saka Throwable kelas.


Rong subkelas utama Exception kelas yaiku RuntimeException lan IOException.



Kesalahan vs Kesalahan

Kelas bocah liyane saka Throwable kelas yaiku Error kelas. Nanging, kesalahan beda karo sing dikecualian.

Kesalahan nuduhake masalah sing bisa ditindakake JVM sajrone eksekusi. Masalah kasebut biasane kritis lan ora bisa diatasi maneh. Masalah kebocoran memori lan kompatibilitas perpustakaan minangka sebab umum kesalahan ing program.

StackOverflowError lan OutOfMemoryError yaiku rong conto Kesalahan Java.




Pangecualian sing dicenthang lan ora dicenthang

Kita bisa mbagi Pengecualian Jawa dadi rong kategori utama: dicenthang lan ora dicenthang pangecualian

Pangecualian sing dicenthang minangka pangecualian sing kudu ditangani ing program sadurunge disusun. Yen pangecualian kasebut ora ditangani, program kasebut ora bakal dikompilasi dening panyusun Java. Mula, iki uga diarani pangecualian wektu kompilasi. IOExceptions minangka conto sing apik saka pangecualian sing dicenthang.

Pangecualian sing ora dicenthang minangka pangecualian sing ora digatekake dening kompiler nalika nyusun program. Apa kita wis ngatasi pangecualian kasebut ing program utawa ora, ora masalah nalika program disusun. Amarga penanganan istiméwa ora dileksanakake ing pangecualian kasebut, program kita bisa mbukak RuntimeExceptions sing nyebabake mandheg program.

Kabeh kelas sing ngluwihi RuntimeException kelas minangka pangecualian sing ora dicenthang. Rong conto kelas kayata NullPointerException lan ArrayIndexOutOfBoundsException.




Cara Umum sing Digunakake ing Kelas Pangecualian

Kita bakal ngliwati sawetara cara sing umum digunakake ing Jawa Exception kelas:

  1. getMessage: ngasilake pesen sing ngemot rincian babagan pangecualian sing kedadeyan.
  2. printStackTrace: ngasilake tilas pengecualian sing kedadeyan.
  3. toString: ngasilake jeneng kelas lan pesen sing bali karo getMessage cara


Cara Ngatasi Pengecualian

Ayo goleki cara ngatasi pengecualian ing Jawa:

nyoba-nyoba

Kita bisa nyekel pangecualian lan nangani kanthi bener nggunakake a nyoba-nyoba blok ing Jawa.

Ing sintaks iki, bagean kode sing gampang mbuwang pengecualian dilebokake ing njero blok coba lan blok / blok nyekel pengecualian / pengecualian sing dibuwang lan nangani miturut logika sing diwenehake.


Sintaks dhasar blok try-catch yaiku:

try {
//exception-prone code } catch(Exception e) {
//error handling logic }

Kanthi pendekatan iki, program kasebut ora nyetop eksekusi nalika dikecualian dening program, nanging bisa ditangani kanthi anggun.

Kita bakal ndeleng cara ngatasi IOExceptions dibuwang dening FileReader kelas ing program Java.

Tuladha:

import java.io.FileReader; public class TryCatchBlockExample {
public static void main(String[] args) {

try {

FileReader file = new FileReader('source.txt');

file.read();
}
catch(Exception e) {

e.printStackTrace();
}
} }

Ing kene, kita nggunakake blok siji kanggo nangani FileNotFoundException dibuwang nalika instantiating FileReader kelas lan IOException dibuwang dening read() cara kanggo FileReader kelas.

Kaloro pengecualian kasebut yaiku anak saka Exception kelas.

Kita uga bisa nggunakake macem-macem pernyataan kanggo nyekel macem-macem jinis kesalahan sing diluncurake karo kode ing njero pernyataan coba siji. Contone sadurunge, kita bisa nggunakake siji blok kanggo nyekel FileNotFoundException lan blok tangkapan liyane kanggo IOException kaya cuplikan kode ing ngisor iki:

import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; public class TryCatchBlockExample {
public static void main(String[] args) {

try {

FileReader file = new FileReader('source.txt');

file.read();

file.close();
}
catch(FileNotFoundException e) {

e.printStackTrace();
}
catch(IOException e) {

e.printStackTrace();
}
} }

Yen pangecualian sing dibuwang cocog karo pangecualian sing ditangani dening pratelan nyekel sing pertama, banjur ditangani kanthi logika ing njero pratelan nyekel pisanan.

Yen pangecualian ora cocog, diterusake menyang pratelan nyekel sing nomer loro. Yen ana luwih saka rong pernyataan tangkapan, proses iki bakal terus nganti sing istimewane entuk pernyataan tangkapan sing bisa ditemokake.

Wiwit FileNotFoundException minangka subtipe IOException, nggunakake pratelan nyekel kaping 2 kanggo nyekel FileNotFoundException ora bakal bisa. Bakal ditangani dening pratelan nyekel sing kapisan lan ora bakal tekan pratelan kaping 2.

Cathetan:Wajib nggunakake paling ora siji pratelan nyekel kanthi pratelan nyoba.

pungkasane

Nalika nggunakake a nyoba-nyoba diblokir kanggo nyekel pengecualian ing program kita, ana conto sing pengin dileksanakake sawetara logika, sanajan ana kasunyatan manawa ana pengecualian utawa ora. Ing kasus kaya ngono, kita bisa nggunakake a coba-coba-pungkasane blok tinimbang mung a nyoba-nyoba blok

Banjur, kode ing njero finally pratelan dileksanakake apa utawa ora ana pengecualian. Sing finally pratelan kudu mesthi teka ing pungkasan blok coba-coba-pungkasane.

Contone, nalika nggunakake FileReader kanggo maca file, penting kanggo nutup file sing dibukak ing pungkasan proses apa kedadeyan sing ora ana. Kanggo mesthekake, kita bisa nyelehake kode kanggo nutup file ing njero finally pratelan

import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; public class TryCatchFinallyBlockExample {
public static void main(String[] args) {
FileReader file = null;
try {

file = new FileReader('source.txt');

file.read();
}
catch(FileNotFoundException e) {

e.printStackTrace();
}
catch(IOException e) {

e.printStackTrace();
}
finally {

file.close();
}
} }

Nanging, yen sampeyan nyoba nyusun kode ing ndhuwur, kode kasebut ora bakal dikompilake amarga kode IOException. Iki amarga close() cara kanggo FileReader kelas uga bisa mbuwang IOExceptions. Dadi, kita kudu nyelehake bagean iki ing blok coba liyane kaya iki:

import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; public class TryCatchFinallyBlockExample {
public static void main(String[] args) {
FileReader file = null;

try {

file = new FileReader('source.txt');

file.read();
}
catch(FileNotFoundException e) {

e.printStackTrace();
}
catch(IOException e) {

e.printStackTrace();
}
finally {

try {


file.close();

}

catch(IOException e) {


e.printStackTrace();

}
}
} }

mbuwang

Nangani kesalahan nggunakake throws tembung kunci ing Jawa iku gampang. Nyatane, ing pendekatan iki, sampeyan ora nate ngatasi pangecualian ing papan sing kedadeyan. Nanging, kita ngilangi pangecualian saka metode saiki menyang metode sing diarani metode saiki. Banjur, nyerahake kesalahan dadi tanggung jawab cara njaba.

Kanggo ngilangi pangecualian saka cara, sampeyan mung kudu wara-wara manawa cara iki bisa uga kalebu pangecualian. Ayo goleki carane ngatasi IOExceptions dibuwang dening FileReader kelas nggunakake pendekatan iki.

Tuladha:

import java.io.FileReader; import java.io.IOException; public class ThrowsExample {
public void readFile throws IOException {
FileReader file = new FileReader('source.txt');
file.read();
file.close();
} }

mbuwang

Beda karo pendekatan liyane ing dhaptar iki, throw tembung kunci ora digunakake kanggo nangani kesalahan. Nanging amarga umume wong bingung throw tembung kunci nganggo throws tembung kunci, kita pikir luwih becik mbahas ing kene.

Sing throw tembung kunci digunakake kanggo kanthi eksplisit njaluk pangecualian. Kita bisa mbuwang pengecualian sing nembe diwiwiti utawa pangecualian sing kejiret ing metode kasebut.

public class ThrowExample {
public void invalidate(int amount) throws Exception {
if (amount < 500) {

throw new Exception('Amount not sufficient');
}
} }


Pangecualian sing Ditemtokake dening Panganggo

Saliyane nggunakake pangecualian Java internal, sampeyan bisa netepake pangecualian dhewe. Sampeyan bisa nemtokake minangka pangecualian sing dicenthang utawa ora dicenthang. Kanggo nggawe pangecualian sing dicenthang anyar, pengecualian anyar sampeyan kudu ngluwihi Exception kelas.

Kanggo nggawe ora dikepung kajaba, ngluwihi RuntimeException kelas.

Ing conto kode ing ngisor iki, kita wis nggawe pangecualian sing wis dicenthang karo pangguna:

public class InvalidLengthException extends Exception {
private int length;
private String message;
public InvalidLengthException(int length, String message) {
this.length=length;
this.message=message;
}
public int getAmount() {
return this.length;
}
public String getMessage() {
return this.message;
} }

Saiki kita bisa nggunakake pangecualian ing ndhuwur ing logika program kaya iki:

public class InputChecker {
private int minLength;
private int maxLength;
public InputChecker(int minLength, int maxLength) {
this.minLength=minLength;
this.maxLength=maxLength;
}
public void checkStringLength(String strInput) throws InvalidLengthException {
int strLength = strInput.length();
if (strLength maxLength){

throw new InvalidLengthException(strLength, 'Input should have maximum '+maxLength+' character');
}
} }

Yen kita mriksa dawa senar nggunakake InputChecker kelas, bakal mbuwang InvalidLengthException yen dawa senar ngisor dawa minimal utawa sadhuwure dawa maksimum.

public class Main {
public static void main(String[] args) {
InputChecker ic = new InputChecker(2, 7);
try {

ic.checkStringLength('longer than the maximum length');
}
catch(InvalidLengthException e) {

e.printStackTrace();
}
} }

Yen mbukak potongan kode ing ndhuwur, bakal menehi InvalidLengthException lan kita bakal oleh output ing ngisor iki:

InvalidLengthException: Input should have maximum 7 character
at InputChecker.checkStringLength(InputChecker.java:17)
at Main.main(Main.java:6)


Kesimpulan

Ing tutorial iki, sampeyan menehi pitakon babagan Eksepsi Jawa sing cepet lan ringkes. Muga-muga sampeyan saiki duwe pangerten sing apik babagan apa sing dikecualian lan cara ngatasi program Java sampeyan.