- Parametreleri ve dönüş değeri olan
staticbir metot yazmak ve çağırmak - Metot aşırı yüklemesini (overloading) kullanmak
- Java'da argümanların değerle aktarıldığını açıklamak
Programının on farklı yerinde bir odanın alanını hesaplaman gerektiğini düşün. Aynı formülü on kez yazarsan tek bir hatayı düzeltmek için on yeri değiştirmen gerekir. Metot, adı olan bir kod bloğudur: onu bir kez yazar, istediğin kadar çağırırsın. Bir metodu zaten tanıyorsun: main.
Bir metodun yapısı
public class Main {
static void greet(String name) {
System.out.println("Hello, " + name + "!");
}
static double area(double width, double height) {
return width * height;
}
static boolean isEven(int n) {
return n % 2 == 0;
}
public static void main(String[] args) {
greet("Aysel");
greet("Murad");
double room = area(4.5, 3);
System.out.println("Room area: " + room);
System.out.println(isEven(10) + " " + isEven(7));
}
}Hello, Aysel! Hello, Murad! Room area: 13.5 true false
static, metodun sınıfa ait olduğunu ve nesne oluşturmadan çağrılabileceğini gösterir. Nesne metotlarını bir sonraki modülde göreceksin.- Dönüş türü (
void,double,boolean) metodun ne döndürdüğünü belirtir.void, “hiçbir şey döndürmez” demektir. - Parantez içindeki parametreler metodun girdileridir; her birinin bir türü ve adı vardır. Çağrıda verilen somut değerlere argüman denir.
return, sonucu metodun çağrıldığı yere geri gönderir ve metodu hemen bitirir.
Dikkat: area(4.5, 3) çağrısında 3 bir tam sayıdır ama parametre double türündedir; Java onu otomatik olarak 3.0'a genişletir. boolean döndüren metotların adları genellikle is ya da has ile başlar: isEven, hasTicket.
Aşırı yükleme ve Math sınıfı
Java'da aynı adlı birden fazla metot olabilir; yeter ki parametre listeleri (sayı ya da tür bakımından) farklı olsun. Buna metot aşırı yüklemesi (overloading) denir. Derleyici hangi sürümü çağıracağını argümanlara bakarak seçer. Yalnızca dönüş türünün farklı olması yeterli değildir.
public class Main {
static int max(int a, int b) {
return a > b ? a : b;
}
static double max(double a, double b) {
return a > b ? a : b;
}
static int max(int a, int b, int c) {
return max(max(a, b), c);
}
public static void main(String[] args) {
System.out.println(max(3, 9));
System.out.println(max(2.5, 1.5));
System.out.println(max(4, 11, 7));
System.out.println(Math.max(5, 8) + " " + Math.sqrt(49) + " " + Math.pow(2, 10) + " " + Math.abs(-3));
}
}9 2.5 11 8 7.0 1024.0 3
Argümanlar değerle aktarılır
Bir metot çağrıldığında Java her argümanın değerini parametreye kopyalar. Bu yüzden metodun içinde bir int parametresini değiştirmek, çağıran taraftaki değişkeni etkilemez. Dizilerde ve nesnelerde ise kopyalanan şey nesnenin kendisi değil, ona bir referanstır; metot bu referans üzerinden aynı dizinin elemanlarını değiştirebilir.
public class Main {
static void tryToChange(int x, int[] arr) {
x = 100;
arr[0] = 100;
}
public static void main(String[] args) {
int number = 1;
int[] numbers = {1, 2, 3};
tryToChange(number, numbers);
System.out.println(number);
System.out.println(numbers[0]);
}
}1 100
Özyineleme ve değişken sayıda argüman
Bir metot kendini de çağırabilir; buna özyineleme (recursion) denir. Her özyinelemeli metodun bir durma koşulu olmalıdır; yoksa çağrılar sonsuza kadar sürer ve program StackOverflowError ile durur. int... values yazımı ise metoda istenen sayıda argüman vermeyi sağlar; metodun içinde bunlar bir dizi gibi görünür.
public class Main {
static int factorial(int n) {
if (n <= 1) {
return 1;
}
return n * factorial(n - 1);
}
static int sum(int... values) {
int total = 0;
for (int v : values) {
total += v;
}
return total;
}
public static void main(String[] args) {
System.out.println(factorial(5));
System.out.println(sum(1, 2, 3));
System.out.println(sum(10, 20, 30, 40));
System.out.println(sum());
}
}120 6 100 0
Özyinelemeli factorial metodunun factorial(5) çağrısını adım adım izle.
Çözümü gösterÇözümü gizle
factorial(4) = 4 · factorial(3)
factorial(3) = 3 · factorial(2)
factorial(2) = 2 · factorial(1)
factorial(1) = 1 — durma koşulu.
Şimdi geri döneriz: 2 · 1 = 2, 3 · 2 = 6, 4 · 6 = 24, 5 · 24 = 120.
Önemli noktalar
- Metot, adı olan bir kod bloğudur: bir kez yazılır, defalarca çağrılır.
- Başlık; dönüş türünü, adı ve parametreleri belirtir.
voidhiçbir şey döndürmez, diğer türlerreturngerektirir. - Aşırı yükleme: aynı adlı metotların parametre listeleri farklı olmalıdır.
- Java argümanları değerle aktarır; dizilerde ve nesnelerde kopyalanan değer bir referanstır.
- Özyinelemeli bir metodun mutlaka bir durma koşulu olmalıdır.
Kendini test et
10 soru. Her doğru cevap XP kazandırır.
void dönüş türü ne anlama gelir?