- Parametrləri və qaytarılan qiyməti olan
staticmetod yazmaq və çağırmaq - Metodların yüklənməsindən (overloading) istifadə etmək
- Java-da arqumentlərin qiymətə görə ötürülməsini izah etmək
Təsəvvür et ki, proqramın on yerində otağın sahəsini hesablamalısan. Eyni düsturu on dəfə yazsan, bir səhvi düzəltmək üçün on yeri dəyişməli olacaqsan. Metod adı olan kod blokudur: onu bir dəfə yazırsan və istədiyin qədər çağırırsan. Artıq bir metodu tanıyırsan — main-i.
Metodun quruluşu
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— metod sinfə aiddir və onu obyekt yaratmadan çağırmaq olar. Obyektlərin metodlarını növbəti modulda öyrənəcəksən.- Qaytarılan tip (
void,double,boolean) metodun nə qaytardığını göstərir.void«heç nə qaytarmır» deməkdir. - Mötərizədəki parametrlər metodun giriş məlumatıdır; hər birinin tipi və adı var. Çağırışda verilən konkret qiymətlərə arqument deyilir.
returnnəticəni çağırış yerinə qaytarır və metodu dərhal bitirir.
Diqqət et: area(4.5, 3) çağırışında 3 tam ədəddir, amma parametr double tiplidir — Java onu avtomatik 3.0-a genişləndirir. boolean qaytaran metodların adları adətən is və ya has ilə başlayır: isEven, hasTicket.
Yüklənmə və Math sinfi
Java-da eyni adlı bir neçə metod ola bilər — təki onların parametr siyahıları fərqli olsun (sayı və ya tipləri). Buna metodların yüklənməsi (overloading) deyilir. Kompilyator hansı variantı çağıracağını arqumentlərə baxaraq seçir. Təkcə qaytarılan tipin fərqli olması isə kifayət deyil.
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
Arqumentlər qiymətə görə ötürülür
Metod çağırılanda Java arqumentin surətini parametrə köçürür. Ona görə metodun içində int parametrini dəyişmək çağıran tərəfdəki dəyişənə təsir etmir. Massiv və obyektlərdə isə surəti çıxarılan şey obyektin özü deyil, ona istinaddır — belə istinadla metod eyni massivin elementlərini dəyişə bilir.
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
Rekursiya və dəyişən sayda arqument
Metod özünü də çağıra bilər — buna rekursiya deyilir. Hər rekursiv metodun dayanma şərti olmalıdır, əks halda çağırışlar sonsuza qədər davam edər və proqram StackOverflowError ilə dayanar. int... values yazılışı isə metoda istənilən sayda arqument verməyə imkan yaradır; metodun içində onlar massiv kimi 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
Rekursiv factorial metodunun factorial(5) çağırışını addım-addım izlə.
Həllini göstərHəllini gizlət
factorial(4) = 4 · factorial(3)
factorial(3) = 3 · factorial(2)
factorial(2) = 2 · factorial(1)
factorial(1) = 1 — dayanma şərti.
İndi geri qayıdırıq: 2 · 1 = 2, 3 · 2 = 6, 4 · 6 = 24, 5 · 24 = 120.
Əsas fikirlər
- Metod adı olan kod blokudur: bir dəfə yazılır, dəfələrlə çağırılır.
- Başlıq qaytarılan tipi, adı və parametrləri göstərir;
voidheç nə qaytarmır, digər tiplərreturntələb edir. - Yüklənmə: eyni adlı metodların parametr siyahıları fərqli olmalıdır.
- Java arqumentləri qiymətə görə ötürür; massiv və obyektlərdə isə istinadın surəti ötürülür.
- Rekursiv metodun mütləq dayanma şərti olmalıdır.
Özünü yoxla
10 sual. Hər düzgün cavab XP qazandırır.
void qaytarılan tipi nə deməkdir?