CodeGym /Blog Jawa /Acak /Pangecualian: dicenthang, ora dicenthang, lan adat
John Squirrels
tingkat
San Francisco

Pangecualian: dicenthang, ora dicenthang, lan adat

Diterbitake ing grup
Hi! Ing wulangan pungkasan, kita kenal karo pangecualian ing basa Jawa, lan ndeleng conto cara nggarap. Dina iki kita bakal nliti struktur pengecualian, lan sinau babagan nulis pengecualian dhewe :)

Jinis pangecualian

Kaya sing wis dakkandhakake sadurunge, ana akeh pengecualian ing Jawa, meh 400! Nanging kabeh dipérang dadi klompok, saéngga gampang dieling-eling. Iki carane katon: Pangecualian: dicenthang, ora dicenthang, lan adat - 2 Kabeh pangecualian duwe leluhur umum ing Throwablekelas. Rong klompok utama asalé saka iku: pangecualian ( Pangecualian ) lan kasalahan ( Kasalahan ). Error - Iki nuduhake kesalahan run-time kritis sing ana gandhengane karo operasi mesin virtual Java. Umume kasus, kesalahan ora perlu ditangani, amarga nuduhake sawetara cacat serius ing kode kasebut. Sing paling misuwur yaiku StackOverflowError (iki kedadeyan, umpamane, nalika metode kasebut tanpa wates) lan OutOfMemoryError(iki kedadeyan nalika ora cukup memori kanggo nggawe obyek anyar). Kaya sing sampeyan ngerteni, ing kahanan kasebut, biasane ora ana apa-apa sing kudu ditindakake nalika mbukak: kode kasebut mung ditulis kanthi ora bener lan kudu digarap maneh. Pengecualian - Iki nggambarake, uga, pangecualian: kahanan sing luar biasa lan ora direncanakake nalika program lagi mlaku. Dheweke ora serius kaya Kesalahan, nanging isih mbutuhake perhatian kita. Kabeh pangecualian dipérang dadi 2 jinis: dicenthang lan ora dicenthang . Pangecualian: dicenthang, ora dicenthang, lan adat - 3 Kabeh pangecualian sing dicenthang asale saka Exceptionkelas. Apa tegese "dipriksa"? We alluded kanggo iki ing pawulangan pungkasan: "Mulane compiler Jawa ngerti pangecualian sing paling umum lan kahanan ngendi padha bisa kelakon." Contone, ngerti yen kode kasebut maca data saka file, file kasebut gampang ora ana. Lan ana akeh kahanan kasebut (sing bisa disimpulake). Mulane, kompiler mriksa kode kita luwih dhisik kanggo anané pangecualian potensial kasebut. Yen ketemu, ora bakal ngumpulake kode nganti kita wis ditangani utawa dibuwang maneh. Jinis pengecualian kapindho yaiku "ora dicenthang". Dheweke asale saka RuntimeExceptionkelas. Kepiye bedane karo pengecualian sing dicenthang? Iku misale jek sing ana uga persil saka kelas beda asalé sakaRuntimeException(sing njlèntrèhaké pangecualian runtime). Bentenipun yaiku kompiler ora ngantisipasi kesalahan kasebut. Iku misale jek ngandika, "Nalika kode ditulis, aku ora nemokake apa-apa sing curiga, nanging ana sing salah nalika mlaku. Ketoke, ana kesalahan ing kode!" Lan pancen iki bener. Pangecualian sing ora dicenthang paling asring minangka asil saka kesalahan programer. Lan compiler temenan ora bisa foresee saben kahanan ala sing bisa digawe karo tangane dhewe. :) Mulane, iku ora mriksa apa pangecualian kuwi ditangani ing kode kita. Sampeyan wis nemoni sawetara pangecualian sing ora dicenthang:
  • ArithmeticException dumadi nalika dibagi karo nol
  • ArrayIndexOutOfBoundsException dumadi nalika sampeyan nyoba ngakses posisi ing njaba array.
Mesthi, sampeyan bisa mbayangno manawa pangripta Jawa bisa ngenalake penanganan pengecualian wajib, nanging ing kasus iki kode kasebut bakal rumit banget. Kanggo operasi divisi apa wae, sampeyan kudu nulis try-catchblok kanggo mriksa manawa sampeyan ora sengaja dibagi nol? Saben sampeyan ngakses array, sampeyan kudu nulis try-catchblok kanggo mriksa yen indeks sampeyan ora ana watesan. Kabeh bakal dadi kode spageti lan ora bisa diwaca. Iku ndadekake pangertèn yen gagasan iki ditinggalake. Akibaté, pangecualian sing ora dicenthang ora perlu ditangani ing try-catchblok utawa dibuwang maneh (sanajan sacara teknis bisa uga, kaya karo Kesalahan).

Carane uncalan istiméwa dhewe

