Pangecualian utawa kahanan sing luar biasa (negara) yaiku kesalahan sing kedadeyan ing program sajrone operasi. Kabeh pangecualian ing Jawa minangka obyek. Mulane, bisa digawe ora mung kanthi otomatis nalika ana kahanan sing luar biasa, nanging uga digawe dening pangembang dhewe. Hierarki kelas pangecualian: Pengecualian dipérang dadi sawetara kelas, nanging kabeh duwe leluhur sing padha - kelas
Throwable
. Turunane yaiku subkelas Exception
lan Error
. Pengecualian ( Exceptions
) minangka asil saka masalah ing program sing, ing prinsip, bisa dipecahake lan bisa diprediksi. Contone, divisi dening nol dumadi ing integer. Kesalahan ( Errors
) masalah luwih serius sing specification Jawa nyatakake yen sampeyan ora kudu nyoba kanggo nangani ing program dhewe amarga iku masalah JVM-tingkat. Contone, pangecualian saka jinis iki kedadeyan yen memori sing kasedhiya kanggo mesin virtual wis entek. Program kasebut isih ora bisa menehi memori tambahan kanggo JVM. Ing Jawa, kabeh pangecualian dipérang dadi telung jinis: pangecualian sing dicenthang ( checked
) lan pangecualian sing ora dicenthang ( unchecked
) kang kalebu kasalahan ( Errors
) lan pangecualian run-time ( RuntimeExceptions
turunan kelas Exception
). Pangecualian sing dikontrol minangka kasalahan sing bisa lan kudu ditangani ing program; kabeh turunan saka kelas Exception
(nanging ora RuntimeException
) kalebu jinis iki. Penanganan pangecualian bisa ditindakake kanthi nggunakake operator try…catch
utawa ditransfer menyang bagean njaba program. Contone, cara bisa ngliwati pangecualian sing dumadi ing luwih dhuwur ing hirarki telpon tanpa nangani dhewe. Pangecualian sing ora dicenthang ora mbutuhake penanganan, nanging sampeyan bisa nangani pengecualian kelas yen sampeyan pengin RuntimeException
. Ayo ngumpulake lan mbukak program ing ngisor iki:
class Main {
public static void main(String[] args) {
int a = 4;
System.out.println(a/0);
}
}
Nalika diluncurake, pesen ing ngisor iki bakal ditampilake ing console:
Exception in thread "main" java.lang.ArithmeticException: / by zero
at Main.main(Main.java:4)
Pesen nuduhake kelas pangecualian sing dumadi - ArithmeticException
. Pangecualian iki bisa ditangani:
class Main {
public static void main(String[] args) {
int a = 4;
try {
System.out.println(a/0);
} catch (ArithmeticException e) {
System.out.println("Произошла недопустимая арифметическая операция");
}
}
}
Saiki, tinimbang pesen kesalahan standar, blok bakal dieksekusi catch
, parameter kasebut minangka obyek e saka kelas sing cocog karo pangecualian (obyek kasebut bisa diwenehi jeneng apa wae, bakal dibutuhake yen kita pengin mbuwang kanthi kuat. istiméwa iki maneh, contone, supaya dicenthang sawetara handler liyane). Ing kasus iki, pamblokiran try
ngemot fragmen program ing ngendi pangecualian bisa kedadeyan. Siji try
bisa cocog karo sawetara pamblokiran nyekel karo kelas pangecualian beda.
import java.util.Scanner;
class Main {
public static void main(String[] args) {
int[] m = {-1,0,1};
Scanner sc = new Scanner(System.in);
try {
int a = sc.nextInt();
m[a] = 4/a;
System.out.println(m[a]);
} catch (ArithmeticException e) {
System.out.println("Произошла недопустимая арифметическая операция");
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("Обращение по недопустимому индексу массива");
}
}
}
Yen, sawise ngluncurake program sing ditampilake, pangguna mlebu saka keyboard 1 utawa 2, program kasebut bakal mbukak tanpa nggawe pangecualian. Yen pangguna ngetik 0, pangecualian saka kelas bakal kedadeyan ArithmeticException
lan bakal ditangani dening blok pertama catch
. Yen pangguna mlebu 3, pangecualian kelas bakal kedadeyan ArrayIndexOutOfBoundsException
(susun metu saka wates), lan bakal diproses dening blok kapindho catch
. Yen pangguna ngetik nomer non-integer, contone, 3.14, pangecualian kelas bakal kelakon InputMismatchException
(jinis input mismatch), lan bakal di buwang ing format kesalahan standar, awit kita ora nangani ing sembarang cara. Sampeyan bisa, Nanging, nambah handler kanggo kelas Exception
, wiwit kelas iki kelas induk kanggo kabeh pangecualian dicenthang liyane, bakal nyekel samubarang mau (kalebu InputMismatchException
).
import java.util.Scanner;
class Main {
public static void main(String[] args) {
int[] m = {-1,0,1};
int a = 1;
Scanner sc = new Scanner(System.in);
try {
a = sc.nextInt();
m[a-1] = 4/a;
System.out.println(m[a]);
} catch (ArithmeticException e) {
System.out.println("Произошла недопустимая арифметическая операция");
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("Обращение по недопустимому индексу массива");
} catch (Exception e) {
System.out.println("Произошло ещё Howое-то исключение");
}
}
}
Wiwit pengecualian dibangun ing hirarki kelas lan subkelas, sampeyan kudu nyoba nangani pengecualian sing luwih spesifik lan mung sing luwih umum. Yaiku, yen kita nyelehake blok kasebut kanthi nangani pangecualian kelas dhisik (lan ora katelu) Exception
, kita ora bakal bisa ndeleng pesen kesalahan liyane saka "Sawetara pangecualian liyane wis kedadeyan" (kabeh pangecualian bakal langsung kejiret dening blok iki lan ora bakal tekan ngaso). Tambahan opsional kanggo pamblokiran try…catch
bisa dadi pamblokiran finally
. Printah sing diselehake ing bakal kaleksanan ing kasus apa wae, preduli saka pangecualian ana utawa ora. Sanajan kasunyatane yen ana pangecualian sing ora ditangani, bagean saka program sing isih ana sawise nggawe pengecualian iki ora dieksekusi. Contone, yen ana pangecualian sajrone sawetara petungan sing dawa, finally
sampeyan bisa nuduhake utawa nyimpen asil penengah ing blok. Link menyang sumber: Pangecualian lan penanganan
GO TO FULL VERSION