1. விதிவிலக்குகள்

>

நீண்ட காலமாக, புரோகிராமர்கள் பிழை கையாளுதலை தரப்படுத்தவும் தானியங்குபடுத்தவும் நினைத்தனர். விதிவிலக்குகள் கண்டுபிடிக்கப்பட்டபோது இது நடந்தது . இப்போது விதிவிலக்கு பொறிமுறையானது 80% விதிவிலக்கான சூழ்நிலைகளைக் கையாளுகிறது.

சில அறிஞர்கள் விதிவிலக்குகளைக் கொண்டு வந்தால், அது அவருடைய முனைவர் பட்ட ஆய்வின் பொருளாக இருக்கலாம். ஒரு ப்ரோக்ராமர் அதைக் கொண்டு வந்திருந்தால், அவர் ஒரு சக ஊழியரிடமிருந்து நட்பு பாராட்டைப் பெற்றிருக்கலாம்: "பரவாயில்லை, சகோ."

ஜாவா நிரலில் வகுத்தல் போன்ற பிழை ஏற்பட்டால் 0, சில அற்புதமான விஷயங்கள் நடக்கும்:

முதல் படி

ஒரு சிறப்பு விதிவிலக்கு பொருள் உருவாக்கப்பட்டது, இது நிகழ்ந்த பிழை பற்றிய தகவலைக் கொண்டுள்ளது.

Throwableஜாவாவில் உள்ள அனைத்தும் ஒரு பொருள், மற்றும் விதிவிலக்குகள் விதிவிலக்கல்ல

படி இரண்டு

விதிவிலக்கு பொருள் "எறியப்பட்டது". ஒருவேளை இங்கே வார்த்தைகள் சிறப்பாக இருக்கலாம். "விதிவிலக்கை எறிவது" என்பது தீ அலாரத்தைத் தூண்டுவது அல்லது "DEFCON 1" எச்சரிக்கையை ஒலிப்பது போன்றது.

ஜாவா இயந்திரத்திற்கு ஒரு விதிவிலக்கு கொடுக்கப்பட்டால், நிரலின் இயல்பான செயல்பாடு நின்று "அவசர நெறிமுறைகள்" தொடங்கும்.

படி மூன்று

விதிவிலக்கு எறியப்பட்ட முறை உடனடியாக வெளியேறுகிறது. விதிவிலக்கு அழைப்பு முறைக்கு அனுப்பப்படுகிறது, அது உடனடியாக வெளியேறும். மற்றும் முறை வெளியேறும் வரை சங்கிலி கீழே main. முறை முடிவடையும் போது main, ​​நிரலும் முடிவடைகிறது.

உதாரணமாக:

குறியீடு கன்சோல் வெளியீடு
class Solution
{
   public static void main(String[] args)
   {
      System.out.println("Your attention, please! Preparing for the end of the world");
      endTheWorld();
      System.out.println("The world ended successfully");
   }

   public static void endTheWorld()
   {
      System.out.println("We're doing something important");
      doSomeWork(0);
      System.out.println("Everything is working well");
   }

   public static void doSomeWork(int n)
   {
      System.out.println("Nothing terrible will happen: " + n);
      System.out.println(2 / n);
      System.out.println("Nothing terrible happened: " + n);
   }
}
Your attention, please! Preparing for the end of the world
We're doing something important
Nothing terrible will happen: 0

ஒரு விதிவிலக்கு வரி 20 இல் நிகழ்கிறது: 0 ஆல் வகுத்தல். ஜாவா இயந்திரம் உடனடியாக ஒரு விதிவிலக்கை உருவாக்குகிறது - ஒரு ArithmeticExceptionபொருள் மற்றும் அதை முறைக்கு "எறிகிறது".

முறை divide()உடனடியாக முடிவடைகிறது, எனவே நாம் சரத்தை ஒருபோதும் பார்க்க மாட்டோம்: பயங்கரமான எதுவும் நடக்கவில்லை: 0. நிரல் முறைக்குத் திரும்புகிறது endTheWorld(), மேலும் நிலைமை மீண்டும் நிகழ்கிறது: கணினியில் கையாளப்படாத விதிவிலக்கு உள்ளது, அதாவது முறையும் endTheWorld()அசாதாரணமாக முடிவடைகிறது. பின்னர் mainமுறை முடிவடைகிறது, மற்றும் நிரல் நிறுத்தப்படும்.

இந்த விதிவிலக்குகளின் நோக்கம் என்ன? சரி, குறிப்பிட்ட வகை விதிவிலக்குகளைப் பிடிக்க உங்கள் சொந்த குறியீட்டை எழுதலாம் மற்றும் விதிவிலக்கான சூழ்நிலைகளைக் கையாள உங்கள் சொந்த தர்க்கத்தை எழுதலாம்.


2. கேட்சிங் விதிவிலக்குகள்:try-catch

ஜாவாவில் ஒரு விதிவிலக்கு பிடிக்கும் பொறிமுறை உள்ளது, இது முறைகளின் இந்த அசாதாரணமான முடிவைத் தடுக்க உங்களை அனுமதிக்கிறது. இது போல் தெரிகிறது:

try
{
   // Code where an exception might occur
}
catch(ExceptionType name)
{
   // Exception handling code
}

இந்த கட்டுமானம் ஒரு தொகுதி என்று அழைக்கப்படுகிறது try-catch.

விதிவிலக்குகள் நிகழக்கூடிய குறியீடு சுருள் பிரேஸ்களால் மூடப்பட்டிருக்கும், இதற்கு முன் வார்த்தை try.

சுருள் பிரேஸ்களுக்குப் பிறகு, எங்களிடம் catchமுக்கிய வார்த்தையும், அடைப்புக்குறிக்குள், விதிவிலக்கு மாறியின் அறிவிப்பும் இருக்கும் . இதைத் தொடர்ந்து சுருள் பிரேஸ்கள் குறிப்பிடப்பட்ட வகைக்கு விதிவிலக்கு ஏற்பட்டால் செயல்படுத்தப்பட வேண்டிய குறியீட்டை மடிக்கின்றன .

" முதன்மைக் குறியீடு " செயல்படுத்தும் போது விதிவிலக்குகள் எதுவும் போடப்படவில்லை என்றால் , கேட்ச் பிளாக்கிற்குள் இருக்கும் குறியீடு செயல்படுத்தப்படாது. விதிவிலக்கு ஏற்பட்டால், அது (எறிந்த விதிவிலக்கின் வகை அடைப்புக்குறிக்குள் மாறியின் வகையாக இருந்தால்).

உதாரணமாக:

குறியீடு கன்சோல் வெளியீடு
class Solution
{
   public static void main(String[] args)
   {
      System.out.println("Hadron Collider launched");

      try
      {
         launchHadronCollider(1);
         launchHadronCollider(0);
      }
      catch(Exception e)
      {
         System.out.println("Error! Caught an exception");
         System.out.println("The planet was sucked into a black hole!");
      }

      System.out.println("The Hadron Collider stopped");
   }

   public static void launchHadronCollider(int n)
   {
      System.out.println("Everything is working well: " + n);
      System.out.println(2/n);
      System.out.println("There are no problems: " + n);
   }
}
Hadron Collider launched
Everything is working fine: 1
2
There are no problems: 1
Everything is working fine: 0
Error! Caught an exception
The planet has been sucked into a black hole!
The Hadron Collider is stopped


3. பல catchதொகுதிகள்

பல கேட்ச் தொகுதிகள்

கோட்பாட்டில், அனைத்து வகையான விதிவிலக்குகளும் குறியீட்டின் தொகுதியில் வீசப்படலாம். சிலவற்றை நீங்கள் ஒரு வழியில் கையாள விரும்புவீர்கள், மற்றவை வேறு வழியில் கையாள விரும்புவீர்கள், இன்னும் சிலவற்றைக் கையாள வேண்டாம் என்று முடிவு செய்வீர்கள்.

catchஜாவா டெவலப்பர்கள் உங்களுக்கு உதவ முடிவு செய்து, தொகுதிக்குப் பிறகு ஒன்றல்ல பல தொகுதிகளை எழுத அனுமதிக்கின்றனர் try.

try
{
   // Code where an exception might occur
}
catch (ExceptionType1 name1)
{
   // Code for handling ExceptionType1
}
catch (ExceptionType2 name2)
{
   // Code for handling ExceptionType2
}
   catch (ExceptionType3 name3)
{
   // Code for handling ExceptionType3
}

உதாரணமாக:

குறியீடு கன்சோல் வெளியீடு
class Solution
{
   public static void main(String[] args)
   {
      System.out.println("Start of main method");
      try
      {
         calculate(0);
      }
      catch (ArithmeticException e)
      {
         System.out.println("Division by 0");
      }
      catch(Exception e)
      {
         System.out.println("Caught some kind of exception");
      }

      System.out.println("End of main method");
   }

