JavaRush /Blog Jawa /Random-JV /Pangecualian: dicenthang, ora dicenthang lan sampeyan dhe...

Pangecualian: dicenthang, ora dicenthang lan sampeyan dhewe

Diterbitake ing grup
Hello! Ing kuliah pungkasan, kita kenal karo aspek basa Jawa minangka pengecualian lan ndeleng conto nggarap. Dina iki kita bakal nliti strukture kanthi luwih jero, lan uga sinau babagan nulis pengecualian dhewe :)

Jinis pangecualian

Kaya sing wis dakkandhakake, ana akeh kelas pengecualian ing Jawa, meh 400! Nanging kabeh dipérang dadi klompok, saéngga gampang dieling-eling. Mangkene apa sing katon: Pangecualian: dicenthang, ora dicenthang lan sampeyan dhewe - 2Kabeh pangecualian duwe kelas leluhur sing umum Throwable. Loro klompok gedhe teka saka iku - pangecualian (Pengecualian) lan kasalahan (Error). Kesalahan minangka kesalahan kritis sajrone eksekusi program sing ana gandhengane karo operasi mesin virtual Java. Umume kasus, kesalahan ora perlu ditangani, amarga nuduhake sawetara cacat serius ing kode kasebut. Kesalahan paling misuwur: StackOverflowError- occurs, contone, nalika cara endlessly nelpon dhewe, lan OutOfMemoryError- occurs nalika ana ora cukup memori kanggo nggawe obyek anyar. Nalika sampeyan bisa ndeleng, ing kahanan iki, paling asring ora ana apa-apa khusus kanggo proses - kode mung ditulis salah lan kudu dibalèkaké. Pangecualian , nyatane, pangecualian: kahanan sing luar biasa lan ora direncanakake nalika program lagi mlaku. Iki dudu kesalahan sing serius kaya Kesalahan, nanging mbutuhake perhatian kita. Kabeh pangecualian dipérang dadi 2 jinis - dicenthang ( dicenthang ) lan ora dicenthang ( ora dicenthang ). Pangecualian: dicenthang, ora dicenthang lan sampeyan dhewe - 3Kabeh pangecualian sing dicenthang teka saka Exception. Apa tegese "diverifikasi"? Kita sebagian kasebut ing kuliah pungkasan : "... compiler Java ngerti babagan pengecualian sing paling umum, lan ngerti kahanan apa sing bisa kedadeyan." Contone, dheweke ngerti yen programmer maca data saka file ing kode, kahanan bisa gampang muncul yen file kasebut ora ana. Lan ana akeh kahanan sing bisa diprediksi sadurunge. Mulane, kompiler mriksa kode kita luwih dhisik kanggo pangecualian potensial. Yen ketemu, ora bakal ngumpulake kode nganti diproses utawa diterusake menyang ndhuwur. Jinis pengecualian nomer loro yaiku "ora dicenthang". Dheweke teka saka kelas RuntimeException. Kepiye bedane karo sing dites? Iku bakal katon sing ana uga Bunch saka macem-macem kelas sing teka saka RuntimeExceptionlan njlèntrèhaké pangecualian runtime tartamtu. Bentenipun punika compiler ora nyana kasalahan iki. Dheweke kaya mangkene: "Nalika nulis kode kasebut, aku ora nemokake apa-apa sing curiga, nanging ana sing salah nalika digunakake. Ketoke ana kesalahan ing kode!” Lan pancen bener. Pangecualian sing ora dicenthang paling asring minangka asil saka kesalahan programer. Lan kompiler kasebut kanthi jelas ora bisa nyedhiyakake kabeh kahanan sing salah sing bisa ditindakake dening wong kanthi tangane dhewe :) Mulane, ora bakal mriksa penanganan pengecualian kasebut ing kode kita. Sampeyan wis nemoni sawetara pangecualian sing ora dicenthang:
  • ArithmeticExceptionoccurs nalika dibagi dening nul
  • ArrayIndexOutOfBoundsExceptionKedadeyan nalika nyoba ngakses sel ing njaba array.
Secara teoritis, mesthine, para pangripta Jawa bisa ngenalake penanganan wajib kanggo pengecualian kasebut, nanging kode kasebut bakal dadi apa? Kanthi operasi pamisah nomer, sampeyan kudu nulis nyoba-nyekel kanggo mriksa apa sampeyan ora sengaja dibagi nol? Nalika ngakses array, sampeyan kudu nulis nyoba-nyekel kanggo mriksa apa sampeyan wis ngluwihi watesan kasebut. Sembarang kode sing ditulis bakal dadi spageti lan ora bisa diwaca. Iku logis yen gagasan iki ditinggalake. Mulane, pangecualian sing ora dicenthang ora perlu ditangani ing pamblokiran nyoba-nyekel utawa dibuwang menyang ndhuwur, sanajan kanthi teknis bisa uga, kaya kesalahan.

Carane uncalan pangecualian Panjenengan

Mesthine, pangripta Jawa ora bisa nyedhiyakake kabeh kahanan sing luar biasa sing bisa kedadeyan ing program. Ana akeh banget program ing donya, lan padha banget beda. Nanging ora apa-apa, amarga sampeyan bisa nggawe pengecualian dhewe yen perlu. Iki ditindakake kanthi gampang banget. Sampeyan mung kudu nggawe kelas sampeyan dhewe. Jenenge kudu dipungkasi karo "Pengecualian". Compiler ora mbutuhake iki, nanging programer sing maca kode sampeyan bakal langsung ngerti yen iki minangka kelas pangecualian. Kajaba iku, sampeyan kudu nunjukake yen kelas kasebut asale saka kelas Exception. Iki wis perlu kanggo compiler lan operasi bener. Contone, kita duwe kelas Dog - Dog. Kita bisa mlaku asu nggunakake walk(). Nanging sadurunge, kita kudu mriksa apa pet kita nganggo kerah, tali lan moncong. Yen ana sing ilang, kita bakal mbuwang pengecualian dhewe DogIsNotReadyException. Kode kasebut bakal katon kaya iki:
public class DogIsNotReadyException extends Exception {

   public DogIsNotReadyException(String message) {
       super(message);
   }
}
Kanggo nunjukake yen kelas minangka pangecualian, sampeyan kudu nulis Exception ngluwihi jeneng kelas: iki tegese "kelas kasebut asale saka kelas Exception." Ing konstruktor, kita mung bakal nelpon konstruktor kelas Exceptionkanthi baris message- bakal nampilake pangguna pesen saka sistem sing njlentrehake kesalahan sing kedadeyan. Iki bakal 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("Let's go for a walk!");
   if (isCollarPutOn && isLeashPutOn && isMuzzlePutOn) {
       System.out.println("Hurrah, let's go for a walk!" + name + " I am glad!");
   } else {
       throw new DogIsNotReadyException("Dog " + name + "not ready for a walk! Check your gear!");
   }
 }

}
Saiki cara kita walk()mbuwang pangecualian DogIsNotReadyException. Iki ditindakake kanthi nggunakake tembung kunci throw. Kaya sing wis dingerteni sadurunge, pangecualian minangka obyek. Mulane, ing cara kita, nalika ana kahanan luar biasa - ana sing ilang ing asu - kita nggawe obyek kelas anyar DogIsNotReadyExceptionlan uncalan menyang program nggunakake tembung throw. walk()Kita nambahake uncalan menyang tandha cara DogIsNotReadyException. Ing tembung liya, kompiler saiki ngerti yen telpon metode walk()bisa nyebabake pangecualian. Dadi nalika kita nelpon iki nang endi wae ing program, pangecualian kudu ditangani. Ayo nyoba nindakake iki kanthi cara main():
public static void main(String[] args) {

   Dog dog = new Dog("Mukhtar");
   dog.putCollar();
   dog.putMuzzle();
   dog.walk();//Unhandled exception: DogIsNotReadyException
}
Ora kompilasi, pangecualian ora ditangani! Ayo bungkus kode ing blok try-catchkanggo nangani pangecualian:
public static void main(String[] args) {

   Dog dog = new Dog("Mukhtar");
   dog.putCollar();
   dog.putMuzzle();
   try {
       dog.walk();
   } catch (DogIsNotReadyException e) {
       System.out.println(e.getMessage());
       System.out.println("Checking equipment! Is the collar on?" + dog.isCollarPutOn + "\r\n Is the leash on?"
       + dog.isLeashPutOn + "\r\n Are you wearing a muzzle?" + dog.isMuzzlePutOn);
   }
}
Saiki ayo goleki output konsol:

Ошейник надет! 
Намордник надет! 
Собираемся на прогулку! 
Собака Мухтар не готова к прогулке! Проверьте экипировку! 
Проверяем снаряжение! Ошейник надет? true
Поводок надет? false 
Намордник надет? true
Deleng carane luwih informatif output console wis dadi! Kita ndeleng saben langkah sing kedadeyan ing program kasebut; We ndeleng ngendi kesalahan dumadi lan langsung sok dong mirsani apa persis asu kita ilang :) Iki carane nggawe pangecualian kita dhewe. Nalika sampeyan bisa ndeleng, ora ana sing rumit. Lan sanajan pangembang Jawa ora keganggu kanggo nambah pangecualian khusus kanggo basa kanggo asu sing ora dilengkapi, kita mbenerake pengawasane :)
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION