जावा में, कीवर्ड 'अंतिम', 'आखिर' और 'अंतिम रूप' को किस उद्देश्य से पूरा करते हैं? [बन्द है]


82

जावा में, क्या प्रयोजन कीवर्ड करना final, finallyऔर finalizeपूरा?


4
होमवर्क का सवाल? allu.wordpress.com/2006/11/08/…
ग्रे

12
वे तुलनीय अवधारणाएं भी नहीं हैं। वे बस वैसे ही वर्तनी के लिए होते हैं। कुछ पढ़ते हैं।
मार्सेलो कैंटोस

3
उनका एक-दूसरे से कोई संबंध नहीं है - पूरी तरह असंबंधित, वैचारिक रूप से। प्रत्येक अलग से अध्ययन करें।
एड स्टब

7
इसे बंद नहीं किया जाना चाहिए क्योंकि यह अपेक्षाकृत सामान्य प्रश्न प्रतीत होता है।
डेविड टिटारेनो

1
एक अच्छे उत्तर के कारण फिर से खुलने के लिए मतदान किया गया, जो उन उपयोगकर्ताओं के लिए उपयोगी हो सकता है जो यहाँ लैंड करते हैं।
एकप्पा

जवाबों:


272

अंतिम

final एक चर "अपरिवर्तनीय" को चिह्नित करने के लिए इस्तेमाल किया जा सकता है

private final String name = "foo";  //the reference name can never change

final एक विधि भी नहीं बना सकते हैं "overrideable"

public final String toString() {  return "NULL"; }

finalएक वर्ग को "अंतर्निहित" भी नहीं बना सकता है। अर्थात वर्ग को उपवर्गित नहीं किया जा सकता है।

public final class finalClass {...}
public class classNotAllowed extends finalClass {...} // Not allowed

आखिरकार

finallyकोड "हमेशा" निष्पादित करने के लिए एक कोशिश / पकड़ने के बयान में प्रयोग किया जाता है

lock.lock();
try {
  //do stuff
} catch (SomeException se) {
  //handle se
} finally {
  lock.unlock(); //always executed, even if Exception or Error or se
}

जावा 7 में संसाधनों के बयान के साथ एक नया प्रयास है जिसे आप स्वचालित रूप से संसाधनों को बंद करने के लिए उपयोग कर सकते हैं जो स्पष्ट रूप से या स्पष्ट रूप से java.io.Closeable या java.lang.AutoCloseable को लागू कर सकते हैं

को अंतिम रूप देने

finalizeकहा जाता है जब एक वस्तु कचरा एकत्र किया जाता है। आपको शायद ही कभी इसे ओवरराइड करने की आवश्यकता है। एक उदाहरण:

protected void finalize() {
  //free resources (e.g. unallocate memory)
  super.finalize();
}

18
जावा की अधिकांश पुस्तकों से बेहतर उत्तर !!
डायरी

3
धन्यवाद। इस उत्तर को अन्य लोगों की तुलना में अच्छी तरह से समझाया गया है जो उन्हें "विशेषज्ञ" कहते हैं।
3

2
अच्छा जवाब है लेकिन अंतिम विधि का हस्ताक्षर गलत है।
समर्थ शाह

नोट:Object#finalize() विधि जावा 9 (में पदावनत किया गया था JDK-8,165,641 )।
slaw

19
  • "फाइनल" दर्शाता है कि कुछ बदला नहीं जा सकता। आप आमतौर पर इसे स्थिर वैरिएबल पर उपयोग करना चाहते हैं जो आपके कार्यक्रम के पूरे जीवन में समान मूल्य रखेगा।
  • "अंत में एक कोशिश / पकड़ ब्लॉक के साथ संयोजन के रूप में प्रयोग किया जाता है। "अंततः" खंड के अंदर कुछ भी निष्पादित किया जाएगा, भले ही 'कोशिश' ब्लॉक में कोड एक अपवाद को फेंकता है या नहीं।
  • JVM द्वारा किसी वस्तु को एकत्रित करने से पहले "अंतिम रूप" कहा जाता है।

6

अंतिम कीवर्ड का उपयोग स्थिरांक घोषित करने के लिए किया जाता है।

final int FILE_TYPE = 3;

अंततः कीवर्ड का उपयोग कोड के एक खंड को निर्दिष्ट करने के लिए एक फेक कैच स्टेटमेंट में किया जाता है, भले ही फेक अपवादों की परवाह किए बिना निष्पादित करने के लिए।

try
{
  //stuff
}
catch(Exception e)
{
  //do stuff
}
finally
{
  //this is always run
}

और अंत में (हाहा), अंतिम रूप से पूरी तरह सुनिश्चित नहीं है कि एक कीवर्ड है, लेकिन ऑब्जेक्ट क्लास में एक अंतिम रूप () फ़ंक्शन है।


6

http://allu.wordpress.com/2006/11/08/difference-between-final-finally-and-finalize/

अंतिम - निरंतर घोषणा।

अंत में - अंततः ब्लॉक हमेशा निष्पादित होता है जब सिस्टम ब्लॉक बाहर निकलता है, सिवाय System.exit (0) कॉल के। यह सुनिश्चित करता है कि अंत में ब्लॉक निष्पादित किया जाता है भले ही एक अप्रत्याशित अपवाद हो। लेकिन अंत में अपवाद अपवाद से अधिक के लिए उपयोगी है - यह प्रोग्रामर को गलती से वापसी, जारी रखने या तोड़ने के द्वारा बाईपास किए गए सफाई कोड से बचने की अनुमति देता है। अंत में ब्लॉक में सफाई कोड डालना हमेशा एक अच्छा अभ्यास होता है, तब भी जब कोई अपवाद प्रत्याशित न हो।

अंतिम रूप () - विधि कचरा संग्रहण में मदद करती है। कचरा कलेक्टर द्वारा किसी वस्तु को त्यागने से पहले एक विधि को लागू किया जाता है, जिससे वह अपने राज्य को साफ कर सकता है। गैर-स्मृति संसाधनों जैसे फ़ाइल हैंडल, सॉकेट, डेटाबेस कनेक्शन आदि को जारी करने के लिए उपयोग नहीं किया जाना चाहिए क्योंकि जावा में इन संसाधनों की केवल एक सीमित संख्या है और आपको पता नहीं है कि इन गैर-स्मृति संसाधनों को जारी करने के लिए कचरा संग्रह कब किक करने जा रहा है अंतिम रूप () विधि के माध्यम से।

क्या आपने Google पर खोज करने का प्रयास किया, और स्पष्टीकरण के लिए स्पष्टीकरण की आवश्यकता है?


4
ढेर अतिप्रवाह में आपका स्वागत है! हालांकि यह लेख वास्तव में प्रश्न का उत्तर दे सकता है, लेकिन उत्तर के आवश्यक भागों को शामिल करना और संदर्भ के लिए लिंक प्रदान करना बेहतर होगा । स्टैक ओवरफ्लो केवल उतना ही उपयोगी है जितना कि इसके प्रश्न और उत्तर, और यदि यह ब्लॉग होस्ट नीचे चला जाता है या यूआरएल चारों ओर चला जाता है, तो यह उत्तर बेकार हो जाता है। धन्यवाद!
23

6

अंतिम: अंतिम एक कीवर्ड है। अंतिम रूप में घोषित चर को केवल एक बार आरंभ किया जाना चाहिए और इसे बदला नहीं जा सकता है। अंतिम के रूप में घोषित जावा कक्षाओं को बढ़ाया नहीं जा सकता। अंतिम घोषित की गई विधियों को ओवरराइड नहीं किया जा सकता है।

अंत में: अंत में एक ब्लॉक है। अंततः ब्लॉक हमेशा निष्पादित होता है जब कोशिश ब्लॉक से बाहर निकलता है। यह सुनिश्चित करता है कि अंत में ब्लॉक को निष्पादित किया जाता है, भले ही एक अप्रत्याशित अपवाद हो। लेकिन अंत में अपवाद अपवाद से अधिक के लिए उपयोगी है - यह प्रोग्रामर को गलती से वापसी, जारी रखने या तोड़ने के द्वारा बाईपास किए गए सफाई कोड से बचने की अनुमति देता है। अंत में ब्लॉक में सफाई कोड डालना हमेशा एक अच्छा अभ्यास होता है, तब भी जब कोई अपवाद प्रत्याशित न हो।

अंतिम रूप देना: अंतिम रूप देना एक विधि है। किसी वस्तु को कचरा एकत्र करने से पहले, रनटाइम सिस्टम उसकी अंतिम () विधि कहता है। कचरा एकत्र होने से पहले आप सिस्टम रिसोर्स रिलीज़ कोड को अंतिम रूप () विधि में लिख सकते हैं।


2

1. फाइनल • फाइनल का इस्तेमाल क्लास, मेथड और वेरिएबल पर प्रतिबंध लगाने के लिए किया जाता है। • अंतिम वर्ग को विरासत में नहीं दिया जा सकता है, अंतिम विधि को ओवरराइड नहीं किया जा सकता है और अंतिम चर मूल्य को नहीं बदला जा सकता है। • अंतिम चर को निर्माण के समय प्रारंभिक अंतिम चर के मामले में छोड़ दिया जाता है जो कंस्ट्रक्टर में आरंभीकृत होता है। • फाइनल एक कीवर्ड है।

2. अंत में - अंत में कोशिश और पकड़ने के साथ अपवाद हैंडलिंग के लिए उपयोग किया जाता है। • यह निष्पादित किया जाएगा कि अपवाद को संभाला गया है या नहीं। • इस ब्लॉक का उपयोग डेटाबेस कनेक्शन, I / O संसाधनों जैसे संसाधनों को बंद करने के लिए किया जाता है। • अंत में एक ब्लॉक है।

3. अंतिम रूप • सफाई प्रक्रिया को पूरा करने के लिए पात्र वस्तुओं को इकट्ठा करने से पहले कचरा संग्रह थ्रेड द्वारा अंतिम रूप दिया जाता है। • किसी भी सफाई को करने के लिए वस्तु के लिए यह अंतिम मौका है, लेकिन चूंकि यह गारंटी नहीं है कि अंतिम रूप से () कहा जाएगा, अंतिम कॉल तक संसाधन रखने के लिए इसका बुरा अभ्यास। • अंतिम रूप एक विधि है।


0

जावा में अंतिम का अर्थ है: -एक चर के लिए लागू का मतलब है कि संबंधित चर एक बार शुरू होने के बाद अब संशोधित नहीं किया जा सकता है

private final double numer = 12;

यदि आप इस मान को संशोधित करने का प्रयास करते हैं, तो आपको एक त्रुटि मिलेगी।

-एक विधि के लिए लागू का मतलब है कि संबंधित विधि को ओवरराइड नहीं किया जा सकता है

 public final void displayMsg()
    {
        System.out.println("I'm in Base class - displayMsg()");
    }

लेकिन अंतिम विधि विरासत में मिल सकती है क्योंकि अंतिम कीवर्ड विधि के पुनर्निर्धारण को प्रतिबंधित करता है।

एक वर्ग के लिए लागू का मतलब है कि संबंधित वर्ग को बढ़ाया नहीं जा सकता है।

class Base
{

    public void displayMsg()
    {
        System.out.println("I'm in Base class - displayMsg()");
    }
}

अंत में अर्थ है:

class TestFinallyBlock{  
  public static void main(String args[]){  
  try{  
   int data=25/5;  
   System.out.println(data);  
  }  
  catch(NullPointerException e){System.out.println(e);}  
  finally{System.out.println("finally block is always executed");}  
  System.out.println("rest of the code...");  
  }  
} 

इस छूट में भले ही ट्राइ-कैच निष्पादित हो या न हो, आखिर अंदर क्या है हमेशा निष्पादित किया जाएगा। अंतिम अर्थ:

class FinalizeExample{  
public void finalize(){System.out.println("finalize called");}  
public static void main(String[] args){  
FinalizeExample f1=new FinalizeExample();  
FinalizeExample f2=new FinalizeExample();  
f1=null;  
f2=null;  
System.gc();  
}}  

कचरा उठाने वाले को बुलाने से पहले।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.