   public static void calculate(int n)
   {
      System.out.println("Start of calculate method: " + n);
      System.out.println(2/n);
      System.out.println("End of calculate method: " + n);
   }
}
Start of main method
Start of calculate method: 0
Division by 0
End of main method


catch4. தொகுதிகளின் வரிசை

ஒரு தொகுதியில் ஏற்படும் விதிவிலக்குகளை tryஒரு தொகுதியால் மட்டுமே பிடிக்க முடியும் catch. பல தொகுதிகளில் இருந்து குறியீடு செயல்படுத்தப்படும்போது விதிவிலக்கு கையாளும் சூழ்நிலையை நீங்கள் கொண்டிருக்க முடியாது .catch

ஆனால் தொகுதிகளின் வரிசை முக்கியமானது.

விதிவிலக்கு பல தொகுதிகளால் பிடிக்கப்படும் சூழ்நிலையை நீங்கள் கொண்டிருக்கலாம். அப்படியானால், விதிவிலக்கு எந்த கேட்ச் பிளாக் முதலில் வருகிறதோ (பிளாக்கிற்கு அருகில் try) பிடிக்கப்படும்.

பல கேட்ச் பிளாக்குகள் ஒரே விதிவிலக்கைப் பிடிக்கும் சூழ்நிலையை நீங்கள் எவ்வாறு பெறலாம்?

அனைத்து விதிவிலக்குகளும் ஒற்றை பரம்பரை படிநிலைக்கு சொந்தமானது - வரைபடத்தைப் பார்க்கவும்.

விதிவிலக்கு படிநிலை

ஒரு பொருளை அதன் வகை அல்லது அதன் மூதாதையர் வகுப்புகளில் ஏதேனும்ArithmeticException ஒரு மாறிக்கு ஒதுக்கலாம் : , மற்றும் — வரைபடத்தைப் பார்க்கவும்.ArithmeticException RuntimeExceptionExceptionThrowable

நிலை 21 இல் பரம்பரை மற்றும் மூதாதையர் வகுப்புகள் பற்றி மேலும் பேசுவோம்.

இந்த குறியீடு நன்றாக தொகுக்கப்படும்:

பரம்பரை நன்மைகள்:
ArithmeticException ae    = new ArithmeticException();
RuntimeException runtime  = new ArithmeticException();
Exception exception       = new ArithmeticException();
Throwable trwbl           = new ArithmeticException();

ArithmeticExceptionஎனவே மேலே உள்ள 4 தொகுதிகளில் ஏதேனும் ஒன்றைப் பிடிக்கலாம் catch.

எடுத்துக்காட்டு 1:

குறியீடு கன்சோல் வெளியீடு
class Solution
{
   public static void main(String[] args)
   {
      System.out.println("Start of main method");
      try
      {
         calculate(0);
      }
      catch(ArithmeticException e)
      {
         System.out.println("Division by 0");
      }
      catch(Exception e)
      {
         System.out.println("Caught some kind of exception");
      }

      System.out.println("End of main method");
   }

   public static void calculate(int n)
   {
      System.out.println("Start of calculate method: " + n);
      System.out.println(2/n);
      System.out.println("End of calculate method: " + n);
   }
}
Start of main method
Start of calculate method: 0
Division by 0
End of main method

இந்த எடுத்துக்காட்டில், தி மற்றும் தொகுதிகள் ArithmeticExceptionஇரண்டாலும் பிடிக்கப்படலாம் . இது தொகுதிக்கு அருகில் உள்ள தொகுதியால் பிடிக்கப்படும் - முதல் தொகுதி.catch (Exception e)catch (ArithmeticException e)trycatch

ஆச்சரியங்களைத் தவிர்க்க, தொகுதிகளின் பட்டியலின் முடிவில்catch கிட்டத்தட்ட எல்லா விதிவிலக்குகளையும் பிடிக்கக்கூடிய தொகுதிகளை வைப்பது சிறந்தது .catch

இந்த வகை பொதுவாக ஜாவாவில் சாத்தியமான அனைத்து விதிவிலக்குகளையும் பிடிக்கும்Throwable திறன் கொண்டது . நீங்கள் அதை முதல் தொகுதியில் வைத்தால், குறியீடு தொகுக்கப்படாது, ஏனெனில் அணுக முடியாத குறியீடு தொகுதிகள் உள்ளன என்பதை கம்பைலருக்குத் தெரியும்.catch