अंतिम आणि इतर Java कीवर्ड - 1

"हाय, अमिगो!"

"हाय, बिलाबो!"

"आज मी तुम्हाला Java मधील अनेक कीवर्डबद्दल सांगणार आहे. पण मी सर्वात मनोरंजक शब्दाने सुरुवात करेन: अंतिम कीवर्ड. "

" एखादे व्हेरिएबल, पद्धत किंवा वर्ग घोषित करताना तुम्ही अंतिम कीवर्ड वापरू शकता ."

"आणि आम्हाला फायनलची गरज का आहे?"

"हे अगदी सोपे आहे. जर आपण व्हेरिएबलला अंतिम म्हणून चिन्हांकित केले, तर ते अपरिवर्तनीय होईल:"

final int i = 5;
i++; //Compilation error: the value of i cannot be changed.

"मी बघतो."

"जर आपण एखादी पद्धत अंतिम म्हणून चिन्हांकित केली, तर व्युत्पन्न वर्गांमध्ये पद्धत ओव्हरराइड करण्यास मनाई आहे:"

class Cat
{
 public final String getName()
 {
  return "cat";
 }
}

class Tiger extends Cat
{
 public String getName() //Compilation error: overriding the getName()
 {
  return "tiger";
 }
}

"मी बघतो. पण तुम्हाला एखादी पद्धत ओव्हरराइड करण्यास मनाई करण्याची गरज का आहे?"

"ठीक आहे, एक उदाहरण म्हणून, समजा की एखाद्या प्रोग्रामरने एका पद्धतीमध्ये बरेच महत्त्वाचे कोड लिहिले आहेत आणि त्याच्या वर्गाचा वारसा मिळालेल्या सर्व वर्गांना निर्दिष्ट वर्तन असेल याची हमी देऊ इच्छित आहे."

"आणि शेवटी, तिसरा वापर."

"जर आपण कीवर्ड फायनलने क्लास चिन्हांकित केला, तर तो वारसा मिळू शकत नाही."

public final class Cat
{
 public String getName()
 {
  return "cat";
 }
}

class Tiger extends Cat //Compilation error: the Cat class cannot be
{
 public String getName()
 {
  return "tiger";
 }
}

"आणि आम्ही वर्गाला वारसा मिळण्यापासून का रोखू?"

"तुम्ही हे समजून घेतले पाहिजे की आम्ही वारसा त्रासदायक होण्यापासून रोखत नाही, परंतु सुरक्षितता आणि कोडच्या अखंडतेसाठी. जर वर्ग वारसा प्रतिबंधित नसेल, तर त्याचा अर्थ असा आहे की त्याला परवानगी आहे. आणि वर्गाने लिहिलेला कोड डिझायनर या वर्गातील वस्तू तसेच कोणत्याही व्युत्पन्न वर्गाच्या वस्तूंसाठी योग्यरित्या कार्य करेल."

"परंतु जर एखाद्या विकसकाला हे समजले की त्याच्या वर्गात अगदी लहान बदलांमुळे सर्व काही अपेक्षेप्रमाणे कार्य करणे थांबवेल, तर वारसा मनाई करणे चांगले आहे."

"उदाहरणार्थ, सर्व आदिम प्रकारांप्रमाणे, स्ट्रिंग वर्ग अंतिम म्हणून घोषित केला जातो: पूर्णांक, बुलियन, दुहेरी, वर्ण..."

"अहो, समजले. स्ट्रिंग क्लास एक अपरिवर्तनीय वर्ग म्हणून तयार केला गेला आणि जर ते अचानक बदलता आले तर बर्‍याच गोष्टी काम करणे थांबवतील."

"ठीक आहे, जवळजवळ. आपण हे असे ठेवूया: सर्वकाही जवळजवळ पूर्वीप्रमाणेच कार्य करेल, परंतु काहीवेळा अशा त्रुटी असतील ज्या शोधणे आणि समजणे खूप कठीण होईल. म्हणून, काही प्रकरणांमध्ये, वर्ग किंवा पद्धतींचा वारसा घेणे खरोखर पाप नाही, परंतु त्यास मनाई करणे म्हणजे नंतर पकडण्यासाठी कमी चुका."

"तुम्ही अंतिम कुठे वापरू शकता?"

"तुम्ही फंक्शन पॅरामीटर्सच्या आधी फायनल आणि मेथडमध्ये व्हेरिएबल्सच्या आधी वापरू शकता. येथे एक उदाहरण आहे:"

public void setName(final String name)
{
 final String displayName = "Mr."+ name;this.name = displayName;
}

"आणि त्यात काय मुद्दा आहे?"

"ठीक आहे, तेथे दोन आहेत. प्रथम, जर आम्हाला इतर विकासकांना सांगायचे असेल की हे मूल्य एक विशिष्ट स्थिरांक आहे, फक्त एक चल नाही तर आम्ही व्हेरिएबल अंतिम म्हणून घोषित करतो."

उदाहरणार्थ, आम्ही किमतीवर आधारित विक्रीकराची गणना करू इच्छितो:

public int getPriceNDS()
{
 final int NDS = 20;
 return this.price * NDS / 200;
}

"आणि दुसरे, स्थानिक किंवा निनावी अंतर्गत वर्ग लिहिताना आम्हाला या प्रकारच्या व्हेरिएबलची आवश्यकता आहे. मी तुम्हाला या प्रकारच्या वर्गांबद्दल लवकरच सांगेन. पण आज नाही."

"ठीक आहे, आतापर्यंत काहीही फार क्लिष्ट झाले नाही."

"कृपया लक्षात घ्या की फक्त व्हेरिएबल बदलू शकत नाही, एखाद्या वस्तूचा संदर्भ घेऊ शकत नाही. ऑब्जेक्ट अजूनही बदलता येऊ शकतो."

"मी खरं तर त्याबद्दल विचारणार होतो. आणि वस्तू बदलू शकत नाही का?"

"नाही, जोपर्यंत तुम्ही अपरिवर्तनीय वर्ग लिहित नाही तोपर्यंत."

"कृपया लक्षात घ्या की अंतिम व्हेरिएबलचे मूल्य बदलले जाऊ शकत नाही, तुम्ही त्याचे प्रारंभिक मूल्य त्वरित नियुक्त केले पाहिजे."

हा कोड संकलित करेल हा कोड संकलित होणार नाही
class Home
{
 private final int width = 200;
 private final int height = 100;

 public Home()
 {
 }
}
class Home
{
 private final int width;
 private final int height;

 public Home()
 {
 }
}

"परंतु, असे म्हटले आहे की, जावा तुम्हाला क्लासच्या अंतिम व्हेरिएबल्सला कंस्ट्रक्टर होईपर्यंत विलंब करू देते."

हा कोड संकलित करेल हा कोड संकलित होणार नाही
class Home
{
 private final int width = 200;
 private final int height;

 public Home()
 {
  height = 100;
 }
}
class Home
{
 private final int width;
 private final int height;

 public Home()
 {
  height = 100;
 }
}

"याव्यतिरिक्त, भिन्न कन्स्ट्रक्टर भिन्न मूल्यांसह अंतिम चल सुरू करू शकतात. हे अगदी सोयीचे आहे:"

हा कोड संकलित करेल
class Home
{
 private final int width;
 private final int height;

 public Home()
 {
  height = 100;
  width = 200;
 }

 public Home(int width)
 {
  this.height = 300;
  this.width = width;
 }

 public Home(int width, int height)
 {
  this.height = height;
  this.width = width;
 }
}

"तो खरोखरच मनोरंजक विषय होता, आणि सर्व काही अर्थपूर्ण आहे. धन्यवाद, बिलाबो!"