Java Statik Metotlar Nedir?

Said Özgat
DigiGeek
Published in
2 min readDec 24, 2023

Sınıfın içine yazdığımız değişkenler ve metotlar, o sınıfın bir nesnesi
oluşturulduğunda hafızaya yüklenir. Bir metotu çağırabilmeniz için, önce o metotun ait olduğu sınıfın bir nesnesini almanız gerekir. Fakat bazı durumlarda sınıftan bağımsız metotlar yazmak isteyebilirsiniz. Bu metotları çağırmak için bütün sınıfın bir nesnesini oluşturup hafızaya yüklemek gereksiz olabilir. Bu gibi durumlarda statik metot tanımlarız.

Statik metotlar, sınıfın içine yazılmasına rağmen sınıftan bağımsız olan ve çalıştırılması için sınıfın nesnesine ihtiyaç duymayan metotlardır.

Her Java programının giriş noktası olan main() metotunun da statik bir metot olduğunu hatırlayacaksınız.

Statik metot tanımlarken metotun dönüş tipinden önce static deyimini
kullanırız.

Statik metotlarla ilgili bazı kısıtlamalar bulunmaktadır:

  • Yalnızca aynı sınıf içindeki statik metot ve değişkenlere doğrudan
    erişebilirler; çünkü statik olmayan alanların hafızada oluşabilmesi için
    sınıfın bir nesnesinin oluşturulması gerekir.
  • Statik metotlar this ve super kullanamazlar; çünkü bunları kullanabilmek için sınıfın bir nesnesinin olması gerekir.

Şimdi durumu daha iyi kavramak adına bir örnek inceleyelim. NumberUtils adında sayılarla ilgili işlemleri yaptığımız bir sınıfımız olsun. Bu sınıfın içine, GigaByte değerini MegaByte dönüştüren bir metot yazalım.

public class NumberUtils {
public double convertGbToMb(double gb) {
return gb * 1024.0;
}
}

Main metot içerisinde ilgili classdan bir nesne oluşturup metotu çağırabiliriz:

public static void main(String[] args) {
NumberUtils numberUtils = new NumberUtils();
System.out.println(numberUtils.convertGbToMb(1)); // Konsola 1024.0 yazar.
}

Gördüğünüz gibi metotu çağırabilmek için sınıftan nesne oluşturmak zorundayız. Fakat hemen fark edeceğiniz gibi, bu metotun NumberUtils sınıfıyla herhangi bir bağlantısı yoktur. Sınıfın herhangi bir metotuna veya değişkenine erişmediği gibi, çalışması için bu sınıfın hafızada var olmasına da gerek yoktur. Yine de metotu çağırabilmek için mecburen sınıfın bir nesnesini oluşturuyoruz. Şimdi aynı metotu statik olarak tanımlayalım ve aradaki farkı görelim:

public class NumberUtils {
public static double convertGbToMb(double gb) {
return gb * 1024.0;
}
}

Statik olarak tanımladığımız bu metotu aşağıdaki gibi kullanabiliriz:

public static void main(String[] args) {
System.out.println(NumberUtils.convertGbToMb(1)); // Konsola 1024.0 yazar.
}

Gördüğünüz gibi, statik metotu çağırmak için sınıftan bir nesne oluşturmamıza gerek yoktur. Bu tarz metotları yazmak için statik deyimini sıklıkla kullanacağız. Fakat statik kısıtlamalarına dikkat etmemiz gerekir. Aşağıdaki örnekleri inceleyelim:

public class NumberUtils {
private double result;
public static double convertGbToMb(double gb) {
result = gb * 1024.0;
return result;
}
}

Yukarıdaki örnekte NumberUtils sınıfının içinde result adında bir değişken
tanımladık. Şimdi metotun içinde çarpma işlemini yapıp sonucu bu değişkene atıyoruz. Fakat bu satır hataya neden olur; çünkü
result değişkeni statik olarak belirtilmediği için ancak sınıftan bir nesne oluşturulursa hafızada bulunabilir. Metotumuz ise statik olduğundan NumberUtils sınıfından nesne oluşturmaya gerek yoktur. Uzun lafın kısası, convertGbToMb() metotumuz çalıştığında hafızada result adında bir değişken yoktur.

Statik bir metottan, ancak ve ancak sınıfın diğer statik alanlarına erişilebilir.

Yukarıdaki kodu değiştirerek result değişkenini de statik olarak belirlersek
hata olmayacaktır:

public class NumberUtils {
private static double result;
public static double convertGbToMb(double gb) {
result = gb * 1024.0;
return result;
}
}

Hoşçakalın, iyi kodlamalar.

--

--