1. Jinis pangecualian
Kabeh pangecualian dipérang dadi 4 jinis, yaiku kelas sing saling marisi.
Throwable
kelas
Kelas dhasar kanggo kabeh pengecualian yaiku Throwable
kelas. Kelas Throwable
ngemot kode sing nulis tumpukan telpon saiki (tumpukan tilak saka cara saiki) kanggo Uploaded. Kita bakal sinau apa tilak tumpukan sethitik mengko.
Operator uncalan mung bisa nampa obyek sing asalé saka Throwable
kelas. Lan sanajan sampeyan bisa nulis kode kanthi teoritis kaya throw new Throwable();
, biasane ora ana sing nindakake iki. Tujuan utama kelas Throwable
yaiku duwe kelas induk tunggal kanggo kabeh pengecualian.
Error
kelas
Kelas pangecualian sabanjure yaiku Error
kelas, sing langsung marisi Throwable
kelas kasebut. Mesin Java nggawe obyek saka Error
kelas (lan turunane) nalika ana masalah serius . Contone, malfunction hardware, memori ora cukup, etc.
Biasane, minangka programmer, sampeyan ora bisa nindakake apa-apa ing kahanan sing ana kesalahan (jenis sing Error
kudu dibuwang) ing program: kesalahan kasebut serius banget. Sampeyan mung bisa menehi kabar marang pangguna yen program nabrak lan / utawa nulis kabeh informasi sing dikenal babagan kesalahan kasebut menyang log program.
Exception
kelas
Kelas Exception
lan RuntimeException
kanggo kesalahan umum sing kedadeyan ing operasi akeh metode. Sasaran saben pangecualian sing dibuwang yaiku kejiret blok catch
sing ngerti cara nangani kanthi bener.
Nalika cara ora bisa ngrampungake karya kanggo sawetara alesan, iku kudu langsung ngabari cara nelpon dening mbuwang pangecualian saka jinis cocok.
Ing tembung liyane, yen variabel padha karo null
, cara bakal uncalan a NullPointerException
. Yen argumen sing salah diterusake menyang metode kasebut, bakal mbuwang InvalidArgumentException
. Yen cara sengaja dibagi dening nul, iku bakal uncalan ArithmeticException
.
RuntimeException
kelas
RuntimeExceptions
minangka subset saka Exceptions
. Kita malah bisa ngomong sing RuntimeException
versi entheng saka pangecualian biasa ( Exception
) — luwih sithik syarat lan watesan sing dileksanakake kanggo pangecualian kasebut
Sampeyan bakal sinau beda antarane Exception
lan RuntimeException
mengko.
2.: Throws
dicenthang pangecualian
Kabeh pangecualian Jawa kalebu 2 kategori: dicenthang lan ora dicenthang .
Kabeh pangecualian sing marisi RuntimeException
utawa Error
dianggep minangka pangecualian sing ora dicenthang . Kabeh liyane wis dicenthang pangecualian .
Rong puluh taun sawisé dicenthang pangecualian, meh saben programer Jawa nganggep iki minangka bug. Ing kerangka modern sing populer, 95% kabeh pangecualian ora dicenthang. Basa C#, sing meh nyalin Jawa persis, ora nambah pangecualian sing dicenthang .
Apa prabédan utama antarane pangecualian sing dicenthang lan sing ora dicenthang ?
Ana syarat tambahan sing ditrapake kanggo pengecualian sing dicenthang . Secara kasar, yaiku:
Syarat 1
Yen cara mbuwang pangecualian sing dicenthang , kudu nuduhake jinis pangecualian ing tandhane . Mangkono, saben cara sing nyebutake ngerti manawa "pengecualian sing migunani" iki bisa kedadeyan.
Nuduhake pangecualian sing dicenthang sawise paramèter metode sawise throws
tembung kunci (aja throw
salah nggunakake tembung kunci). Iku katon kaya iki:
type method (parameters) throws exception
Tuladha:
dicenthang pangecualian | pangecualian sing ora dicenthang |
---|---|
|
|
Ing conto ing sisih tengen, kode kita mbuwang pengecualian sing ora dicenthang - ora ana tindakan tambahan sing dibutuhake. Ing conto ing sisih kiwa, metode kasebut mbuwang pengecualian sing wis dicenthang , mula throws
tembung kunci ditambahake menyang tandha metode bebarengan karo jinis pengecualian kasebut.
Yen cara ngarepake mbuwang pirang-pirang pangecualian sing dicenthang , kabeh kasebut kudu ditemtokake sawise throws
tembung kunci, dipisahake karo koma. Urutan ora penting. Tuladha:
public void calculate(int n) throws Exception, IOException
{
if (n == 0)
throw new Exception("n is null!");
if (n == 1)
throw new IOException("n is 1");
}
Syarat 2
Yen sampeyan nelpon cara sing wis dicenthang pangecualian ing teken, sampeyan ora bisa nglirwakake kasunyatan sing mbalang wong.
Sampeyan kudu nyekel kabeh pangecualian kasebut kanthi nambahake catch
blok kanggo saben siji, utawa nambahake menyang throws
klausa kanggo metode sampeyan.
Kaya-kaya kita ngomong, " Istiméwa iki penting banget supaya kita kudu nyekel wong-wong mau. Lan yen kita ora ngerti carane nangani, banjur sapa wae sing nelpon cara kita kudu diwenehi kabar yen pengecualian kasebut bisa kedadeyan.
Tuladha:
Bayangake yen kita nulis cara kanggo nggawe jagad sing diisi manungsa. Nomer awal wong diterusake minangka argumentasi. Dadi kita kudu nambah pangecualian yen ana sawetara wong.
Nggawe Bumi | Cathetan |
---|---|
|
Cara kasebut bisa nggawe rong pengecualian sing dicenthang :
|
Telpon metode iki bisa ditangani kanthi 3 cara:
1. Aja nyekel sembarang istiméwa
Iki paling asring ditindakake nalika metode kasebut ora ngerti cara nangani kahanan kasebut kanthi bener.
Kode | Cathetan |
---|---|
|
Cara nelpon ora nyekel pangecualian lan kudu menehi informasi marang wong liya babagan iki: nambahake menyang throws klausa dhewe |
2. Nyekel sawetara pangecualian
Kita nangani kesalahan sing bisa ditangani. Nanging sing kita ora ngerti, kita uncalan menyang cara nelpon. Kanggo nindakake iki, kita kudu nambah jenenge menyang klausa throws:
Kode | Cathetan |
---|---|
|
Panelpon nyekel mung siji pangecualian dicenthangLonelyWorldException - . Pangecualian liyane kudu ditambahake menyang teken, nuduhake sawise throws tembung kunci |
3. Nyekel kabeh istiméwa
Yen cara ora mbuwang pangecualian kanggo cara nelpon, banjur cara nelpon tansah manteb ing ati sing kabeh bisa uga. Lan ora bakal bisa tumindak kanggo ndandani kahanan sing luar biasa.
Kode | Cathetan |
---|---|
|
Kabeh pangecualian kejiret ing cara iki. Sing nelpon bakal manteb ing ati yen kabeh wis apik. |
3. Pengecualian bungkus
Pangecualian sing dicenthang katon keren ing teori, nanging dadi frustasi gedhe ing praktik.
Upaminipun sampeyan duwe cara super populer ing project. Disebut saka atusan panggonan ing program sampeyan. Lan sampeyan mutusake kanggo nambah pangecualian sing dicenthang anyar . Lan bisa uga yen pangecualian sing dicenthang iki pancen penting lan khusus, mung main()
cara sing ngerti apa sing kudu ditindakake yen kejiret.
Tegese sampeyan kudu nambahake pangecualian sing dicenthang menyang throws
klausa saben metode sing nyebutake metode sing paling populer sampeyan . Uga ing throws
klausa saka kabeh cara sing nyebut metode kasebut. Lan cara-cara sing diarani metode kasebut.
Akibaté, throws
klausa setengah saka metode ing proyek entuk pangecualian sing dicenthang anyar . Lan mesthi proyek sampeyan ditutupi tes, lan saiki tes kasebut ora dikompilasi. Lan saiki sampeyan kudu ngowahi klausa mbuwang ing tes sampeyan uga.
Banjur kabeh kode sampeyan (kabeh owah-owahan ing atusan file) kudu dideleng dening programer liyane. Lan ing wektu iki, kita takon dhewe kenapa kita nggawe akeh owah-owahan getih ing proyek kasebut? Dina (s?) Kerja, lan tes sing rusak - kabeh kanggo nambah siji pengecualian sing dicenthang ?
Lan mesthi, isih ana masalah sing ana gandhengane karo warisan lan overriding metode. Masalah sing teka saka pangecualian sing dicenthang luwih gedhe tinimbang entuk manfaat. Ing ngisor iki yaiku saiki sawetara wong sing tresna lan sawetara wong sing nggunakake.
Nanging isih akeh kode (kalebu kode perpustakaan Jawa standar) sing ngemot pangecualian sing dicenthang iki . Apa sing kudu dilakoni karo wong-wong mau? Kita ora bisa nglirwakake, lan kita ora ngerti carane nangani.
programer Java ngajokaken kanggo mbungkus pengecualian dicenthang ing RuntimeException
. Ing tembung liyane, nyekel kabeh pangecualian sing dicenthang banjur nggawe pangecualian sing ora dicenthang (contone, RuntimeException
) lan uncalan. Nindakake sing katon kaya iki:
try
{
// Code where a checked exception might occur
}
catch(Exception exp)
{
throw new RuntimeException(exp);
}
Iku ora solusi banget cantik, nanging ora ana pidana kene: pangecualian mung diiseni nang a RuntimeException
.
Yen dikarepake, sampeyan bisa kanthi gampang njupuk saka ing kono. Tuladha:
Kode | Cathetan |
---|---|
|
Entuk pangecualian sing disimpen ing njero RuntimeException obyek. Variabel kasebut cause bisa null Nemtokake jinis lan ngowahi dadi jinis pangecualian sing dicenthang . |
4. Nyekel kaping istiméwa
Programer tenan sengit kanggo duplikat kode. Malah padha teka karo prinsip pembangunan sing cocog: Aja Ulangi Dhewe (GARING) . Nanging nalika nangani pangecualian, asring ana try
sawetara pamblokiran catch
kanthi kode sing padha.
Utawa bisa uga ana 3 catch
blok kanthi kode sing padha lan 2 catch
blok liyane kanthi kode sing padha. Iki minangka kahanan standar nalika proyek sampeyan nangani pengecualian kanthi tanggung jawab.
Diwiwiti karo versi 7, ing basa Jawa nambahake kemampuan kanggo nemtokake macem-macem jinis pengecualian ing catch
blok siji. Iku katon kaya iki:
try
{
// Code where an exception might occur
}
catch (ExceptionType1 | ExceptionType2 | ExceptionType3 name)
{
// Exception handling code
}
Sampeyan bisa duwe minangka akeh catch
pamblokiran sing pengin. Nanging, blok siji catch
ora bisa nemtokake pangecualian sing bisa marisi siji liyane. Ing tembung liyane, sampeyan ora bisa nulis catch ( Exception
| RuntimeException
e), amarga RuntimeException
kelas warisan Exception
.
5. pangecualian Custom
Sampeyan bisa tansah nggawe kelas pangecualian dhewe. Sampeyan mung nggawe kelas sing marisi RuntimeException
kelas kasebut. Bakal katon kaya iki:
class ClassName extends RuntimeException
{
}
Kita bakal ngrembug rincian nalika sampeyan sinau OOP, warisan, konstruktor, lan metode overriding.
Nanging, sanajan sampeyan mung duwe kelas prasaja kaya iki (tanpa kode), sampeyan isih bisa mbuwang pengecualian adhedhasar:
Kode | Cathetan |
---|---|
|
Uncalan sing ora dicenthang MyException . |
Ing quest Java Multithreading , kita bakal nyilem jero kanggo nggarap pengecualian khusus kita dhewe.
GO TO FULL VERSION