Java’da metotlar, belirli işlemleri gerçekleştirmemizi sağlayan talimatlar bütünüdür. Java’da metotlar sayesinde kodun yeniden kullanılabilirliğini sağlayabiliriz veya kodu kolaylıkla değiştirebiliriz. Metotları tanımladıktan sonra programımız içerisinde çağrılana kadar herhangi bir işlem yapılmaz. Yani o metodu kullanabilmemiz için çağırmamız gerekmektedir. Şimdi ise metotları örneklerle daha iyi pekiştirelim.
Metotların Genel Kullanım Şekli
1 2 3 4 | ErisimBelirleyici DönüsTipi MetotAdı (Parametre listesi) { //metot gövdesi } |
- ErisimBelirleyici: Metodumuza nasıl erişeceğimizi belirtir.
- DönüsTipi: Metotdan dönecek olan değerin türüdür. int, String gibi türler belirtebiliriz.
- MetotAdı: Metoda verilecek olan isimdir. Metot adımızı çağırmak istediğimizde kullanacağız.
- Parametre listesi: Gönderilecek olan değişkenleri belirtiriz.
- Metot gövdesi: Metodun içerisinde gerçekleştirilecek olan işlemler yazılır.
Parametresiz Metotlar
Parametresiz metotlar, herhangi bir parametre değeri almadan kod bloğunu işleyebilen metotlardır. Örneklere geçelim:
1. Örnek
1 2 3 4 5 6 7 8 | public static void selam()//metodumuzu tanımladık { System.out.println("Selamlar kod kampüsüne hoş geldiniz.");//metodumuzun içerisine yazı yazdık. } public static void main(String [] args) { selam();//fonksiyonumuzu çağırdık } |
Ekran Çıktısı
1 | Selamlar kod kampüsüne hoş geldiniz. |
Yapmış olduğumuz bu örnekte selam() adında bir metot tanımladık ve içerisine bir yazı yazdık. Sonrasında ise metodumuzu selam(); şeklinde çağırıyoruz.
2. Örnek
1 2 3 4 5 6 7 8 9 | public static void islem()//metodumuzu tanımladık { System.out.println("Bölme = "+ 10/2);//metodumuzun içerisinde işlem yaptık System.out.println("Çarpım = "+10*2); } public static void main(String [] args) { islem();//metodumuzu çağırdık } |
Ekran Çıktısı
1 2 | Bölme = 5 Çarpım = 20 |
Parametre Alan Metotlar
Metotların bir diğer varyasyonu, herhangi bir türden bir veya daha fazla parametre almasıdır. Girilecek olan parametre sayısı için bir sınır yoktur. Parametreler integer, String, char, double gibi herhangi bir türden olabilir. Parametre alan metotlar ile ilgili örneklere geçelim:
1.Örnek
1 2 3 4 5 6 7 8 | public static void islem(int a)//metodumuzu ve parametremizi tanımladık { System.out.println("Alinin yaşı = " +a); } public static void main(String [] args) { islem(40);//metodumuzu çağırdık } |
Ekran Çıktısı
1 | Alinin yaşı = 40 |
Yaptığımız bu örnekte ilk olarak metodumuzu tanımladık ve içerisine int türünde bir parametre tanımladık. Sonrasında ise aşağıda islem(40); kısmında içerisine int türünde olan bir değerimizi girdik ve metodumuzu çağırdık.
2. Örnek
1 2 3 4 5 6 7 8 | public static void toplam(int a, int b, int c, int d)//metodumuzu ve parametreleri tanımladık { System.out.println("Toplamlar = "+(a+b+c+d));//Yapılacak işlemi belirttik } public static void main(String [] args) { toplam(22,44,65,54);//metodumuzu çağırdık ve parametrelerimize değerler atadık. } |
Ekran Çıktısı
1 | Toplamlar = 185 |
2. örneğimizde ise int tipinde a,b,c,d parametrelerini tanımladık metodun gövdesinde ise işlemlerimizi yaptırdık. toplam(22,44,65,54); şeklinde yazdığımız kodda, parantez içerisine parametrelerin değerlerini atadık ve metodumuzu çağırdık.
Metotlarda Return Kullanımı
Metotlar bir veri türünü, herhangi bir türden nesneyi geri döndürebilir. Yapmış olduğumuz bir metodu çağırdığımıza, oluşan veriyi bir başka değişkene aktarmak istediğimizde, return anahtar kelimemizi kullanırız. Bu işlemi metotlarımız da void yerine, döndürmek istediğimiz türü yazarak gerçekleştiririz.
Geriye değer döndürme işlemini return anahtar kelimesini kullanarak yapabiliriz. Return kullanıldığında metot işlevini tamamlamıştır yani döngü sonlandırılmış olur. Geri dönüşü olan metodun en az bir return’u bulunmak zorundadır. Şimdi örneklerimize geçelim:
1. Örnek
1 2 3 4 5 6 7 8 | public static int carpımlar(int a, int b, int c) { return(a*b*c);//neyi return etmek istediğimizi belirtiyoruz. } public static void main(String[] args) { System.out.println("Çarpımlar = " + carpımlar(11,3,5));//parametrelere değerler atadık. } |
Ekran Çıktısı
1 | Çarpımlar = 165 |
Yapmış olduğumuz örnekte metodumuzu oluşturduk ve parametrelerimizi girdik, sonrasında return(a*b*c); yazarak döndürmek istediğimiz değerleri belirttik. carpımlar(11,3,5) şeklinde belirttiğimiz bölgede değerleri girdik. Burada dikkat etmeniz gereken yer public static int carpımlar kısmıdır, burada int yerine void yazarsak return’ü kullanamayız
2. Örnek
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | public static int carpım(int n)//metodumuzu oluşturduk { int carp=1;//sayıları tutabilmemiz için tanımladık. for (int i=1; i<=n; i++)//for döngümüz ile girilen sayıdan 1 e kadar gitmesini sağladık. { carp*=i; } return carp;//değerimizi döndürdük. } public static void main(String[] args) { Scanner scanner = new Scanner (System.in); System.out.println("Faktöriyelini hesaplamak istediğiniz sayıyı giriniz "); int n = scanner.nextInt();//klavyeden sayı istedik. int sonuc=carpım(n);//sonuc değişkenimizi tanımladık ve gerçekleştirilen işlemlerimizi metodumuzudan aldık. System.out.println("sayının faktöriyeli = " +sonuc); } |
Ekran Çıktısı
1 2 3 | Sayı giriniz 4 sayının faktöriyeli = 24 |
Yapmış olduğumuz bu örnekte for döngüsü kullanarak sayının faktöriyelini hesapladık. carpım() metdoumuzda girilen sayıdan 1’e kadar olan tüm sayıları çarptık ve geriye carp değişkenini döndürdük.
Metotları Aşırı Yüklemek (Overloading)
Metotlarda aşırı yükleme, aynı isimli metotları oluşturmak istediğimizde ve bu metotların birbirinden farklı işlemleri yapması gerektiğinde aşırı yükleme (Overloading) kullanırız.
1. Örnek
1 2 3 4 5 6 7 8 9 10 11 12 | public static void carpma(int a, int b)//metodumuzu oluşturduk ve içerisine değerlerimizi girdik. { System.out.println("Çarpımları = " +(a*b));//yapılacak olan işlemimizi girdik. } public static void carpma(int a, int b, int c) { System.out.println("Çarpımları = " + (a*b*c)); } public static void main(String[] args) { carpma(5,5);//değerlerimizi atadık carpma(5,5,5); } |
Ekran Çıktısı
1 2 | Çarpımları = 25 Çarpımları = 125 |
Örneğimizde carpma adında iki tane metot oluşturduk. Oluşturmuş olduğumuz bu metotların içerisine parametrelerimizi belirttik. Gördüğünüz gibi metotların isimleri ve parametrelerimizi de aynı isimlerde oluşturarak aşırı yükleme (Overloading) işlemimimizi gerçekleştirmiş olduk. Aşırı yükleme yaparken metotların içeriğinin birbirinden farklı olması gerekmektedir. Misal ilk metodumuza a,b parametrelerini atadık diğer metodumuza ise farklılık olması gerektiği için fazladan bir c parametresi girdik.
2. Örnek
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | public static String isim(String a, String b)//String metodumuzu oluşturduk. { System.out.println("İsim = "+ (a+b)); return a+b;//değerimizi döndürdük. } public static String isim(String a) { System.out.println("İsim = " + (a)); return a; } public static void main(String[] args) { isim("Eylül"," Karahanlı");//parametrelere değerler atadık. isim("Hüsrev"); } |
Ekran Çıktısı
1 2 | İsim = Eylül Karahanlı İsim = Hüsrev |
Metotlarda Özyineleme (Recursive)
Metotlarda özyineleme kısaca kendi kendini çağıran metotlardır. Bu metotlar şart sağlanana kadar kendini sürekli olarak çağırır.
1. Örnek
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | public static int topla(int a) { if (0 <= a)//koşulumuzu belirttik. { return (a + topla(a - 1));//geriye döndürme işlemimizi yaptık } else { return 0; }} public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("Klavyeden sayı giriniz"); int n = scanner.nextInt();//klavyeden sayı istedik. int sonuc = topla(n); System.out.println("Girilen sayıdan 1'e kadar olan sayılar toplamı = "+sonuc); }} |
Ekran Çıktısı
1 2 3 | Klavyeden sayı giriniz 10 Girilen sayıdan 1'e kadar olan sayılar toplamı = 55 |
Yapmış olduğumuz bu örnekte özyineleme (Recursive) kullanarak, klavyeden girilen sayıdan 1’e kadar olan sayıların toplamını veren bir program yaptık.
2. Örnek
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | public static int fibonacci(int n) { if ((n == 0) || (n == 1))//koşulumuzu belirttik return n; else//yinelemeli olarak yazılır. return fibonacci(n - 1) + fibonacci(n - 2); } public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("Sayı giriniz"); int n = scanner.nextInt(); System.out.println("Girilen sayının fibonaccisi = " + fibonacci(n)); } |
Ekran Çıktısı
1 2 3 | Sayı giriniz 12 Girilen sayının fibonaccisi = 144 |
Bu örneğimizde özyineleme (Recursive) metoduyla fibonacci dizisini hesaplayan programı yaptık. Yapmış olduğumuz örnekte ilk olarak metodumuzu oluşturduk ve içerisinde işlemlerimizi yaptık. If else yapısını kullanarak şartlarımızı belirledik, if yapısında 0 veya 1 sayısı girildiğinde girilen sayının direkt yazılmasını belirttik. Else yapısında ise yinelemeli olarak sayıların aktarılmasını sağladık.
recursive fonksiyonların farkında olsaydım o zamanlar, belki de bu kadar kıvırtıp derin devlet kurmama gerek kalmazdı.