Java’da metot yazmak, belirli bir işi yapan adlandırılmış kod bloğunu sınıf içinde tanımlayıp gerektiğinde çağırmak anlamına gelir. Parametreler metoda dışarıdan veri göndermeyi, return ise metodun çağrıldığı yere sonuç iletmesini sağlar. Böylece kod tekrarı azalır, program daha okunabilir olur ve büyük problemler daha küçük parçalara ayrılabilir.
Örneğin toplam hesaplayan bir kodu her ihtiyaçta yeniden yazmak yerine bir kez metot olarak tanımlayabilirsiniz. Bu yazıda metot söz dizimini okuyacak; parametresiz, parametreli ve değer döndüren metotları çalışan örneklerle inceleyeceksiniz. Devamında static, nesne üzerinden çağrılan metotlar ve method overloading konularını da uygulayabileceğiniz bir temel oluşturacaksınız.
Java’da Metot Nedir ve Neden Kullanılır?
Metot (method), belirli bir görevi yerine getiren ve bir isim verilerek gerektiğinde çalıştırılabilen kod bloğudur. Örneğin ekrana mesaj yazdıran, iki sayıyı toplayan veya bir öğrencinin not ortalamasını hesaplayan işlemler metot içinde tanımlanabilir.
Java’da metotlar sınıfların içinde yazılır. Bir metodu tanımladığınızda kod hemen çalışmaz; metot ancak çağrıldığında (invoke edildiğinde) çalışır. Bu yaklaşım, aynı işlemi programın farklı yerlerinde kullanırken kodu tekrar tekrar yazmanızı önler.
Java terminolojisinde genellikle method kelimesi kullanılır. “Fonksiyon” (function) kelimesi ise farklı programlama dillerindeki benzer yapıları anlatmak için pratikte kullanılabilir. Başlangıç seviyesinde önemli olan ayrım şudur: Java’da bu davranışlar sınıf içinde tanımlandığı için teknik olarak metot olarak adlandırılır.
Bir metot kullanmanın temel faydaları şunlardır:
- Kod tekrarını azaltır: Aynı işlemi tek bir yerde tanımlarsınız.
- Programın okunabilirliğini artırır;
toplamHesapla()gibi bir isim, kodun amacını açıklar. - Büyük bir problemi küçük ve yönetilebilir görevlere böler.
- Hataları düzeltmeyi kolaylaştırır; değişiklik çoğunlukla tek bir metotta yapılır.
- Test etmeyi kolaylaştırır; her metot belirli bir görev üzerinden ayrı ayrı kontrol edilebilir.
Metot yazmadan önce 5 maddelik karar kontrolü
- Bu metot yalnızca tek bir iş mi yapacak?
- İşlemi gerçekleştirmek için hangi girdiler gerçekten gerekli?
- Metodun dışarıya bir sonuç vermesi gerekiyor mu?
- Sonuç dönecekse bu sonuç hangi veri tipinde olmalı?
- Metot adı, yaptığı işi açıkça anlatıyor mu?
Bu kontrol, daha ilk aşamada gereksiz ve karmaşık metotlar yazmanızı önler. Örneğin yalnızca ekrana mesaj yazdıran bir metot için sonuç döndürmeye gerek yoktur; buna karşılık iki sayının toplamını başka bir işlemde kullanacaksanız sonuç döndüren bir metot daha uygundur.
Java Metot Söz Dizimi Nasıl Okunur?

Genel bir Java metodu aşağıdaki yapıya sahiptir:
erişimBelirleyici static geriDonusTipi metotAdi(parametreListesi) {
// metot gövdesi
}
Bu şablonu soldan sağa okumak, bir metot başlığının ne yaptığını anlamanın en kolay yoludur:
- Erişim belirleyici (access modifier): Metoda hangi kodların erişebileceğini belirler. Başlangıçta en sık
publickullanılır.privateise metodu yalnızca tanımlandığı sınıf içinde erişilebilir yapar. staticanahtar kelimesi: Metodun sınıfa ait olduğunu belirtir. Bu kelime yazılmadığında metot genellikle bir nesne üzerinden çağrılır. Her metotta bulunması zorunlu değildir.- Geri dönüş tipi (return type): Metodun çağıran koda hangi türde sonuç vereceğini gösterir. Sonuç vermeyen metotlarda
voidyazılır; sonuç veren metotlardaint,double,Stringveyabooleangibi uygun bir tip seçilir. - Metot adı: Metodu çağırırken kullanacağınız isimdir. Java’da genellikle
camelCasebiçimi tercih edilir. - Parametre listesi (parameter list): Metodun dışarıdan alacağı verileri tanımlar. Birden fazla parametre virgülle ayrılır.
- Metot gövdesi (method body): Süslü parantezler arasındaki bölüm, metodun gerçekleştireceği işlemleri içerir.
Parametre ve argüman farkı
Metot tanımında yazılan değişkene parametre denir. Metot çağrılırken bu parametreye gönderilen gerçek değere ise argüman adı verilir.
static int karesiniAl(int sayi) { // sayi: parametre
return sayi * sayi;
}
int sonuc = karesiniAl(5); // 5: argüman
Metot adlarını seçerken eylem anlatan fiiller kullanın: mesajYazdir(), toplamHesapla(), ogrenciBul() gibi. İsimler kısa fakat açıklayıcı olmalı; islemYap() gibi ne yaptığı belirsiz adlardan kaçınılmalıdır.
Mini söz dizimi kontrolü: public static double ortalamaHesapla(int toplam, int adet) başlığında public erişimi, static sınıfa ait olmayı, double dönüş tipini, ortalamaHesapla metot adını, toplam ve adet ise parametreleri belirtir.
Parametresiz, Parametreli ve Değer Döndüren Metotlar
Metotları seçerken temel karar şudur: çıktı yoksa void, çıktı varsa uygun dönüş tipi kullanılır. Ayrıca metot dışarıdan bilgiye ihtiyaç duyuyorsa parametre alır.
| Metot türü | Parametre | Geri dönüş tipi | Ne zaman kullanılır? | Kısa örnek amacı |
|---|---|---|---|---|
| Parametresiz void | Yok | void | Sabit bir işlemi yapmak için | Mesaj yazdırmak |
| Parametre alan void | Var | void | Gelen veriyi kullanıp sonuç döndürmemek için | İsme göre mesaj yazdırmak |
| Parametresiz değer döndüren | Yok | Uygun tip | Sabit veya sınıf içindeki bir sonucu almak için | Sabit puan döndürmek |
| Parametre alan değer döndüren | Var | Uygun tip | Girdiyi işleyip sonucu başka yerde kullanmak için | İki sayıyı toplamak |
Aşağıdaki örnek, aynı “toplam alma” fikrini dört farklı metot biçimiyle gösterir:
public class MetotOrnekleri {
static void mesajYazdir() {
System.out.println("Toplam işlemi başlıyor.");
}
static void sayilariYazdir(int a, int b) {
System.out.println(a + b);
}
static int sabitToplam() {
return 10 + 20;
}
static int toplamHesapla(int a, int b) {
return a + b;
}
public static void main(String[] args) {
mesajYazdir();
sayilariYazdir(3, 4);
System.out.println(sabitToplam());
System.out.println(toplamHesapla(5, 7));
}
}
Beklenen çıktı şöyledir:
Toplam işlemi başlıyor.
7
30
12
mesajYazdir()parametre almaz ve yalnızca ekrana yazı yazdırır.sayilariYazdir(3, 4)iki argüman alır, işlemi yapar fakat sonucu ayrıca döndürmez.sabitToplam()parametre almaz; hesapladığıintsonucureturnile gönderir.toplamHesapla(5, 7)aldığı iki değeri toplar ve sonucu çağrıldığı yerde kullanılabilir hâle getirir.
return ifadesi, metodun dönüş tipiyle uyumlu bir değer döndürmelidir. int döndüren bir metot metin, String döndüren bir metot ise doğrudan sayı döndüremez. Java’daki temel metot yapısını pekiştirmek için Java bilgi testi üzerinden hangi konuları tekrar etmeniz gerektiğini görebilirsiniz.
Metot Nasıl Çağrılır? Parametre ve Return Kullanımı
Java’da metot önce sınıf içinde tanımlanır, ardından ihtiyaç duyulduğunda çağrılır (invoke). Parametre metoda dışarıdan bilgi gönderir; return ise metodun ürettiği değeri çağıran koda geri verir. Bu nedenle metot tanımlamak davranışı hazırlamak, metot çağırmak ise o davranışı çalıştırmaktır.
- Metodu sınıf içinde tanımlayın.
mainmetodundan metodun adını yazıp çağırın.- Gerekliyse argüman gönderin.
- Dönen değeri bir değişkende saklayın.
- Sonucu yazdırın veya başka bir işlemde kullanın.
public class Main {
static void selamla(String isim) {
System.out.println("Merhaba, " + isim);
}
static int topla(int a, int b) {
return a + b;
}
public static void main(String[] args) {
selamla("Ayşe");
int sonuc = topla(4, 6);
System.out.println("Toplam: " + sonuc);
}
}
Bu programın çıktısı şöyledir:
Merhaba, Ayşe
Toplam: 10
selamla(String isim) satırındaki isim parametredir. selamla("Ayşe") çağrısında gönderilen "Ayşe" ise argümandır. topla(int a, int b) içinde a ve b parametre, topla(4, 6) içinde 4 ve 6 argümandır. return a + b; satırı, hesaplanan değeri metoda çağrı yapan yere gönderir.
void metot değer döndürmez; bu yüzden yalnızca çağrılır: selamla("Ayşe");. Değer döndüren metot ise değişkene atanabilir: int sonuc = topla(4, 6);. Dönen değeri doğrudan da kullanabilirsiniz: System.out.println(topla(4, 6));. Ancak değeri daha sonra kullanacaksanız değişkende saklamak daha okunaklıdır.
Java’da metot çağırma ve temel kod akışını kendi hızınızda pekiştirmek için asenkron Java eğitim içeriklerinden yararlanabilir, örnekleri durdurarak tekrar çalıştırabilirsiniz.
static Metot, Nesne Metodu ve Constructor Farkı

static metot sınıfa aittir ve sınıf adıyla çağrılabilir. Instance metot ise belirli bir nesneye aittir; kullanmadan önce o sınıftan nesne oluşturmanız gerekir.
| Yapı | Çağırma biçimi | Temel ilişki |
|---|---|---|
| static metot | SinifAdi.metot() |
Sınıfa aittir |
| Instance metot | nesne.metot() |
Nesneye aittir |
| Constructor | new SinifAdi() |
Nesne oluştururken çalışır |
class Ogrenci {
String ad;
Ogrenci(String ad) {
this.ad = ad;
}
static void bilgiVer() {
System.out.println("Öğrenci sınıfı");
}
void selamla() {
System.out.println("Merhaba, " + ad);
}
}
class Main {
public static void main(String[] args) {
Ogrenci.bilgiVer();
Ogrenci ogrenci = new Ogrenci("Ali");
ogrenci.selamla();
}
}
Ogrenci.bilgiVer() için nesne gerekmez. Buna karşılık selamla(), ad alanını kullandığı için önce ogrenci nesnesi oluşturulur. Static bağlamda instance alanlarına veya instance metotlarına doğrudan erişilememesinin nedeni budur: nesneye bağlı üyelerin çalışacağı bir nesne bulunmalıdır.
Constructor, nesne oluşturulurken çalışan, sınıfla aynı adı taşıyan ve dönüş tipi yazılmayan özel yapıdır. Metot ise çağrıldığında belirli bir davranışı gerçekleştirir ve gerekirse değer döndürür. Kısaca şu soruyu sorun: Davranış tüm sınıf için mi ortak, yoksa belirli bir nesnenin verilerine mi bağlı? İlk durumda static, ikinci durumda instance metot düşünülür.
Yaygın Metot Hataları ve Daha İyi Metot Tasarımı
Eksik return: int hesapla() { } hatalıdır; dönüş tipi int olduğu için her geçerli akışta sayı döndürülmelidir. Düzeltme: return 0; veya hesaplanan sonucu döndürmek.
Yanlış argüman tipi: topla(4, "6") çağrısı, ikinci parametre int beklenirken metin gönderdiği için derlenmez. Düzeltme: topla(4, 6) kullanmaktır.
Nesnesiz instance çağrısı: main içinden selamla() çağırmak, metot instance ise hatalıdır. Önce Ogrenci o = new Ogrenci("Ali"); oluşturup o.selamla(); yazılmalıdır.
Yanlış sınıfta tanımlama: Bir metot başka sınıfta bulunuyorsa, mevcut sınıftan doğrudan çağrılamaz. Metodu doğru sınıfa taşımalı veya ilgili sınıftan nesne oluşturup çağırmalısınız.
Bir metot yazmadan önce
- Metot tek bir işi mi yapıyor?
- Hangi girdilere ihtiyaç duyuyor?
- Çıktı üretiyor mu?
- Adı yaptığı işi açıkça anlatıyor mu?
- Bağımsız olarak test edilebilir mi?
İyi adlandırılmış ve küçük metotlar algoritmayı adımlara ayırmayı, kodu test etmeyi ve nesne yönelimli programlamada davranışları sınıflandırmayı kolaylaştırır. Temel kavramlarınızı ölçmek için ücretsiz Java bilgi testini çözerek hangi konuları tekrar etmeniz gerektiğini görebilirsiniz.
Method Overloading Nedir?
Method overloading, aynı sınıf içinde aynı isimli metotların farklı parametre listeleriyle tanımlanabilmesidir. Java, metot çağrılırken gönderilen argümanların sayısına, sırasına ve türüne bakarak uygun metodu seçer. Böylece benzer işi yapan metotlar için farklı isimler ezberlemek gerekmez.
Bir metodun imzası (method signature), temel olarak metot adı ile parametrelerinin sayısını, sırasını ve türlerini kapsar. Yalnızca geri dönüş tipinin değiştirilmesi overloading için yeterli değildir.
| Metotlar | Overloading durumu | Neden? |
|---|---|---|
yazdir(String) ve yazdir(String, int) |
Evet | Parametre sayısı farklıdır. |
topla(int, int) ve topla(double, double) |
Evet | Parametre türleri farklıdır. |
hesapla(int) ve farklı return tipiyle hesapla(int) |
Hayır | Parametre listesi aynıdır. |
public class Ornek {
static void yazdir(String mesaj) {
System.out.println(mesaj);
}
static void yazdir(String mesaj, int tekrar) {
for (int i = 0; i < tekrar; i++) {
System.out.println(mesaj);
}
}
public static void main(String[] args) {
yazdir("Merhaba");
yazdir("Java", 2);
}
}
Bu programın beklenen çıktısı şöyledir:
Merhaba
Java
Java
İlk çağrıda tek bir String argümanı gönderildiği için yazdir(String) çalışır. İkinci çağrıda ise bir String ve bir int bulunduğundan yazdir(String, int) seçilir.
Overloading Kullanırken Nelere Dikkat Edilmeli?
- Metotların aynı işi farklı girdilerle yapıp yapmadığını kontrol edin.
- Parametre sayısı, sırası veya türlerinden en az birinin farklı olduğundan emin olun.
- Sadece
returntipini değiştirerek aynı metodu tekrar tanımlamayın. - Birbirine çok benzeyen ve Java’nın ayırt etmekte zorlanabileceği çağrılardan kaçının.
- Overload sayısını artırırken kodun okunabilirliğini koruyun.
Overloading, aynı davranışı gereksiz yere çoğaltmak anlamına gelmez. Örneğin yalnızca değişken adları farklı olan iki metot yazmak gereksizdir. Ama bir metot hem yalnızca mesaj alıyor hem de mesajla birlikte tekrar sayısı alıyorsa, bu iki kullanım biçimini aynı metot adı altında sunmak anlamlı bir tasarım olabilir.
Sık Sorulan Sorular
Java’da bir metot mutlaka static olmak zorunda mı?
Hayır. static metotlar sınıf adı üzerinden çağrılabilir. Nesneye ait davranışları temsil eden metotlar ise bir nesne oluşturularak çağrılır.
Parametre ile argüman arasındaki fark nedir?
Parametre, metot tanımında yazılan değişkendir. Argüman ise metot çağrılırken bu parametreye gönderilen gerçek değerdir.
void metot ile değer döndüren metot arasındaki fark nedir?
void metot bir sonuç döndürmez; genellikle ekrana yazdırma gibi bir işlem yapar. Değer döndüren metot ise belirli bir türde sonuç verir ve return kullanır.
Java’da yalnızca return tipini değiştirerek method overloading yapılabilir mi?
Hayır. Overloading için parametre sayısı, sırası veya türlerinden en az biri farklı olmalıdır. Yalnızca geri dönüş tipini değiştirmek yeterli değildir.
Bir metot yanlış sınıfta tanımlanırsa hangi sorunlar ortaya çıkar?
Metoda erişmek zorlaşabilir, gereksiz nesne bağımlılığı oluşabilir veya kodun sorumlulukları karışabilir. Metot, yaptığı işle ilgili sınıfta ve anlaşılır bir sorumlulukla tanımlanmalıdır.
Doğru kullanılan overloading, benzer işlemleri anlaşılır bir isim altında toplar; gereksiz kullanıldığında ise kodun okunmasını zorlaştırır.