CodeGym /Java Blog /சீரற்ற /விதிவிலக்குகள்: சரிபார்க்கப்பட்டது, சரிபார்க்கப்படாதது மற...
John Squirrels
நிலை 41
San Francisco

விதிவிலக்குகள்: சரிபார்க்கப்பட்டது, சரிபார்க்கப்படாதது மற்றும் தனிப்பயன்

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

விதிவிலக்குகளின் வகைகள்

நாம் முன்பு கூறியது போல், ஜாவாவில் நிறைய விதிவிலக்குகள் உள்ளன, கிட்டத்தட்ட 400! ஆனால் அவை அனைத்தும் குழுக்களாக பிரிக்கப்பட்டுள்ளன, எனவே அவற்றை நினைவில் கொள்வது மிகவும் எளிதானது. இது எப்படி இருக்கிறது: விதிவிலக்குகள்: சரிபார்க்கப்பட்டது, சரிபார்க்கப்படாதது மற்றும் தனிப்பயன் - 2 அனைத்து விதிவிலக்குகளுக்கும் வகுப்பில் பொதுவான மூதாதையர் உள்ளனர் Throwable. இரண்டு முக்கிய குழுக்கள் அதிலிருந்து பெறப்படுகின்றன: விதிவிலக்குகள் ( விதிவிலக்கு ) மற்றும் பிழைகள் ( பிழை ). பிழை - இது ஜாவா மெய்நிகர் இயந்திரத்தின் செயல்பாட்டுடன் தொடர்புடைய முக்கியமான இயக்க நேரப் பிழையைக் குறிக்கிறது. பெரும்பாலான சந்தர்ப்பங்களில், பிழையைக் கையாள வேண்டிய அவசியமில்லை, ஏனெனில் இது குறியீட்டில் சில கடுமையான குறைபாடுகளைக் குறிக்கிறது. இவற்றில் மிகவும் பிரபலமானவை StackOverflowError (இது நிகழ்கிறது, எடுத்துக்காட்டாக, ஒரு முறை தன்னை முடிவில்லாமல் அழைக்கும் போது) மற்றும் OutOfMemoryError(புதிய பொருட்களை உருவாக்க போதுமான நினைவகம் இல்லாதபோது இது நிகழ்கிறது). நீங்கள் பார்க்க முடியும் என, இந்த சூழ்நிலைகளில், பொதுவாக ரன் நேரத்தில் கையாள முற்றிலும் எதுவும் இல்லை: குறியீடு வெறுமனே தவறாக எழுதப்பட்டுள்ளது மற்றும் மறுவேலை செய்யப்பட வேண்டும். விதிவிலக்கு - இது ஒரு விதிவிலக்கைக் குறிக்கிறது: நிரல் இயங்கும் போது ஏற்படும் விதிவிலக்கான, திட்டமிடப்படாத சூழ்நிலை. அவை பிழையைப் போல தீவிரமானவை அல்ல, ஆனால் அவை இன்னும் நம் கவனம் தேவை. அனைத்து விதிவிலக்குகளும் 2 வகைகளாக பிரிக்கப்பட்டுள்ளன: சரிபார்க்கப்பட்டது மற்றும் சரிபார்க்கப்படவில்லை . விதிவிலக்குகள்: சரிபார்க்கப்பட்டது, சரிபார்க்கப்படாதது மற்றும் தனிப்பயன் - 3 சரிபார்க்கப்பட்ட அனைத்து விதிவிலக்குகளும் வகுப்பிலிருந்து பெறப்பட்டவை Exception. "சரிபார்க்கப்பட்டது" என்றால் என்ன? கடந்த பாடத்தில் இதைக் குறிப்பிட்டோம்: "ஜாவா கம்பைலர் மிகவும் பொதுவான விதிவிலக்குகளையும் அவை நிகழக்கூடிய சூழ்நிலைகளையும் அறிந்திருக்கிறது." எடுத்துக்காட்டாக, ஒரு கோப்பிலிருந்து தரவைக் குறியீடு படித்தால், அந்தக் கோப்பு எளிதில் இருக்காது என்பது அது அறிந்ததே. அத்தகைய சூழ்நிலைகள் நிறைய உள்ளன (அது ஊகிக்கக்கூடியது). அதன்படி, இந்த சாத்தியமான விதிவிலக்குகள் இருப்பதற்காக கம்பைலர் எங்கள் குறியீட்டை முன்கூட்டியே சரிபார்க்கிறது. அது அவற்றைக் கண்டறிந்தால், நாங்கள் அவற்றைக் கையாளும் வரை அல்லது அவற்றை மீண்டும் தூக்கி எறியும் வரை அது குறியீட்டைத் தொகுக்காது. இரண்டாவது வகை விதிவிலக்கு "சரிபார்க்கப்படாதது". அவை வகுப்பிலிருந்து பெறப்பட்டவை RuntimeException. சரிபார்க்கப்பட்ட விதிவிலக்குகளிலிருந்து அவை எவ்வாறு வேறுபடுகின்றன? இருந்து பெறப்பட்ட பல்வேறு வகுப்புகள் நிறைய உள்ளன என்று தெரிகிறதுRuntimeException(இது இயக்க நேர விதிவிலக்குகளை விவரிக்கிறது). வித்தியாசம் என்னவென்றால், கம்பைலர் இந்த பிழைகளை எதிர்பார்க்கவில்லை. "குறியீடு எழுதப்பட்டபோது, ​​சந்தேகத்திற்குரிய எதையும் நான் கண்டுபிடிக்கவில்லை, ஆனால் அது இயங்கும் போது ஏதோ தவறு ஏற்பட்டது, வெளிப்படையாக, குறியீட்டில் பிழைகள் உள்ளன!" மேலும் இது உண்மைதான். தேர்வு செய்யப்படாத விதிவிலக்குகள் பெரும்பாலும் புரோகிராமர் பிழைகளின் விளைவாகும். மக்கள் தங்கள் சொந்தக் கைகளால் உருவாக்கக்கூடிய ஒவ்வொரு மோசமான சூழ்நிலையையும் கம்பைலர் வெளிப்படையாகக் கணிக்க முடியாது. :) எனவே, இது போன்ற விதிவிலக்குகள் எங்கள் குறியீட்டில் கையாளப்படுகின்றனவா என்பதைச் சரிபார்க்காது. நீங்கள் ஏற்கனவே பல தேர்வு செய்யப்படாத விதிவிலக்குகளை எதிர்கொண்டுள்ளீர்கள்:
  • பூஜ்ஜியத்தால் வகுக்கும் போது எண்கணித விதிவிலக்கு ஏற்படுகிறது
  • நீங்கள் வரிசைக்கு வெளியே ஒரு நிலையை அணுக முயற்சிக்கும்போது ஒரு ArrayIndexOutOfBoundsException ஏற்படுகிறது.
நிச்சயமாக, ஜாவாவின் படைப்பாளிகள் கட்டாய விதிவிலக்கு கையாளுதலை அறிமுகப்படுத்தியிருக்கலாம் என்று நீங்கள் கற்பனை செய்யலாம், ஆனால் இந்த விஷயத்தில் குறியீடு மிகவும் சிக்கலானதாக இருக்கும். try-catchஎந்தவொரு வகுத்தல் செயல்பாட்டிற்கும், நீங்கள் தற்செயலாக பூஜ்ஜியத்தால் வகுக்கப்பட்டீர்களா என்பதைச் சரிபார்க்க ஒரு தொகுதி எழுத வேண்டுமா ? try-catchஎந்த நேரத்திலும் நீங்கள் ஒரு வரிசையை அணுகினால், உங்கள் குறியீட்டு எல்லைக்கு வெளியே உள்ளதா என்பதைச் சரிபார்க்க, நீங்கள் ஒரு தொகுதியை எழுத வேண்டும் . எல்லாமே ஸ்பாகெட்டி குறியீடாக இருக்கும் மற்றும் முழுமையாக படிக்க முடியாததாக இருக்கும். இந்த யோசனை கைவிடப்பட்டது என்று அர்த்தம். இதன் விளைவாக, தேர்வு செய்யப்படாத விதிவிலக்குகளைத் தொகுதிகளாகக் கையாளவோ அல்லது மீண்டும் வீசவோ தேவையில்லை try-catch(இது தொழில்நுட்ப ரீதியாக சாத்தியமானது என்றாலும், பிழையைப் போல).

உங்கள் சொந்த விதிவிலக்கை எவ்வாறு தூக்கி எறிவது

நிச்சயமாக, ஜாவாவின் படைப்பாளிகள் நிரல்களில் ஏற்படக்கூடிய ஒவ்வொரு விதிவிலக்கான சூழ்நிலையையும் முன்கூட்டியே பார்க்க முடியாது. உலகில் பல திட்டங்கள் உள்ளன, அவை மிகவும் வேறுபட்டவை. ஆனால் இது கவலைப்பட ஒன்றுமில்லை, ஏனென்றால் தேவைப்பட்டால், உங்கள் சொந்த விதிவிலக்கை உருவாக்கலாம். இதைச் செய்வது மிகவும் எளிது. நீங்கள் செய்ய வேண்டியது உங்கள் சொந்த வகுப்பை உருவாக்குவதுதான். அதன் பெயர் "விதிவிலக்கு" என்று முடிவடைவதை உறுதிசெய்ய வேண்டும். கம்பைலருக்கு இது தேவையில்லை, ஆனால் உங்கள் குறியீட்டைப் படிக்கும் பிற புரோகிராமர்கள் இது ஒரு விதிவிலக்கு வகுப்பு என்பதை உடனடியாகப் புரிந்துகொள்வார்கள். கூடுதலாக, வர்க்கம் வகுப்பிலிருந்து பெறப்பட்டது என்பதைக் குறிக்கவும் Exception(தொகுப்பாளருக்கு இது தேவைப்படுகிறது). உதாரணமாக, எங்களிடம் ஒரு Dogவகுப்பு உள்ளது என்று வைத்துக்கொள்வோம். நாம் நாயைப் பயன்படுத்தி நடக்கலாம்walk()முறை. ஆனால் அதைச் செய்வதற்கு முன், நம் செல்லப்பிள்ளை காலர், லீஷ் மற்றும் முகவாய் அணிந்திருக்கிறதா என்பதை சரிபார்க்க வேண்டும். இந்த கியர் எதுவும் காணவில்லை என்றால், நாங்கள் எங்கள் சொந்த விதிவிலக்கு: DogIsNotReadyException . அதன் குறியீடு இதுபோல் தெரிகிறது:

public class DogIsNotReadyException extends Exception {

   public DogIsNotReadyException(String message) {
       super(message);
   }
}
வகுப்பு ஒரு விதிவிலக்கு என்பதைக் குறிக்க, நீங்கள் வகுப்பின் பெயருக்குப் பிறகு " விதிவிலக்கு நீட்டிப்பு " என்று எழுத வேண்டும் (இதன் பொருள் "வகுப்பு விதிவிலக்கு வகுப்பிலிருந்து பெறப்பட்டது"). கன்ஸ்ட்ரக்டரில், Exceptionகிளாஸ் கன்ஸ்ட்ரக்டரை சரம் செய்தியுடன் அழைப்போம் (விதிவிலக்கு ஏற்பட்டால், செய்தியை, பிழையின் விளக்கத்தை பயனருக்குக் காண்பிப்போம்). எங்கள் வகுப்புக் குறியீட்டில் இது எப்படித் தெரிகிறது:

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!");
   }
 }

}
இப்போது எங்கள் முறை ஒரு DogIsNotReadyExceptionwalk() ஐ வீசுகிறது . வீசுதல் என்ற முக்கிய சொல்லைக் கொண்டு இது செய்யப்படுகிறது. நாம் முன்பே கூறியது போல், விதிவிலக்கு என்பது ஒரு பொருள். எனவே, எங்கள் முறையில் விதிவிலக்கு ஏற்படும் போது (நாய் எதையாவது காணவில்லை), நாங்கள் ஒரு புதிய பொருளை உருவாக்கி அதை வீசுதல் என்ற முக்கிய சொல்லைப் பயன்படுத்தி வீசுகிறோம். முறை அறிவிப்பில் " த்ரோஸ் DogIsNotReadyException " ஐச் சேர்க்கிறோம் . வேறு வார்த்தைகளில் கூறுவதானால், இந்த முறையை அழைப்பது ஒரு விதிவிலக்கான சூழ்நிலையாக மாறும் என்பதை இப்போது கம்பைலர் அறிந்திருக்கிறார் . அதன்படி, எங்கள் நிரலில் எங்காவது இந்த முறையை அழைத்தால் இந்த விதிவிலக்கு கையாளப்பட வேண்டும். இதை இந்த முறையில் செய்ய முயற்சிப்போம் : DogIsNotReadyExceptionwalk()main()

public static void main(String[] args) {
  
   Dog dog = new Dog("Buddy");
   dog.putCollar();
   dog.putMuzzle();
   dog.walk();// Unhandled exception: DogIsNotReadyException
}
இது தொகுக்கப்படாது. விதிவிலக்கு கையாளப்படவில்லை! try-catchவிதிவிலக்கைக் கையாள, எங்கள் குறியீட்டை ஒரு தொகுதியில் மூடுகிறோம் :

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);
   }
}
இப்போது கன்சோல் வெளியீட்டைப் பார்ப்போம்: காலர் இயக்கத்தில் உள்ளது! முகவாய் உள்ளது! நாங்கள் ஒரு நடைக்கு தயாராகி வருகிறோம்! பட்டி ஒரு நடைக்கு தயாராக இல்லை! கியரை சரிபார்க்கவும்! கியரை சரிபார்க்கிறது! காலர் ஆன் செய்யப்பட்டுள்ளதா? உண்மைதானா? பொய் முகவாய் உள்ளதா? உண்மை கன்சோல் வெளியீடு எவ்வளவு தகவலறிந்ததாக இருந்தது என்பதைப் பாருங்கள்! திட்டத்தில் எடுக்கப்பட்ட ஒவ்வொரு அடியையும் நாங்கள் காண்கிறோம்; எங்கே பிழை ஏற்பட்டது என்பதைப் பார்க்கிறோம், மேலும் எங்கள் நாய் என்ன காணவில்லை என்பதை உடனடியாகக் காணலாம். :) மற்றும் நீங்கள் உங்கள் சொந்த விதிவிலக்குகளை உருவாக்குவது எப்படி. நீங்கள் பார்க்க முடியும் என, இதில் சிக்கலான எதுவும் இல்லை. மேலும், ஜாவாவின் படைப்பாளிகள், மோசமாகப் பொருத்தப்பட்ட நாய்களுக்கான சிறப்பு விதிவிலக்கைச் சேர்க்கத் தயங்கவில்லை என்றாலும், அவற்றின் மேற்பார்வையை நாங்கள் சரிசெய்துள்ளோம். :)
கருத்துக்கள்
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION