Java - Yöntemler

Java yöntemi, bir işlemi gerçekleştirmek için birlikte gruplandırılan ifadeler koleksiyonudur. System.out'u aradığınızda.println() yöntem, örneğin, sistem konsolda bir mesaj görüntülemek için aslında birkaç deyimi yürütür.

Şimdi, dönüş değerleri olan veya olmayan kendi yöntemlerinizi nasıl oluşturacağınızı, parametreli veya parametresiz bir yöntemi nasıl çağıracağınızı ve program tasarımında yöntem soyutlamasını nasıl uygulayacağınızı öğreneceksiniz.

Yöntem Oluşturma

Bir yöntemin söz dizimini açıklamak için aşağıdaki örneği göz önünde bulundurarak -

Syntax

public static int methodName(int a, int b) {
   // body
}

Buraya,

  • public static - değiştirici

  • int - dönüş türü

  • methodName - yöntemin adı

  • a, b - resmi parametreler

  • int a, int b - parametrelerin listesi

Yöntem tanımı, bir yöntem başlığı ve bir yöntem gövdesinden oluşur. Aynısı aşağıdaki söz diziminde gösterilmektedir -

Syntax

modifier returnType nameOfMethod (Parameter List) {
   // method body
}

Yukarıda gösterilen sözdizimi şunları içerir -

  • modifier - Yöntemin erişim türünü tanımlar ve kullanımı isteğe bağlıdır.

  • returnType - Yöntem bir değer döndürebilir.

  • nameOfMethod- Bu yöntem adıdır. Yöntem imzası, yöntem adı ve parametre listesinden oluşur.

  • Parameter List- Parametrelerin listesi, bir yöntemin türü, sırası ve parametrelerinin sayısıdır. Bunlar isteğe bağlıdır, yöntem sıfır parametre içerebilir.

  • method body - Yöntem gövdesi, yöntemin ifadelerle ne yaptığını tanımlar.

Example

İşte adı verilen yukarıda tanımlanan yöntemin kaynak kodu min(). Bu yöntem iki parametre num1 ve num2 alır ve ikisi arasındaki maksimum değeri döndürür -

/** the snippet returns the minimum between two numbers */

public static int minFunction(int n1, int n2) {
   int min;
   if (n1 > n2)
      min = n2;
   else
      min = n1;

   return min; 
}

Yöntem Çağrısı

Bir yöntemi kullanmak için çağrılmalıdır. Bir yöntemin çağrılmasının iki yolu vardır, yani yöntem bir değer döndürür veya hiçbir şey döndürmez (dönüş değeri yok).

Yöntem çağırma süreci basittir. Bir program bir yöntemi çağırdığında, program kontrolü çağrılan yönteme aktarılır. Bu çağrılan yöntem, daha sonra iki koşulda arayana denetimi döndürür:

  • dönüş ifadesi yürütülür.
  • kapanış ayracını sonlandıran yönteme ulaşır.

Void döndüren yöntemler bir ifadeye çağrı olarak kabul edilir. Bir örnek düşünelim -

System.out.println("This is tutorialspoint.com!");

Değer döndüren yöntem aşağıdaki örnekle anlaşılabilir -

int result = sum(6, 9);

Aşağıda, bir yöntemin nasıl tanımlanacağını ve nasıl çağrılacağını gösteren örnek verilmiştir -

Example

public class ExampleMinNumber {
   
   public static void main(String[] args) {
      int a = 11;
      int b = 6;
      int c = minFunction(a, b);
      System.out.println("Minimum Value = " + c);
   }

   /** returns the minimum of two numbers */
   public static int minFunction(int n1, int n2) {
      int min;
      if (n1 > n2)
         min = n2;
      else
         min = n1;

      return min; 
   }
}

Bu, aşağıdaki sonucu verecektir -

Output

Minimum value = 6

Boş Anahtar Kelime

Void anahtar sözcüğü, bir değer döndürmeyen yöntemler oluşturmamızı sağlar. Burada, aşağıdaki örnekte bir void method methodRankPoints düşünüyoruz . Bu yöntem, herhangi bir değer döndürmeyen void yöntemidir. Bir void yöntemine yapılan çağrı bir ifade olmalıdır, yani methodRankPoints (255.7); . Aşağıdaki örnekte gösterildiği gibi noktalı virgülle biten bir Java ifadesidir.

Example

public class ExampleVoid {

   public static void main(String[] args) {
      methodRankPoints(255.7);
   }

   public static void methodRankPoints(double points) {
      if (points >= 202.5) {
         System.out.println("Rank:A1");
      }else if (points >= 122.4) {
         System.out.println("Rank:A2");
      }else {
         System.out.println("Rank:A3");
      }
   }
}

Bu, aşağıdaki sonucu verecektir -

Output

Rank:A1

Parametreleri Değere Göre Geçirme

Çağırma süreci altında çalışırken, argümanlar iletilmelidir. Bunlar, yöntem spesifikasyonundaki ilgili parametreler ile aynı sırada olmalıdır. Parametreler değere göre veya referans olarak aktarılabilir.

Parametreleri Değere Göre Geçirme, bir parametresi olan bir yöntemi çağırmak demektir. Bu sayede argüman değeri parametreye aktarılır.

Example

Aşağıdaki program, parametreyi değere göre geçirmenin bir örneğini göstermektedir. Bağımsız değişkenlerin değerleri, yöntem çağrıldıktan sonra bile aynı kalır.

public class swappingExample {

   public static void main(String[] args) {
      int a = 30;
      int b = 45;
      System.out.println("Before swapping, a = " + a + " and b = " + b);

      // Invoke the swap method
      swapFunction(a, b);
      System.out.println("\n**Now, Before and After swapping values will be same here**:");
      System.out.println("After swapping, a = " + a + " and b is " + b);
   }

   public static void swapFunction(int a, int b) {
      System.out.println("Before swapping(Inside), a = " + a + " b = " + b);
      
      // Swap n1 with n2
      int c = a;
      a = b;
      b = c;
      System.out.println("After swapping(Inside), a = " + a + " b = " + b);
   }
}

Bu, aşağıdaki sonucu verecektir -

Output

Before swapping, a = 30 and b = 45
Before swapping(Inside), a = 30 b = 45
After swapping(Inside), a = 45 b = 30

**Now, Before and After swapping values will be same here**:
After swapping, a = 30 and b is 45

Yöntem Aşırı Yükleme

Bir sınıf aynı ada ancak farklı parametrelere sahip iki veya daha fazla yönteme sahip olduğunda, bu yöntem aşırı yükleme olarak bilinir. Geçersiz kılmaktan farklıdır. Geçersiz kılmada, bir yöntem aynı yöntem adına, türüne, parametre sayısına vb. Sahiptir.

Minimum tam sayı türü sayısını bulmak için daha önce tartışılan örneği ele alalım. Diyelim ki minimum sayıda double türü bulmak istiyoruz. Daha sonra aynı isimde ancak farklı parametrelere sahip iki veya daha fazla yöntem oluşturmak için aşırı yükleme kavramı tanıtılacaktır.

Aşağıdaki örnek aynı şeyi açıklıyor -

Example

public class ExampleOverloading {

   public static void main(String[] args) {
      int a = 11;
      int b = 6;
      double c = 7.3;
      double d = 9.4;
      int result1 = minFunction(a, b);
      
      // same function name with different parameters
      double result2 = minFunction(c, d);
      System.out.println("Minimum Value = " + result1);
      System.out.println("Minimum Value = " + result2);
   }

   // for integer
   public static int minFunction(int n1, int n2) {
      int min;
      if (n1 > n2)
         min = n2;
      else
         min = n1;

      return min; 
   }
   
   // for double
   public static double minFunction(double n1, double n2) {
     double min;
      if (n1 > n2)
         min = n2;
      else
         min = n1;

      return min; 
   }
}

Bu, aşağıdaki sonucu verecektir -

Output

Minimum Value = 6
Minimum Value = 7.3

Aşırı yükleme yöntemleri programı okunabilir hale getirir. Burada iki yöntem aynı isimle ancak farklı parametrelerle verilmektedir. Tam sayı ve çift türlerden minimum sayı sonuçtur.

Komut Satırı Bağımsız Değişkenlerini Kullanma

Bazen, çalıştırdığınızda bir programa bazı bilgileri aktarmak isteyebilirsiniz. Bu, komut satırı argümanlarını main () 'e ileterek gerçekleştirilir.

Komut satırı argümanı, program çalıştırıldığında komut satırında doğrudan programın adını takip eden bilgidir. Bir Java programı içindeki komut satırı argümanlarına erişmek oldukça kolaydır. Main () 'e iletilen String dizisinde dizeler olarak saklanırlar.

Example

Aşağıdaki program, çağrıldığı tüm komut satırı argümanlarını görüntüler -

public class CommandLine {

   public static void main(String args[]) { 
      for(int i = 0; i<args.length; i++) {
         System.out.println("args[" + i + "]: " +  args[i]);
      }
   }
}

Bu programı burada gösterildiği gibi çalıştırmayı deneyin -

$java CommandLine this is a command line 200 -100

Bu, aşağıdaki sonucu verecektir -

Output

args[0]: this
args[1]: is
args[2]: a
args[3]: command
args[4]: line
args[5]: 200
args[6]: -100

This anahtar sözcüğü

thisJava'da, bir örnek yöntemde veya bir kurucuda geçerli sınıfın nesnesine bir başvuru olarak kullanılan bir anahtar sözcüktür. Bunu kullanarak yapıcılar, değişkenler ve yöntemler gibi bir sınıfın üyelerine başvurabilirsiniz.

Note- this yalnızca örnek yöntemlerde veya yapıcılarda kullanılan anahtar sözcük

Genel olarak, bunun için kullanılan anahtar kelime -

  • Bir yapıcı veya yöntem içinde aynı adlara sahiplerse, örnek değişkenlerini yerel değişkenlerden ayırın.

class Student {
   int age;   
   Student(int age) {
      this.age = age;	
   }
}
  • Bir sınıftaki diğerinden bir tür kurucu (parametrik oluşturucu veya varsayılan) çağırın. Açık yapıcı çağrısı olarak bilinir.

class Student {
   int age
   Student() {
      this(20);
   }
   
   Student(int age) {
      this.age = age;	
   }
}

Example

İşte bir sınıfın üyelerine erişmek için bu anahtar kelimeyi kullanan bir örnek . Aşağıdaki programı kopyalayıp adıyla bir dosyaya yapıştırın,This_Example.java.

public class This_Example {
   // Instance variable num
   int num = 10;
	
   This_Example() {
      System.out.println("This is an example program on keyword this");	
   }

   This_Example(int num) {
      // Invoking the default constructor
      this();
      
      // Assigning the local variable num to the instance variable num
      this.num = num;	   
   }
   
   public void greet() {
      System.out.println("Hi Welcome to Tutorialspoint");
   }
      
   public void print() {
      // Local variable num
      int num = 20;
      
      // Printing the local variable
      System.out.println("value of local variable num is : "+num);
      
      // Printing the instance variable
      System.out.println("value of instance variable num is : "+this.num);
      
      // Invoking the greet method of a class
      this.greet();     
   }
   
   public static void main(String[] args) {
      // Instantiating the class
      This_Example obj1 = new This_Example();
      
      // Invoking the print method
      obj1.print();
	  
      // Passing a new value to the num variable through parametrized constructor
      This_Example obj2 = new This_Example(30);
      
      // Invoking the print method again
      obj2.print(); 
   }
}

Bu, aşağıdaki sonucu verecektir -

Output

This is an example program on keyword this 
value of local variable num is : 20
value of instance variable num is : 10
Hi Welcome to Tutorialspoint
This is an example program on keyword this 
value of local variable num is : 20
value of instance variable num is : 30
Hi Welcome to Tutorialspoint

Değişken Bağımsız Değişkenler (var-args)

JDK 1.5, aynı türden değişken sayıda argümanı bir yönteme aktarmanıza olanak tanır. Yöntemdeki parametre aşağıdaki gibi bildirilir -

typeName... parameterName

Yöntem bildiriminde, türü ve ardından bir üç nokta (...) belirtirsiniz. Bir yöntemde yalnızca bir değişken uzunluklu parametre belirtilebilir ve bu parametre son parametre olmalıdır. Herhangi bir normal parametre ondan önce gelmelidir.

Example

public class VarargsDemo {

   public static void main(String args[]) {
      // Call method with variable args  
	   printMax(34, 3, 3, 2, 56.5);
      printMax(new double[]{1, 2, 3});
   }

   public static void printMax( double... numbers) {
      if (numbers.length == 0) {
         System.out.println("No argument passed");
         return;
      }

      double result = numbers[0];

      for (int i = 1; i <  numbers.length; i++)
      if (numbers[i] >  result)
      result = numbers[i];
      System.out.println("The max value is " + result);
   }
}

Bu, aşağıdaki sonucu verecektir -

Output

The max value is 56.5
The max value is 3.0

Finalize () Yöntemi

Çöp toplayıcı tarafından bir nesnenin son yıkımından hemen önce çağrılacak bir yöntem tanımlamak mümkündür. Bu yöntemefinalize( )ve bir nesnenin temiz bir şekilde sona ermesini sağlamak için kullanılabilir.

Örneğin, o nesneye ait açık bir dosyanın kapatıldığından emin olmak için finalize () kullanabilirsiniz.

Bir sınıfa sonlandırıcı eklemek için finalize () yöntemini tanımlamanız yeterlidir. Java çalışma zamanı, o sınıftaki bir nesneyi geri dönüştürmek üzereyken bu yöntemi çağırır.

Finalize () yönteminin içinde, bir nesne yok edilmeden önce gerçekleştirilmesi gereken eylemleri belirteceksiniz.

Finalize () yöntemi şu genel biçime sahiptir -

protected void finalize( ) {
   // finalization code here
}

Burada, korumalı anahtar sözcük, sınıfı dışında tanımlanan kodla finalize () öğesine erişimi engelleyen bir belirteçtir.

Bu, finalize () işlevinin ne zaman yürütüleceğini veya hatta çalışıp çalışmayacağını bilemeyeceğiniz anlamına gelir. Örneğin, programınız çöp toplama gerçekleşmeden önce biterse, finalize () çalışmayacaktır.