ఫైనలైజ్ మెథడ్, క్లోజబుల్ ఇంటర్‌ఫేస్ మరియు రిసోర్స్‌తో ప్రయత్నించండి స్టేట్‌మెంట్ (జావా 7) - 1

"హాయ్, అమిగో!"

" ఫైనలైజ్ () పద్ధతిని మీతో చర్చించాలని ఇప్పుడే నిర్ణయించుకున్నాను ."

"మీకు గుర్తుంటే, చెత్త సేకరించేవాడు దానిని నాశనం చేసే ముందు ఒక వస్తువు ద్వారా పిలువబడే ఒక ప్రత్యేక పద్ధతిని ఖరారు చేయి()."

"ఫైళ్లు, I/O స్ట్రీమ్‌లు మొదలైనవాటిని మూసివేయడం ద్వారా ఉపయోగించిన బాహ్య నాన్-జావా వనరులను ఖాళీ చేయడమే ఈ పద్ధతి యొక్క ముఖ్య ఉద్దేశ్యం."

"దురదృష్టవశాత్తూ, ఈ పద్ధతి మా అంచనాలకు అనుగుణంగా లేదు. జావా వర్చువల్ మెషీన్ ఒక వస్తువును నాశనం చేయడాన్ని వాయిదా వేయగలదు, అలాగే ఫైనల్ మెథడ్‌ని కాల్ చేయడాన్ని అది కోరుకున్నంత కాలం వాయిదా వేయగలదు. అంతేకాకుండా, ఈ పద్ధతి ఉంటుందని హామీ ఇవ్వదు. "ఆప్టిమైజేషన్" పేరుతో కాల్ చేయని సందర్భాలు చాలా ఉన్నాయి."

"మీ కోసం నా దగ్గర రెండు సూచనలు ఉన్నాయి:"

జాషువా బ్లాచ్ ఈ పద్ధతి గురించి మంచి కథనాన్ని వ్రాశారు: లింక్
నేను ఒక చిన్న సారాంశాన్ని పారాఫ్రేజ్ చేస్తాను:

  1. finalize()ని రెండు సందర్భాలలో మాత్రమే ఉపయోగించవచ్చు:
    1. లాగింగ్‌తో వనరులను ధృవీకరించడం లేదా శుభ్రపరచడం కోసం.
    2. స్థానిక కోడ్‌తో పని చేస్తున్నప్పుడు అది వనరు లీక్‌లకు కీలకం కాదు.
  2. ఫైనల్ () వస్తువులను శుభ్రపరచడంలో GCని 430 రెట్లు నెమ్మదిగా చేస్తుంది
  3. ఫైనల్ () అని పిలవబడకపోవచ్చు
ఫైనలైజ్ అనేది హానికరమైన మరియు ప్రమాదకరమైన ఊతకర్ర అని నేను ఒక ఇంటర్వ్యూలో చెబితే, దాని ఉనికి గందరగోళంగా ఉంది, నేను సరైనదేనా?

"సరే, అది నా రోజుగా మారింది, ఎల్లీ."

" ఫైనలైజ్ పద్ధతిని భర్తీ చేయడానికి Java 7 కొత్త స్టేట్‌మెంట్‌ను కలిగి ఉంది . దీనిని వనరులతో ప్రయత్నించండి అని పిలుస్తారు. ఇది నిజంగా ఫైనల్‌కి ప్రత్యామ్నాయం కాదు , బదులుగా ఇది ప్రత్యామ్నాయ విధానం."

"ఇది ట్రై-క్యాచ్ లాగా ఉంది, కానీ వనరులతో ఉందా?"

"ఇది దాదాపు ట్రై-క్యాచ్ లాగా ఉంది . విషయాలు ఫైనల్ () పద్ధతి వలె కాకుండా, ట్రై- క్యాచ్-ఫైనల్ స్టేట్‌మెంట్‌లో చివరగా బ్లాక్ చేయడం ఎల్లప్పుడూ అమలు చేయబడుతుంది. ప్రోగ్రామర్లు వనరులను ఖాళీ చేయడానికి అవసరమైనప్పుడు కూడా ఈ సాంకేతికతను ఉపయోగించారు, క్లోజ్ థ్రెడ్‌లు మొదలైనవి.
 "ఇదిగో ఒక ఉదాహరణ:"

InputStream is = null;
try
{
 is = new FileInputStream("c:/file.txt");
 is.read(…);
}
finally
{
 if (is != null)
 is.close();
}

" ప్రయత్నించిన బ్లాక్ సరిగ్గా అమలు చేయబడిందా లేదా మినహాయింపు ఉన్నా, చివరకు బ్లాక్ ఎల్లప్పుడూ పిలువబడుతుంది మరియు ఆక్రమిత వనరులను అక్కడ విడుదల చేయడం సాధ్యపడుతుంది."

"కాబట్టి, జావా 7లో, ఈ విధానాన్ని అధికారికంగా చేయడానికి నిర్ణయం తీసుకోబడింది:"

try(InputStream is = new FileInputStream("c:/file.txt"))
{
 is.read(…);
}

"ఈ ప్రత్యేక ప్రయత్న ప్రకటనను వనరులతో ప్రయత్నించండి (సేకరణలు ఎలా ఫోర్చ్ అని పిలువబడే ప్రత్యామ్నాయాన్ని కలిగి ఉంటాయో అదే విధంగా ) అంటారు ."

"ప్రయత్నించిన తర్వాత వేరియబుల్స్ డిక్లేర్ చేయబడి మరియు ఆబ్జెక్ట్‌లు సృష్టించబడిన కుండలీకరణాలు ఉన్నాయని గమనించండి. ఈ వస్తువులు కర్లీ బ్రాకెట్‌ల ద్వారా సూచించబడిన ట్రై బ్లాక్‌లో ఉపయోగించబడతాయి. ట్రై బ్లాక్ అమలు చేయబడినప్పుడు, అది సాధారణంగా ముగిసినా లేదా అనే దానితో సంబంధం లేకుండా. ఒక మినహాయింపు, కుండలీకరణాల లోపల సృష్టించబడిన ఏదైనా వస్తువులపై క్లోజ్() పద్ధతిని పిలుస్తారు."

"ఎంత ఆసక్తికరంగా ఉంది! ఈ సంజ్ఞామానం మునుపటి దానికంటే చాలా కాంపాక్ట్‌గా ఉంది. నేను ఇంకా అర్థం చేసుకున్నాను అని నాకు ఖచ్చితంగా తెలియదు."

"ఇది మీరు అనుకున్నంత కష్టం కాదు."

"కాబట్టి, కుండలీకరణాల్లో ప్రతి వస్తువు యొక్క తరగతిని నేను పేర్కొనవచ్చా?"

"అవును, అయితే, లేకపోతే కుండలీకరణాలు పెద్దగా ఉపయోగపడవు."

"మరియు నేను ట్రై బ్లాక్ నుండి నిష్క్రమించిన తర్వాత మరొక పద్ధతికి కాల్ చేయవలసి వస్తే, నేను దానిని ఎక్కడ ఉంచాలి?"

"ఇక్కడ విషయాలు కొంచెం సూక్ష్మంగా ఉన్నాయి. జావా 7 కింది ఇంటర్‌ఫేస్‌ను పరిచయం చేస్తుంది:"

public interface AutoCloseable
{
 void close() throws Exception;
}

"మీ తరగతి ఈ ఇంటర్‌ఫేస్‌ని అమలు చేయగలదు. ఆపై మీరు వనరులతో ప్రయత్నించండి స్టేట్‌మెంట్‌లో దాని ఆబ్జెక్ట్‌లను ఉపయోగించవచ్చు. «ఆటోమేటిక్ క్లోజర్» కోసం ట్రై-విత్-రిసోర్సెస్ స్టేట్‌మెంట్ యొక్క కుండలీకరణాల్లో అటువంటి వస్తువులు మాత్రమే సృష్టించబడతాయి."

"మరో మాటలో చెప్పాలంటే, నేను నా వస్తువును "క్లీన్ అప్" చేయడానికి క్లోజ్ మెథడ్‌ని ఓవర్‌రైడ్ చేయాలి మరియు అందులో కోడ్‌ను వ్రాయాలి మరియు నేను మరొక పద్ధతిని పేర్కొనలేను?"

"అవును. కానీ మీరు అనేక వస్తువులను పేర్కొనవచ్చు-వాటిని సెమికోలన్‌తో వేరు చేయండి:"

try(
InputStream is = new FileInputStream("c:/file.txt");
OutputStream os = new FileOutputStream("c:/output.txt")
)
{
 is.read(…);
 os.write(…);
}

"ఇది మంచిది, కానీ నేను ఆశించినంత చల్లగా లేదు."

"అది అంత చెడ్డది కాదు. మీరు అలవాటు చేసుకుంటారు. కాలక్రమేణా."