Mesthine, para pangripta Jawa ora bisa ngira-ngira saben kahanan luar biasa sing bisa kedadeyan ing program. Ana akeh banget program ing donya, lan macem-macem banget. Nanging iki ora perlu kuwatir, amarga sampeyan bisa nggawe pangecualian dhewe, yen perlu. Iki gampang banget ditindakake. Sampeyan mung kudu nggawe kelas sampeyan dhewe. Sampeyan kudu yakin jeneng kasebut rampung karo "Pengecualian". Compiler ora mbutuhake iki, nanging programer liyane sing maca kode sampeyan bakal langsung ngerti yen iku kelas pangecualian. Kajaba iku, nuduhake yen kelas kasebut diwarisake saka Exceptionkelas kasebut (kompiler mbutuhake iki). Contone, umpamane kita duwe Dogkelas. Kita bisa mlaku asu nggunakakewalk()cara. Nanging sadurunge nindakake, kita kudu mriksa apa pet kita nganggo kerah, tali, lan moncong. Yen piranti iki ilang, kita mbuwang pangecualian dhewe: DogIsNotReadyException . Kode kasebut katon kaya iki:

public class DogIsNotReadyException extends Exception {

   public DogIsNotReadyException(String message) {
       super(message);
   }
}
Kanggo nunjukake yen kelas kasebut minangka pangecualian, sampeyan kudu nulis " Exception Exception " sawise jeneng kelas (iki tegese "kelas kasebut asale saka kelas Exception"). Ing konstruktor, kita mung nelpon Exceptionkonstruktor kelas karo pesen String (yen ana pangecualian, kita bakal nuduhake pesen, gambaran saka kesalahan, kanggo pangguna). Mangkene carane iki katon ing kode kelas kita:

public class Dog {

   String name;
   boolean isCollarPutOn;
   boolean isLeashPutOn;
   boolean isMuzzlePutOn;


   public Dog(String name) {
       this.name = name;
   }

   public static void main(String[] args) {

   }

   public void putCollar() {

       System.out.println("The collar is on!");
       this.isCollarPutOn = true;
   }

   public void putLeash() {

       System.out.println("The leash is on!");
       this.isLeashPutOn = true;
   }

   public void putMuzzle() {
       System.out.println("The muzzle is on!");
       this.isMuzzlePutOn = true;
   }

   public void walk() throws DogIsNotReadyException {

   System.out.println("We're getting ready for a walk!");
   if (isCollarPutOn && isLeashPutOn && isMuzzlePutOn) {
       System.out.println("Hooray, let's go for a walk! " + name + " is very happy!");
   } else {
       throw new DogIsNotReadyException(name + " is not ready for a walk! Check the gear!");
   }
 }

}
Saiki walk()cara kita mbuwang DogIsNotReadyException . Iki rampung karo uncalan tembung kunci. Kaya sing wis dingerteni sadurunge, pangecualian minangka obyek. Dadi, nalika ana pangecualian (asu ilang soko) ing cara kita, kita nggawe DogIsNotReadyExceptionobyek anyar lan uncalan nggunakake uncalan tembung kunci. Kita nambah " mbuwang DogIsNotReadyException " kanggo deklarasi metode. Kanthi tembung liyane, saiki kompiler ngerti manawa nelpon walk()metode kasebut bisa dadi kahanan sing luar biasa. Patut, pangecualian iki kudu ditangani yen kita nelpon cara iki nang endi wae ing program kita. Ayo nyoba nindakake iki ing main()cara:

public static void main(String[] args) {
  
   Dog dog = new Dog("Buddy");
   dog.putCollar();
   dog.putMuzzle();
   dog.walk();// Unhandled exception: DogIsNotReadyException
}
Iki ora bakal kompilasi. Pangecualian ora ditangani! Kita mbungkus kode ing try-catchblok kanggo nangani pangecualian:

public static void main(String[] args) {

   Dog dog = new Dog("Buddy");
   dog.putCollar();
   dog.putMuzzle();
   try {
       dog.walk();
   } catch (DogIsNotReadyException e) {
       System.out.println(e.getMessage());
       System.out.println("Checking the gear! Is the collar on? " + dog.isCollarPutOn + "\r\n Is the leash on? "
       + dog.isLeashPutOn + "\r\n Is the muzzle on? " + dog.isMuzzlePutOn);
   }
}
Saiki ayo goleki output konsol: Kerah diuripake! Moncong wis aktif! Kita siyap-siyap mlaku-mlaku! Buddy durung siap mlaku-mlaku! Priksa gear! Priksa gear! Apa kerah ing? bener Apa tali ing? palsu Apa moncong ing? bener Deleng carane akeh liyane informatif output console ana! Kita ndeleng saben langkah sing ditindakake ing program kasebut; kita waca ngendi ana kesalahan, lan kita uga bisa langsung ndeleng persis apa asu kita ilang. :) Lan sing carane nggawe pangecualian dhewe. Kaya sing sampeyan ngerteni, ora ana sing rumit babagan iki. Lan sanadyan pangripta Jawa ora keganggu kanggo kalebu ing basa istiméwa khusus kanggo asu kurang dilengkapi, kita wis mbenerake pengawasan. :)
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION