JavaRush /Blog Jawa /Random-JV /Kesalahan umum ing penanganan pangecualian
Ve4niY
tingkat

Kesalahan umum ing penanganan pangecualian

Diterbitake ing grup
Pangecualian yaiku gangguan ing aliran normal eksekusi program Jawa (utawa liyane). Pelanggaran iki bisa kedadeyan amarga pelanggaran akses memori, divisi kanthi nol, masalah initialization, eksekusi instruksi ilegal, utawa kesalahan fatal liyane. Jawa bisa nangani kabeh skenario sing ora dikarepake kanthi anggun, nanging nalika nggunakake fitur Jawa iki dening pangembang, sawetara masalah bisa uga muncul. Ing artikel iki, aku ora bakal ngrembug babagan cara Penanganan Pengecualian ing Jawa. Aku nganggep manawa sing maca wis kenal karo hirarki pangecualian, pangecualian sing dicenthang , pangecualian sing ora dicenthang , lan pangecualian runtime . Ing kene kita bakal ngrembug kesalahan sing paling umum sing kudu dihindari.
Stakeholders ing Pengecualian
Nalika thread eksekusi diselani, informasi babagan iku kudu bali menyang pelaksana program. Utas iki bisa diwiwiti saka layar, saka tugas kumpulan, utawa kanthi cara liya. Kabeh pemicu iki ngenteni sawetara jinis pelanggaran ing aliran ngirim pesen saka format tartamtu. Pemicu adhedhasar layar bisa menehi kabar manawa ana sawetara masalah teknis lan kita kudu ngubungi dhukungan kanggo pitulung lan saran. Proses batch utawa program Java mandiri bisa uga ngarepake laporan kesalahan bakal katon ing sawetara jinis log sing ora bisa dingerteni pangguna pungkasan. Nanging wong bisnis kudu nampa pesen ing basa sing dingerteni. NullPointerException sing nggegirisi ing pikirane pangguna banget ngganggu. Kadhangkala kesalahan kasebut minangka akibat saka panggunaan program sing ora bener, nanging kadhangkala ana masalah sing mbutuhake koreksi. Pemangku kepentingan nomer loro yaiku wong sing kudu ngatasi masalah sing ditimbulake kanthi pengecualian. Wong iki ora bisa mirsani eksekusi nyata program nalika ana pangecualian. Bakal gumantung ing rong perkara - pisanan, informasi sing diwenehake dening pangguna sing ngalami masalah, lan liya, sawetara jinis log sing digawe nalika ana pangecualian. Kajaba iku, wong sing bakal nganalisa masalah kasebut ora padha karo sing nulis program kasebut, mula pangembang program kudu menehi informasi sing cukup kanggo analisis. Siji-sijine cara komunikasi antarane pangembang program lan debugger yaiku log. Uga, kadhangkala amarga alasan keamanan, log log kadhangkala ora ngemot kabeh rincian nyata saka eksekusi program nalika ana pengecualian. Ayo goleki kesalahan sing bisa ditindakake nalika nangani pangecualian. Sawetara wong katon cukup bodho, nanging ana wong. sing ora nggatekake nganti kesalahan kasebut nyebabake masalah.
Blok pangecualian kosong
Iki minangka salah sawijining kesalahan sing paling ora dikarepake nalika nangani pangecualian. Ing kasus iki, pangecualian mung diabaikan. Solusi kasebut ora ngemot apa-apa nanging baris komentar kanggo ninggalake pangecualian. try{ }catch(SQLException sqe){ // do nothing } Ing sawetara kasus langka, kayata ing pamblokiran final nalika database ditutup, pangecualian bisa dibuwang. Ing kasus iki padha bisa digatèkaké. try{ }catch(SQLException sqe){ ... ... }finally{ try{ conn.close(); }catch(Exception e){ //leave it. } }
Generalisasi pesen pengecualian sing salah
Titik iki subyektif. Sawise nyekel pangecualian, sampeyan bisa nglaporake menyang pangguna pungkasan kanthi pesen sing ramah. Bisa uga rincian pesen asli bakal ilang nalika pesen asli diowahi dadi siji pesen umum. Pesen kudu ngirim informasi sing tepat kanggo pangguna pungkasan supaya nalika ngubungi tim dhukungan, pangguna mung kudu mlebu log sing cocog kanggo menehi informasi kasebut. try{ File file = new File(""); file.getCanonicalPath(); }catch(IOException ioe){ throw new Exception("File Processing Failed",ioe); } Ing aplikasi multi-tier, saben lapisan nyekel pangecualian lan mbuwang jinis pangecualian anyar. Kadhangkala pancen perlu kanggo nggawe pengecualian saka jinis tartamtu: - Lapisan Akses Data -> nggawe DataAccessException - Lapisan Implementasi Bisnis -> nggawe BusinessException - Lapisan Layanan Aplikasi -> nggawe ApplicationServiceException Kabeh katon logis, apa ora? Ing kene kita kudu milih antarane ApplicationServiceException lan BusinessException amarga loro-lorone bisa makili informasi sing padha. Salah siji saka konversi istiméwa iki katon ora perlu.
Ngancurake kelas StackTrace
Sajrone proses ngowahi pangecualian dadi jinis khusus sing anyar, jejak tumpukan bisa ilang, nggawe nelusuri panyebab pangecualian kasebut dadi ngipi elek. Ing kode ing ngisor iki sampeyan bisa ndeleng carane pangecualian anyar dibuwang tanpa nampa informasi saka istiméwa asli. try{ File file = new File(""); file.getCanonicalPath(); }catch(IOException ioe){ throw new MyException("Problem in data reading."); }
Nimpa alesan pangecualian
Saben pesen pangecualian ngemot informasi babagan alesan pengecualian kasebut. Nanging, nalika pangecualian anyar digawe, informasi babagan sing lawas bisa uga dibusak kanthi permanen. Iki padha karo conto ing ndhuwur ngendi StackTrace bisa dibusak amarga pangecualian anyar sing dibuwang.
Ora nggoleki pangecualian khusus
Kadhangkala pangembang seneng main kanthi aman nalika nangani pengecualian. Kadhangkala iki gampang ditindakake. Nanging nyekel java.lang.Exception tinimbang pangecualian tartamtu ora ditrima. try{ File file = new File(""); file.getCanonicalPath(); }catch(Exception exe){ throw new MyException("Problem in data reading."); }
Nyekel lan mbuwang sing ora perlu
Nyekel pangecualian yen sampeyan pengin ngowahi menyang jinis liyane, utawa yen mbantu sampeyan nambah sawetara informasi kanggo pesen pangecualian kanggo pangguna pungkasan utawa Analyst. Yen ora, mung uncalan adoh ing teken cara (nggunakake uncalan) tinimbang nyekel.
Njupuk RuntimeException
Aku nyaranake supaya ora nyekel RuntimeException. Nanging, luwih becik nyekel pengecualian khusus lan nambani.
Nemokake pangecualian sing ora dicenthang
Iki minangka topik sing kontroversial manawa bakal nyekel pengecualian sing ora dicenthang utawa ora. NullPointerException lan ArrayIndexOutOfBound bisa dadi conto paling apik kanggo pengecualian sing ora dicenthang. Tinimbang nyekel pangecualian kasebut, sampeyan bisa ngganti kode kanggo nangani skenario kasebut. Contone, kanggo ngindhari NullPointerException, kanggo mesthekake yen kabeh variabel diinisialisasi, kanggo ngindhari pangecualian ArrayIndexOutOfBound, kanggo nemtokake array kanthi dawa sing bener, lsp.
Masalah sing ana gandhengane karo logging pengecualian
Majalah kasebut bakal mbantu wong liya sing minat, yaiku, wong sing nganalisis masalah kasebut. Kadhangkala pangembang ngluwihi file log lan log digawe ing saben level aplikasi. Log kudu ngrekam pangecualian ing tingkat sing kedadeyan. Iku misale jek optimal kanggo nampilake bebaya yen ana pangecualian, kanthi proposal kanggo mungkasi utawa nerusake eksekusi program kasebut, lan logging wajib saka pangecualian ing log.
Pangecualian kontrol aliran
Pangecualian yaiku gangguan ing aliran normal program, tegese sampeyan kudu ngganggu aliran iki lan ngandhani pangguna pungkasan babagan iki. Yen kita nambah telpon cara sing thread alternatif, iku bakal mimpin kanggo masalah pangopènan ageng. try{ myObject.getValue(); }catch(NullPointerException npe){ alternateMethod(); }
Panggunaan java.lang.Exception ing ngendi wae
Sampeyan uga ora apike nggunakake java.lang.Exception nang endi wae kanggo pangecualian. Nanging, luwih becik nggunakake pangecualian khusus aplikasi, utawa pangecualian Java standar sing paling cocog. Artikel asli: Kesalahan Umum ing Penanganan Pengecualian Diterjemahake lan disuarakake dening: Ve4niY
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION