1. युक्तिवाद उत्तीर्ण करणे

आणि आता मजा सुरू होते. तुम्हाला कदाचित आधीच माहित असेल की अशा पद्धतींमधून System.out.println()आम्ही युक्तिवाद करू शकतो. एकदा आपण पद्धतीमध्ये आलो की, आम्ही त्यांना पॅरामीटर्स म्हणून संदर्भित करतो. खरं तर, पॅरामीटर्स पद्धती तयार करून आणि वापरून आम्हाला मिळणारे फायदे मोठ्या प्रमाणात वाढवतात.

आम्ही पॅरामीटर्ससह पद्धत कशी घोषित करू? हे प्रत्यक्षात अगदी सोपे आहे:

public static void name(parameters)
{
  method body
}

name पद्धतीचे अनन्य नाव कोठे आहे आणि method body ती पद्धत बनवणाऱ्या आज्ञांचे प्रतिनिधित्व करते. आणि parameters स्वल्पविरामाने विभक्त केलेल्या पद्धती पॅरामीटर्ससाठी प्लेसहोल्डर आहे. चला या टेम्पलेटचे अधिक तपशीलवार वर्णन करूया:

public static void name(Type1 name1, Type2 name2, Type3 name3)
{
  method body
}

उदाहरणे:

कोड स्पष्टीकरण
public static void print(String str)
{
}
printपॅरामीटरसह पद्धत घोषित केली आहे :
String str
public static void print(String str, int count)
{
}
पद्धत printदोन पॅरामीटर्ससह घोषित केली आहे:
String str
int count
public static void write(int x, int y)
{
}
पद्धत writeदोन पॅरामीटर्ससह घोषित केली आहे:
int x
int y

जर आपल्याला पद्धतीमध्ये पॅरामीटर्स असावे असे वाटत नसेल, तर आपण फक्त कंस रिकामे ठेवू.

पॅरामीटर्स हे एका पद्धतीतील विशेष चल असतात. त्यांच्या मदतीने, जेव्हा ते कॉल केले जाते तेव्हा आपण पद्धतीमध्ये विविध मूल्ये पास करू शकता.

उदाहरणार्थ, दिलेल्या संख्येने मजकूराची स्ट्रिंग दाखवणारी पद्धत लिहू.

स्क्रीनवर अनेक वेळा स्ट्रिंग प्रदर्शित करण्यासाठी कोड कसा लिहायचा हे तुम्हाला आधीच माहित आहे. पण तुम्ही कोणती स्ट्रिंग मुद्रित करावी? आणि किती वेळा? त्यासाठी आम्हाला पॅरामीटर्सची गरज आहे.

असे करणारा कोड यासारखा दिसेल:

कोड स्पष्टीकरण
class Solution
{
   public static void printLines(String text, int count)
   {
     for (int i = 0; i < count; i++)
       System.out.println(text);
   }

   public static void main(String[] args)
   {
     printLines("Hi", 10);
     printLines("Bye", 20);
   }
}


आम्ही printLinesखालील पॅरामीटर्ससह पद्धत घोषित केली:
String text, int count
पद्धत स्ट्रिंग text countवेळा दर्शवते





आम्ही printLinesविविध पॅरामीटर्ससह पद्धत कॉल करतो

प्रत्येक वेळी जेव्हा एखादी पद्धत कॉल केली जाते तेव्हा तिचे पॅरामीटर्स पास केलेली मूल्ये नियुक्त केली जातात आणि त्यानंतरच आपण मेथडमधील कमांड्स कार्यान्वित करण्यास सुरवात करतो.


2. युक्तिवाद

पॅरामीटर्ससह पद्धत कॉल करण्याकडे मी तुमचे लक्ष वेधून घेऊ इच्छितो.

मेथडला पास केलेल्या व्हॅल्यूजला सामान्यतः वितर्क म्हटले जाते जेव्हा ते मेथडमध्ये पास केले जातात.

आणखी एक उदाहरण पाहू:

कोड स्पष्टीकरण
class Solution
{
   public static void printLines(String text, int count)
   {
     for (int i = 0; i < count; i++)
       System.out.println(text);
   }

   public static void main(String[] args)
   {
     printLines("Hi", 10);
     printLines("Bye", 20);
   }
}


आम्ही printLinesखालील पॅरामीटर्ससह पद्धत घोषित केली:
String text, int count
पद्धत स्ट्रिंग text countवेळा दर्शवते




आम्ही printLinesखालील वितर्कांसह पद्धत कॉल करतो:
text = "Hi"; count = 10;
text = "Bye"; count = 20;

जेव्हा printLines पद्धत प्रथमच कॉल केली गेली, तेव्हा त्याच्या पॅरामीटर्सना खालील मूल्ये नियुक्त केली गेली:
String text = "Hi", int count = 10.

जेव्हा printLinesपद्धत दुसऱ्यांदा कॉल केली गेली, तेव्हा त्याचे पॅरामीटर्स भिन्न मूल्ये नियुक्त केले गेले:
String text = "Bye", int count = 20.

पॅरामीटर्स हे व्हेरिएबल्सपेक्षा कमी नाहीत आणि ज्यांना पद्धत कॉल केली जाते तेव्हा विशिष्ट मूल्ये नियुक्त केली जातात. मूल्ये "Hi", "Bye", 10, आणि 20स्वतःला वितर्क म्हणतात."


3. पद्धत कॉल करताना परस्परविरोधी चल नावे

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

कोड स्पष्टीकरण
class Solution
{
   public static void printLines(String text, int count)
   {
     for (int i = 0; i < count; i++)
       System.out.print(text);
   }

   public static void main(String[] args)
   {
     String str = "Hi";
     int n = 10;
     printLines(str, n);
   }
}


आम्ही printLinesखालील पॅरामीटर्ससह पद्धत घोषित केली:
String text, int count
पद्धत स्ट्रिंग text countवेळा दर्शवते







आम्ही printLinesखालील वितर्कांसह पद्धत कॉल करतो:
text = str;
count = n;

आतापर्यंत, खूप चांगले: आमच्याकडे strव्हेरिएबल आहे. textजेव्हा पद्धत कॉल केली जाते तेव्हा त्याचे मूल्य पॅरामीटरला नियुक्त केले जाते . आमच्याकडे nव्हेरिएबल आहे. जेव्हा पद्धत कॉल केली जाते तेव्हा त्याचे मूल्य पॅरामीटरला नियुक्त केले जाते count." आतापर्यंत, सर्वकाही स्पष्ट आहे.

आता या पद्धतीमध्ये आपल्या व्हेरिएबल्सचे नाव बदलूया main:

कोड स्पष्टीकरण
class Solution
{
   public static void printLines(String text, int count)
   {
     for (int i = 0; i < count; i++)
       System.out.print(text);
   }

   public static void main(String[] args)
   {
     String text = "Hi";
     int count = 10;
     printLines(text, count);
   }
}


आम्ही printLinesखालील पॅरामीटर्ससह पद्धत घोषित केली:
String text, int count
पद्धत स्ट्रिंग text countवेळा दर्शवते







आम्ही printLinesखालील वितर्कांसह पद्धत कॉल करतो:
text = text;
count = count;

दोन गोष्टींकडे लक्ष द्या

प्रथम: आपल्याकडे समान नावाचे व्हेरिएबल्स वेगवेगळ्या पद्धतींमध्ये आहेत. हे भिन्न व्हेरिएबल्स आहेत (आम्ही मुद्दाम भिन्न रंग वापरून त्यांचे चित्रण करतो). सर्व काही मागील उदाहरणाप्रमाणेच कार्य करते, जेथे पद्धतीमधील व्हेरिएबल्सचे mainनाव दिले गेले होते strआणि n.

दुसरा: जेव्हा पद्धत म्हटली जाते तेव्हा जादूचे काहीही घडत नाही. पॅरामीटर्सना फक्त वितर्क मूल्ये नियुक्त केली जातात. ते संख्या, स्ट्रिंग, व्हेरिएबल्स किंवा एक्सप्रेशन्स आहेत की नाही याची पर्वा न करता.

आम्ही मुख्य पद्धतीमध्ये व्हेरिएबल्सचे नाव बदलल्यानंतर, काहीही बदलले नाही. ते पूर्वी वेगवेगळ्या पद्धतींमध्ये भिन्न व्हेरिएबल्स होते आणि म्हणून ते राहतील. text आणि व्हेरिएबल्समध्ये कोणताही जादूचा संबंध नाही text .



4. पद्धतींचे संदर्भ उत्तीर्ण करणे

मला आशा आहे की तुम्हाला मागील धड्यातून सर्व काही समजले असेल, कारण आता आम्ही पद्धतींकडे जाणारे युक्तिवाद पुन्हा पाहणार आहोत, फक्त आम्ही अधिक खोलात जाऊ.

तुम्हाला आधीच माहित आहे की, काही Java व्हेरिएबल्स स्वतः मूल्ये साठवून ठेवत नाहीत, तर त्याऐवजी संदर्भ, म्हणजे मूल्ये असलेल्या मेमरी ब्लॉकचा पत्ता. अशा प्रकारे स्ट्रिंग व्हेरिएबल्स आणि अॅरे व्हेरिएबल्स काम करतात.

जेव्हा तुम्ही अॅरे व्हेरिएबलला दुसरे अॅरे व्हेरिएबल नियुक्त करता, तेव्हा काय होते? ते बरोबर आहे. दोन व्हेरिएबल्स मेमरीमधील समान जागेचा संदर्भ घेऊ लागतात:

पद्धतींचे संदर्भ उत्तीर्ण करणे

आणि यातील एक व्हेरिएबल पद्धत पॅरामीटर असल्यास काय होईल?

कोड स्पष्टीकरण
class Solution
{
   public static void printArraySum(int[] data)
   {
     int sum = 0;
     for (int i = 0; i < data.length; i++)
       sum = sum + data[i];
     System.out.println(sum);
   }

   public static void main(String[] args)
   {
     int[] months = {31, 28, 31, 30, 31, 30, 31, 31, 30};
     printArraySum(months);
   }
}


ही printArraySumपद्धत पास केलेल्या अॅरेमधील संख्यांची बेरीज मोजते आणि ती स्क्रीनवर दाखवते

तंतोतंत तेच घडते: data पॅरामीटरमध्ये व्हेरिएबल सारख्याच मेमरी क्षेत्राचा संदर्भ असेल months. जेव्हा पद्धत कॉल केली जाते, तेव्हा एक साधी असाइनमेंट येते: .data = months

आणि दोन्ही व्हेरिएबल्स पूर्णांक संचयित करणार्‍या मेमरीच्या समान क्षेत्राचा संदर्भ देत असल्याने, पद्धत printArraySum केवळ अॅरेमधील मूल्ये वाचू शकत नाही तर ती बदलू शकते!

उदाहरणार्थ, आम्ही आमची स्वतःची पद्धत लिहू शकतो जी समान मूल्यासह द्विमितीय अॅरे भरते. हे असे दिसते:

कोड स्पष्टीकरण
class Solution
{
   public static void fill(int[][] data, int value)
   {
     for (int i = 0; i < data.length; i++)
     {
       for (int j = 0; j < data[i].length; j++)
         data[i][j] = value;
     }
  }

   public static void main(String[] args)
   {
     int[][] months = {{31, 28}, {31, 30, 31}, {30, 31, 31}};
     fill (months, 8);
   }
}


ही fill पद्धत पास केलेल्या द्विमितीय अॅरेमधील प्रत्येक सेलवर पुनरावृत्ती करते आणि valueत्यांना नियुक्त करते.








आम्ही द्विमितीय अॅरे तयार करतो.
आम्ही संपूर्ण अॅरे क्रमांकाने भरतो 8.


5. समान नावाच्या पद्धती

आता पुन्हा एकदा पद्धतीच्या नावांकडे वळू.

Java मानकांना एकाच वर्गातील सर्व पद्धतींना अद्वितीय नावे असणे आवश्यक आहे. दुसऱ्या शब्दांत, एकाच वर्गात दोन समान नामांकित पद्धती घोषित करणे अशक्य आहे.

जेव्हा समानतेसाठी पद्धतींची तुलना केली जाते, तेव्हा केवळ नावेच विचारात घेतली जात नाहीत तर पॅरामीटर्सचे प्रकार देखील विचारात घेतले जातात ! लक्षात घ्या की पॅरामीटर्सची नावे विचारात घेतली जात नाहीत . उदाहरणे:

कोड स्पष्टीकरण
void fill(int[] data, int value) {
}
void fill(int[][] data, int value) {
}
void fill(int[][][] data, int value)  {
}
या तीन पद्धती वेगवेगळ्या पद्धती आहेत. ते एकाच वर्गात घोषित केले जाऊ शकतात.
void print(String str) {
}
void print(String str, String str2) {
}
void print(int val) {
}
void print(double val) {
}
void print() {
}
या पाच पद्धतींपैकी प्रत्येक वेगळी मानली जाते . ते एकाच वर्गात घोषित केले जाऊ शकतात.
void sum(int x, int y) {
}
void sum(int data, int value) {
}
या दोन पद्धती समान मानल्या जातात , म्हणजे त्या एकाच वर्गात घोषित केल्या जाऊ शकत नाहीत.

काही पद्धती एकसारख्या का मानल्या जातात , तर काही वेगळ्या का असतात ? आणि पद्धतीची विशिष्टता ठरवताना पॅरामीटरची नावे का विचारात घेतली जात नाहीत?

विशिष्टता अजिबात का आवश्यक आहे? गोष्ट अशी आहे की जेव्हा कंपाइलर प्रोग्राम संकलित करतो, तेव्हा त्याला माहित असणे आवश्यक आहे की आपण कोणत्याही ठिकाणी कॉल करू इच्छिता.

उदाहरणार्थ, तुम्ही लिहिल्यास , कंपाइलर स्मार्ट आहे आणि तुम्ही पॅरामीटरसह पद्धत येथे कॉल करू इच्छिता असा सहज निष्कर्ष काढेल .System.out.println("Hi")println()String

परंतु तुम्ही लिहिल्यास , कंपाइलरला पॅरामीटरसह मेथडला कॉल दिसेल .System.out.println(1.0)println()double

जेव्हा एखादी पद्धत कॉल केली जाते, तेव्हा कंपाइलर हे सुनिश्चित करतो की वितर्कांचे प्रकार पॅरामीटर्सच्या प्रकारांशी जुळतात. वादांच्या नावावर ते लक्ष देत नाही. Java मध्ये, पॅरामीटर नावे कंपाइलरला कोणती पद्धत कॉल करायची हे निर्धारित करण्यात मदत करत नाहीत. आणि म्हणूनच एखाद्या पद्धतीची विशिष्टता ठरवताना ते विचारात घेतले जात नाहीत.

पद्धतीचे नाव आणि त्याच्या पॅरामीटर्सच्या प्रकारांना पद्धत स्वाक्षरी म्हणतात . उदाहरणार्थ,sum(int, int)

प्रत्येक वर्गात अद्वितीय नाव असलेल्या पद्धतींऐवजी अद्वितीय स्वाक्षरी असलेल्या पद्धती असणे आवश्यक आहे .