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లేదా దాని పూర్వీకుల తరగతులలో ఏదైనా: RuntimeException , Exceptionమరియు Throwable— రేఖాచిత్రం చూడండి.

మేము లెవెల్ 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