JavaRush /Blog Jawa /Random-JV /Pangecualian ing Jawa
Roman
tingkat

Pangecualian ing Jawa

Diterbitake ing grup
Nalika aku nemokake topik "Pengecualian", akeh pitakonan sing kudu dakgoleki ing macem-macem sudhut Internet supaya bisa ngerti kanthi rinci babagan cara kerjane. Akibaté, aku wis nyusun panjelasanku dhewe, sing bisa uga bisa dingerteni kanggo para pemula sing nembe nemoni fenomena iki. Pangecualian ing Jawa - 1Ing komputer, interupsi minangka sinyal sing mlebu menyang prosesor yen ana kedadeyan sing mbutuhake respon langsung. Sinyal interupsi mbutuhake prosesor ngaso program sing mlaku supaya bisa diterusake mengko, yaiku, komputer kudu ngelingi kabeh informasi sing ana gandhengane karo eksekusi program kasebut. Gangguan kasebut mung sementara, yen ora nyebabake fatal. Gangguan kasebut bisa disebabake dening kode program utawa sawetara fungsi hardware (contone, mung mencet tombol ing keyboard; timer, contone, kanggo mateni komputer kanthi otomatis). Jumlah Interrupts diwatesi kanggo nomer tartamtu, dibangun ing produksi prosesor tartamtu, yaiku, komunikasi khusus "saluran" diparengake kanggo iki, ngijini sampeyan kanggo ngakses prosesor liwat kabeh pangolahan liyane. Interrupts uga kanthi otomatis nalika ana kesalahan ing kode program eksekusi (contone, yen divisi dening nul ana). Interupsi kasebut kanthi tradisional diarani jebakan utawa pengecualian . Ing kasus kaya mengkono, biasane ngomong: "Pengecualian dibuwang," yaiku, Pangecualian dipicu utawa Pangecualian dibuwang (dibuwang), yaiku, panjaluk Interupsi.karo pitakonan "apa sing kudu ditindakake?" dikirim menyang prosesor. Ing wayahe, prosesor mandheg apa, ngelingi titik ing kang mandheg, utawa rodo kluster saka sel sabanjuré, informasi saka kang kudu kaleksanan. Kabeh chain instruksi sing dieksekusi lan ora dieksekusi dieling-eling. Sawise iku, prosesor maca instruksi saka memori kanggo tumindak yen ana kesalahan kasebut. Sesuai karo pandhuan iki, bisa nglebokake nilai-nilai anyar menyang klompok tartamtu, nambah sawetara rantai tumindak utawa siklus anyar (contone, siklus bali utawa looping), lan liya-liyane, yaiku, gumantung saka kesalahan sing wis dilebokake sadurunge. instruksi mudhun dileksanakake. Sistem komputer dhewe wis akeh Interrupts otomatis dibangun menyang, kang micu sawise wektu tartamtu, contone, kanggo ngontrol pangolahan mlaku ing komputer utawa mbukak nyetel weker, ngumpulake sinyal external mlebu, lan macem-macem ngowahi data. Iku worth ngelengke sing nomer akeh Interrupts, kanggo sawetara alasan, bisa rampung "nyumerepi" sistem. Kesalahan ing kode program bakal kanthi otomatis nyebabake gangguan ing prosesor, sing bakal nyoba diproses sesuai karo instruksi sing wis ditemtokake. Nanging ora kabeh interrupts dirancang kanggo nangani, utawa bisa gawé prosedur sing ora cocog karo kita, contone, iku mung bakal nabrak aplikasi. Mulane, ing pemrograman, sampeyan bisa ngatur interupsi dhewe kanggo bagean kode tartamtu ing ngendi programmer bisa ndeleng kemungkinan kesalahan. Ing kasus iki, kesalahan bakal diproses ing program lan ora bakal ngontak prosesor kanggo instruksi pangolahan. Definisi pamblokiran kasebut diatur kanthi nggawe Obyek "Pengecualian" . Objek iki digawe kanthi otomatis ing blok kasebut try-catch. Blok kasebut >trydicenthang manawa ana kesalahan lan, yen ana, program kasebut menyang blok catch, ing ngendi tumindak ditindakake kanggo nyegah utawa level kesalahan. Contone, yen kita ngetik Nomer saka keyboard , sing kudu ditambahake lan dikurangi, banjur ngetik Huruf saka keyboard bakal ora bisa ditambahake karo Nomer (ayo ndudohke jumlah rong variabel kasebut kanthi huruf S). Mulane, minangka tim, trykita kudu mriksa apa nomer A, ngemot Nomer, bisa ditambahake menyang nomer B, ngemot Huruf (yaiku, S = A + B), lan yen iki ora bisa, lan ora mungkin, banjur tartamtu. ngukur kudu dijupuk supaya Kasalahan Ora kelakon lan Interrupt anyar karo pitakonan "apa apa?"Ora mabur menyang prosesor. Yen ora ana Pengecualian ing program kasebut, eksekusi kasebut bakal diselani dening prosesor. Yen ana Pangecualian, nalika "kejiret" dening printah try, kontrol liwat printah catch, kang bisa nyetel solusi alternatif, contone, kita ora bakal nambah nomer loro iki, nanging nyetel S = A.
int a = 4;
String b = “hello”;
int S = 0;
 try {
   S = a + b;
   int r = 1;
 } catch (Exception igogo1) {
   S = a;
 }
 return S;
/* string “int r = 1;” ora dieksekusi amarga ana kesalahan lan program pangalihan bisa langsung menyang pawang pangecualian (pemblokiran nyekel * / Mangkono, ngarsane Exceptions minangka kesempatan kanggo ngatasi masalah ing program tanpa mbuwang ing tingkat prosesor. Objek "Pengecualian", sing digawe kanthi otomatis ing blok trynalika kesalahan dideteksi, ngemot nilai jinis kesalahan. Ayo diarani "OurException" - kanggo kasus tartamtu kanthi katrangan babagan kesalahan tartamtu. Pencipta basa Jawa nggawe dhaptar kasalahan khas lan pilihan khas kanggo mbenerake, yaiku, ing Jawa ana perpustakaan Pengecualian tartamtu , sing bisa diuripake kanggo ngatasi kesalahan sing kedadeyan, supaya ora kanggo nulis kode Processing dhewe lan mulane OurException paling kamungkinan wis ana wong wis diterangake, supaya kita mung kudu ngerti jeneng kang saka pangecualian iki kanggo masang menyang program kita kanggo nangani kode ngendi Gagal bisa kelakon. Yen kita nggawe kesalahan lan milih Pengecualian sing salah saka perpustakaan , banjur pawang ora bakal "nyekel", kesalahan ora bakal nemokake solusi ing program kasebut lan panjaluk kasebut bakal dikirim menyang prosesor. Nanging ana cara kanggo wong kesed. Yen kita ora ngerti jeneng pangecualian sing dibutuhake saka perpustakaan, mula kita bisa njupuk sing umum kanthi jeneng " Pengecualian ", kaya ing conto kasebut ing ndhuwur. Pengecualian iki bisa nangani kesalahan apa wae, nanging ora bisa menehi informasi khusus babagan kedadeyan sing bisa kita log. Pustaka Pangecualian sing wis ditulis sadurunge kalebu Pengecualian sing wis dicenthang lan ora dicenthang . Sing bisa dicenthang yaiku sing bisa didandani tanpa ngganggu karya program kasebut, yaiku, yen kita nyoba mbukak file ing folder sing ora ana, sistem bakal menehi informasi babagan iki, kita bisa nyelehake file kasebut. menyang folder sing dikarepake lan terusake program kasebut. Sing, nyatane, panjalukan kanggo Interrupt dikirim menyang prosesor , nanging tanpa pitakonan: "goleki apa sing kudu ditindakake babagan masalah iki?!?!" Kita ngirim Interrupt, sing dideteksi dhewe, kanthi instruksi sing wis siap, sing diproses prosesor lan terus nglakokake program kasebut. Ora dicenthang yaiku kesalahan sing ora bisa didandani lan program bakal ditutup sadurunge rampung, yaiku, panjaluk Interrupt bakal dikirim menyang prosesor, sing ing kasus apa wae bakal ngganggu eksekusi program kasebut. Siji-sijine titik kanggo nulis pangecualian kasebut ing program kasebut yaiku supaya pangguna ngerti apa sing kedadeyan, amarga, sawise ngalami gangguan iki, kita bisa nampilake pesen informasi ing layar amarga program kasebut nabrak. Alesan liya kanggo nyekel gangguan kasebut yaiku kemampuan kanggo ngrekam ing log kanggo analisis sabanjure (sampeyan disusupi, nanging paling ora sampeyan ngerti ing ngendi). Konsekuensi saka anane perpustakaan kasebut yaiku kudu dieling-eling kanggo nyakup. (Dhaptar Pangecualian sing dicenthang lan ora dicenthang karo perpustakaan bisa ditemokake, contone, ing kene ) Yen kita ora ngerti persis perpustakaan sing kudu dilebokake utawa ana sawetara pilihan kesalahan, mula kita bisa catchdhaptar Pangecualian sing dibutuhake ing sawetara. Sistem kasebut dhewe bakal milih pawang sing bener yen ana ing dhaptar. Tinimbang Pengecualian tartamtu, sampeyan bisa nulis " Pengecualian " umum sing bisa nangani jinis Pengecualian yen ora diproses ing blok sadurunge.
int a = 4;
String b = “hello”;
int S = 0;
 try {
   S = a + b;
   int r = 1;
 }
catch(NullPointerException blabla2) {
   System.out.println("Exception handling code for the NullPointerException.");
 }
catch (ArithmeticException ex1) {
   S = a;
 }
catch(Exception uups1) {
   System.out.println("Exception occured");
 }
 return S;
Yen ana pamblokiran, tryPangecualian digawe kanthi otomatis. Yen kita kudu meksa Exception ing sawetara titik ing wektu , banjur printah digunakake throw. Yaiku, kita nggawe obyek kanthi mandiri new throw... sawise iku, program mandheg kerjane, ngirim panjaluk Interrupt menyang prosesor lan ditransfer menyang bagean program catch, saka ngendi dheweke nyoba njaluk instruksi kanggo tumindak luwih lanjut. Kanthi nggawe Exception kanthi manual , kita bisa nemtokake jinis tartamtu saka perpustakaan:

throw new ArithmeticException("Access denied - You must be at least 18 years old.");
banjur pawang bakal nggoleki blok karo Pengecualiancatch tartamtu - telusuran ing saindhenging program, ing kabeh sisi . Sawise printah penanganan Exception, kabeh kode program sing isih ana ora bakal dieksekusi, kajaba sing ana ing blok kasebut . Yen pawang ora ditemokake ing program kasebut, prosesor dijaluk pitakonan: "mutusake dhewe apa sing kudu ditindakake" lan ngganggu program kasebut. Telpon ... bisa digawe ing njero lan njaba blok (ing endi wae ing program) catchthrowcatchnew throw>try
try {
   /* функция or действие, в котором есть сомнения. То есть: «попробуй выполнить это, а если не получится, а, если не получится, запускай режим исключения» */
   throw new CallForException(); /* Назначаем исключение, которое будет работать в случае наличия ошибки в функции, описанной выше. Здесь исключение «CallForException» - берется из библиотеки существующих исключений */
} catch (CallForException ee1) {
   /* Корректируем ошибку, чтобы программа не «отвалилась» or выводим сообщение об ошибке or что-то ещё */
} finally {
   /* этот блок работает всегда независимо от того была ошибка or нет. А если была, то сработало ли решение в catch or нет */
   /* часто используется для подчистки хвостов, например, для закрытия запущенного file or базы данных */
   /* в ряде случаев блок catch вообще может быть опущен и оставлен только блок finally и наоборот finally может быть опущен и оставлен только catch */
   /* Не допускается использование этого блока в ряде случаев, например, когда функция System.exit() запущена or другие системные Исключения, типа «отключение электроэнергии» и т.п. */
}

Kabar Pangecualian

Cara sing sadurunge ditulis dening wong bisa uga kalebu mbuwang Pengecualian. Mung ing sisih aman, programer sing nulis kode dielingake programer sakteruse sing kesalahan bisa kelakon ing cara kang wrote. Dadi, contone, cara nggawe file sing diterangake ing ngisor iki nyatakake yen nalika nggawe file bisa uga ana kesalahan (ora ana file ing jalur sing diwenehake), tegese panangan kesalahan bakal dibutuhake:
public void createFile(String path, String text) throws IOException {
    FileWriter writer = new FileWriter(path, true);
    writer.write(text);
    writer.close();
}
Nanging ing wektu sing padha, ora ana handler dhewe, sing tegese saiki kita ora bakal bisa mung nelpon cara ditulis ing program kita ing mode normal. Saiki kita kudu nulis handler kesalahan lan nelpon cara iki ing blok try:
String filePath = "hello.txt";
String text = "Hello World";

try {
    createFile(filePath, text);
} catch (IOException ex) {
    System.err.println("Error creating file: " + ex);
}

Pengecualian pribumi

Sampeyan bisa nulis pengecualian dhewe kanggo nangani kesalahan tartamtu yen perpustakaan sing ana ora cukup kanggo kita. Kanggo nindakake iki, kita mung nggawe kelas sing diwenehi warisan saka kelas Exception
public class StudentNotFoundException extends Exception {

    public StudentNotFoundException (String message) {
        super(message);
    }
}
Ana rong aturan sing kudu dielingi nalika nggawe pengecualian dhewe:
  1. Jeneng kelas kita kudu dipungkasi karo "Pengecualian"
  2. Kelas kasebut kudu ngemot konstruktor kanthi variabel senar sing nggambarake rincian masalah Pengecualian. Ing konstruktor, konstruktor super diarani lan pesen diwarisake.
Conto nggunakake pengecualian sing digawe:
public class StudentManager {
    public Student find(String studentID) throws StudentNotFoundException {
        if (studentID.equals("123456")) {
            return new Student();
        } else {
            throw new StudentNotFoundException(
                "Could not find student with ID " + studentID);
        }
    }
}
Kita nyekel Pengecualian iki kanthi kode:
public class StudentTest {
    public static void main(String[] args) {
        StudentManager manager = new StudentManager();
         try {
            Student student = manager.find("0000001");
        } catch (StudentNotFoundException ex) {
            System.err.print(ex);
        }
    }
}
Asil saka eksekusi program bakal dadi: StudentNotFoundException: Ora bisa nemokake siswa kanthi ID 0000001

Napa sampeyan kudu nulis Pengecualian?

Ing taun 1996, roket Ariane 5 ambruk amarga salah konversi variabel float menyang variabel integer. Ora ana pangecualian utawa panangan kanggo kahanan iki. Yen nalika ndownload file ana kelangan sambungan menyang Internet, mula ana Pengecualian bakal ngidini sampeyan terus ndownload sawise sambungan dibalekake. Yen ora ana Pengecualian, download kudu diwiwiti maneh.

Referensi:

Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION