आपल्याला माहित आहे की, Java भाषा ही एक ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग भाषा आहे. दुसर्या शब्दांत, मूलभूत संकल्पना, म्हणजे पायाचा पाया, सर्व काही एक वस्तू आहे. वर्ग वापरून ऑब्जेक्ट्सचे वर्णन केले आहे. वर्ग, यामधून, स्थिती आणि वर्तन परिभाषित करतात. उदाहरणार्थ, बँक खात्यामध्ये खात्यातील पैशांची स्थिती असू शकते आणि खात्यातील शिल्लक वाढणारी आणि कमी करणारी वर्तणूक असू शकते. जावामध्ये, वर्तन पद्धतींद्वारे लागू केले जातात. पद्धती कशा परिभाषित करायच्या हे शिकणे तुमच्या Java अभ्यासाच्या अगदी सुरुवातीला येते. उदाहरणार्थ, ओरॅकलच्या अधिकृत ट्यूटोरियलमध्ये, " मेथड्स परिभाषित करणे " या शीर्षकाखाली . येथे दोन महत्त्वाच्या गोष्टी लक्षात घेण्यासारख्या आहेत:
- प्रत्येक पद्धतीची स्वाक्षरी असते. स्वाक्षरीमध्ये पद्धतीचे नाव आणि त्याचे इनपुट पॅरामीटर्स असतात.
- पद्धतींसाठी परतावा प्रकार निर्दिष्ट करणे आवश्यक आहे. तुम्ही मेथड डिक्लेरेशनमध्ये मेथडचा रिटर्न प्रकार घोषित करता.
जावा मध्ये रिटर्न काय करतो
येथे ओरॅकल ट्युटोरियलमध्ये वर्णन केल्याप्रमाणे रिटर्न कीवर्ड हे कंट्रोल फ्लो स्टेटमेंट आहे . अधिकृत ट्यूटोरियलच्या " पद्धतीतून मूल्य परत करणे " विभागात मूल्ये कशी परत करायची याबद्दल देखील तुम्ही वाचू शकता . मेथडचे रिटर्न व्हॅल्यू मेथडच्या निर्दिष्ट रिटर्न प्रकाराशी जुळते की नाही हे कंपाइलर काळजीपूर्वक मागोवा ठेवतो. उदाहरण विचारात घेण्यासाठी Tutorialspoint चा Online IDE वापरू . आद्य उदाहरण पाहू:
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello World");
}
}
जसे आपण पाहू शकतो, मुख्य पद्धत येथे कार्यान्वित केली आहे, जी प्रोग्रामचा प्रवेश बिंदू आहे. कोडच्या ओळी वरपासून खालपर्यंत कार्यान्वित केल्या जातात. आमची मुख्य पद्धत मूल्य परत करू शकत नाही. आम्ही तेथे मूल्य परत करण्याचा प्रयत्न केल्यास, आम्हाला एक त्रुटी मिळेल: "त्रुटी: मुख्य पद्धत शून्य प्रकाराचे मूल्य परत करणे आवश्यक आहे" . त्यानुसार, पद्धत फक्त स्क्रीनवर आउटपुट करते. आता संदेश व्युत्पन्न करण्यासाठी स्ट्रिंग अक्षरशः वेगळ्या पद्धतीमध्ये हलवू:
public class HelloWorld {
public static void main(String[] args) {
System.out.println(getHelloMessage());
}
public static String getHelloMessage() {
return "Hello World";
}
}
जसे आपण पाहू शकतो, रिटर्न व्हॅल्यू दर्शविण्यासाठी आम्ही रिटर्न कीवर्ड वापरला होता , जो आम्ही नंतर println पद्धतीने पास केला. getHelloMessage पद्धतीची घोषणा सूचित करते की पद्धत स्ट्रिंग परत करेल . हे कंपाइलरला मेथडच्या कृती कशा प्रकारे घोषित केल्या जातात त्याच्याशी सुसंगत आहेत हे तपासण्याची परवानगी देते. साहजिकच, मेथड डिक्लेरेशनमध्ये निर्दिष्ट केलेला रिटर्न प्रकार कोडमध्ये प्रत्यक्षात परत केलेल्या व्हॅल्यूच्या प्रकारापेक्षा विस्तृत असू शकतो, म्हणजे महत्त्वाची गोष्ट म्हणजे प्रकार रूपांतरण शक्य आहे. अन्यथा, संकलित वेळी आम्हाला एक त्रुटी मिळेल: "त्रुटी: विसंगत प्रकार" . तसे, तुम्हाला कदाचित प्रश्न पडला असेल: परत का आहेनियंत्रण प्रवाह विधान मानले? कारण ते प्रोग्रामच्या सामान्य टॉप-डाउन फ्लोमध्ये व्यत्यय आणू शकते. उदाहरण:
public class HelloWorld {
public static void main(String[] args) {
if (args.length == 0) {
return;
}
for (String arg : args) {
System.out.println(arg);
}
}
}
जसे तुम्ही उदाहरणावरून पाहू शकता, आम्ही जावा प्रोग्राममधील मुख्य पद्धतीला वितर्कांशिवाय कॉल केल्यास त्यात व्यत्यय आणतो. हे लक्षात ठेवणे महत्त्वाचे आहे की जर तुमच्याकडे रिटर्न स्टेटमेंट नंतर कोड असेल, तर तो प्रवेश करता येणार नाही. आमचा स्मार्ट कंपाइलर हे लक्षात घेईल आणि तुम्हाला असा प्रोग्राम चालवण्यापासून प्रतिबंधित करेल. उदाहरणार्थ, हा कोड संकलित करत नाही:
public static void main(String[] args) {
System.out.println("1");
return;
// we use output method after return statement, which is incorrect
System.out.println("2");
}
याभोवती मिळविण्यासाठी एक गलिच्छ खाच आहे. उदाहरणार्थ, डीबगिंग हेतूंसाठी किंवा इतर काही कारणांसाठी. रिटर्न स्टेटमेंटला if ब्लॉकमध्ये गुंडाळून वरील कोड निश्चित केला जाऊ शकतो :
if (2==2) {
return;
}
त्रुटी हाताळताना विवरण परत करा
आणखी काही खूप अवघड आहे - आम्ही त्रुटी हाताळणीसह रिटर्न वापरू शकतो. मला लगेच सांगायचे आहे की कॅच ब्लॉकमध्ये रिटर्न स्टेटमेंट वापरणे हे अतिशय वाईट प्रकार आहे, त्यामुळे तुम्ही ते टाळले पाहिजे. पण आपल्याला एक उदाहरण हवे आहे, बरोबर? येथे आहे:
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Value: " + getIntValue());
}
public static int getIntValue() {
int value = 1;
try {
System.out.println("Something terrible happens");
throw new Exception();
} catch (Exception e) {
System.out.println("Cached value: " + value);
return value;
} finally {
value++;
System.out.println("New value: " + value);
}
}
}
पहिल्या दृष्टीक्षेपात, असे दिसते की 2 परत केले पाहिजे, कारण शेवटी नेहमी अंमलात आणले जाते. पण नाही, रिटर्न व्हॅल्यू 1 असेल आणि शेवटी ब्लॉकमधील व्हेरिएबलमधील बदल दुर्लक्षित केला जाईल. शिवाय, समजा त्या व्हॅल्यूमध्ये ऑब्जेक्ट आहे आणि शेवटी ब्लॉकमध्ये आपण value = null म्हणतो . मग ती वस्तू, शून्य नव्हे, कॅच ब्लॉकमध्ये परत केली जाईल . परंतु रिटर्न स्टेटमेंट शेवटी ब्लॉकमध्ये योग्यरित्या कार्य करेल . साहजिकच, रिटर्न स्टेटमेंट्सचा समावेश असलेल्या छोट्या आश्चर्यांसाठी तुमचे सहकारी तुमचे आभार मानणार नाहीत.
void.class
आणि शेवटी. अशी विचित्र रचना आहे जी तुम्ही लिहू शकता: void.class . हम्म. का आणि त्याचा अर्थ काय? जावा रिफ्लेक्शन API चा समावेश असलेली विविध फ्रेमवर्क आणि अवघड प्रकरणे आहेत जिथे हे खूप उपयुक्त असू शकते. उदाहरणार्थ, कोणत्या प्रकारची पद्धत परत येते ते तुम्ही तपासू शकता:
import java.lang.reflect.Method;
public class HelloWorld {
public void getVoidValue() {
}
public static void main(String[] args) {
for (Method method : HelloWorld.class.getDeclaredMethods()) {
System.out.println(method.getReturnType() == void.class);
}
}
}
हे चाचणी फ्रेमवर्कमध्ये उपयुक्त ठरू शकते जेथे तुम्हाला पद्धतींमध्ये वास्तविक कोड पुनर्स्थित करणे आवश्यक आहे. परंतु हे करण्यासाठी, आपल्याला पद्धत कशी वागते हे समजून घेणे आवश्यक आहे (म्हणजे ते कोणत्या प्रकारात परत येते). वरील कोडमधील मुख्य पद्धत लागू करण्याचा दुसरा मार्ग देखील आहे :
public static void main(String[] args) {
for (Method method : HelloWorld.class.getDeclaredMethods()) {
System.out.println(method.getReturnType() == Void.TYPE);
}
}
स्टॅक ओव्हरफ्लोवर तुम्ही या दोघांमधील फरकाची एक अतिशय मनोरंजक चर्चा वाचू शकता: java.lang.Void आणि void मधील फरक काय आहे?
GO TO FULL VERSION