Statik Metotlar
Coddy'nin Java Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası — ders 16 / 87.
Tıpkı statik değişkenlerin örneklere değil de sınıfa ait olması gibi, statik metotlar da sınıfın kendisine aittir. Onları bir nesne oluşturmadan çağırabilirsiniz.
static anahtar kelimesini ekleyerek statik bir metot tanımlayın:
public class MathHelper {
public static int add(int a, int b) {
return a + b;
}
public static int multiply(int a, int b) {
return a * b;
}
}
// Bir nesne oluşturmadan çağırın
int sum = MathHelper.add(5, 3); // 8
int product = MathHelper.multiply(4, 2); // 8Statik metotların önemli bir kısıtlaması vardır: doğrudan örnek değişkenlerine veya örnek metotlarına erişemezler. Statik metotlar bir nesne olmadan var olduklarından, üzerinde çalışılacak bir this referansı yoktur.
public class Counter {
private int count; // Örnek değişkeni
private static int total; // Statik değişken
public static void incrementTotal() {
total++; // Tamam - statik değişkene erişiliyor
// count++; // Hata! Örnek değişkenine erişilemez
}
}Statik metotlar, nesne durumuna bağlı olmayan yardımcı işlemler için idealdir; Math.sqrt() veya Integer.parseInt() gibi metotları düşünün. Bireysel nesnelerden ziyade sınıf düzeyinde anlamlı olan işlevsellik sağlarlar.
Görev
KolayHerhangi bir nesne oluşturmaya gerek kalmadan yardımcı dize işleme yöntemleri sağlayan bir StringUtils yardımcı sınıfı oluşturalım - statik yöntemleri göstermek için mükemmel!
Kodunuzu düzenlemek için iki dosya oluşturacaksınız:
StringUtils.java: Yaygın dize işlemlerini gerçekleştiren statik yöntemlere sahip bir yardımcı sınıf oluşturun:- Verilen dizedeki sesli harflerin (a, e, i, o, u - hem büyük hem de küçük harf) sayısını döndüren statik bir
countVowels(String text)yöntemi - Dizeyi tersine çevrilmiş olarak döndüren statik bir
reverse(String text)yöntemi - Dize ileri ve geri aynı şekilde okunuyorsa (büyük/küçük harf duyarsız)
true, aksi takdirdefalsedöndüren statik birisPalindrome(String text)yöntemi
- Verilen dizedeki sesli harflerin (a, e, i, o, u - hem büyük hem de küçük harf) sayısını döndüren statik bir
Main.java: Bir dizeyi işlemek için yardımcı sınıfınızı kullanın. Bir girdi alacaksınız: bir metin dizesi. Her statik yöntemi doğrudan sınıf adı üzerinden çağırın ve üç satır yazdırın:Vowels: [count]Reversed: [reversed string]Palindrome: trueveyaPalindrome: false
Analiz etmek için bir girdi alacaksınız: bir metin dizesi.
Statik yöntemlerin, önce bir örnek oluşturmak yerine sınıf adı kullanılarak (StringUtils.countVowels(text) gibi) çağrıldığını unutmayın. Bu, yardımcı sınıfları çağrılar arasında herhangi bir durum koruması gerekmeyen işlemler için kullanışlı hale getirir.
Kopya kağıdı
Statik metotlar sınıfın kendisine aittir ve bir nesne oluşturulmadan çağrılabilirler. Bunları static anahtar kelimesini kullanarak tanımlayın:
public class MathHelper {
public static int add(int a, int b) {
return a + b;
}
}
// Bir nesne oluşturmadan çağırın
int sum = MathHelper.add(5, 3); // 8Önemli kısıtlama: Statik metotlar, bir nesne olmadan var oldukları ve this referansına sahip olmadıkları için örnek (instance) değişkenlerine veya örnek metotlarına doğrudan erişemezler:
public class Counter {
private int count; // Örnek değişkeni
private static int total; // Statik değişken
public static void incrementTotal() {
total++; // Tamam - statik değişkene erişiliyor
// count++; // Hata! Örnek değişkenine erişilemez
}
}Statik metotlar, Math.sqrt() veya Integer.parseInt() gibi nesne durumuna bağlı olmayan yardımcı işlemler için idealdir.
Kendin dene
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String text = scanner.nextLine();
// TODO: Metni analiz etmek için StringUtils statik metotlarını kullanın
// Sesli harf sayısını almak için StringUtils.countVowels(text) metodunu çağırın
// Ters çevrilmiş dizeyi almak için StringUtils.reverse(text) metodunu çağırın
// Palindrom olup olmadığını kontrol etmek için StringUtils.isPalindrome(text) metodunu çağırın
// TODO: Sonuçları şu formatta yazdırın:
// Vowels: [count]
// Reversed: [reversed string]
// Palindrome: true/false
}
}
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Nesne Yönelimli Programlama bölümündeki tüm dersler
1OOP Temelleri
Harici DosyalarOOP'ye GirişSınıflar ve Nesnelerthis Anahtar KelimesiMetotlarAlanlar (Öznitelikler)Yapıcı MetotYapıcı Metot Aşırı YüklemeÖzet - Basit Hesap Makinesi4Kalıtım
Temel Kalıtım (extends)super Anahtar KelimesiMetot Geçersiz Kılma (@Override)Yapıcı Metot ZincirlemeObject SınıfıTekli ve Çok Seviyeli KalıtımNeden Çoklu Sınıf Kalıtımı Yok?Özet - Çalışan Hiyerarşisi7Özel Metotlar ve Object Sınıfı
toString() Metoduequals() ve hashCode()clone() MetoducompareTo() ve ComparableComparator ArayüzüÖzet - Özel Sıralama2Erişim Belirleyiciler ve Kapsülleme
Erişim Seviyelerine Genel BakışGetter ve Setter MetotlarıBilgi Gizlemefinal Anahtar KelimesiÖzet - Banka Hesabı Yöneticisi5Polimorfizm
Metot Aşırı Yükleme TemelleriMetot Geçersiz Kılma (Çalışma Zamanı)Upcasting ve Downcastinginstanceof OperatörüSoyut Sınıflar ve MetotlarÖzet - Şekil Hesaplayıcı8İleri Düzey OOP Kavramları
Kompozisyon vs KalıtımAgregasyon vs KompozisyonDahili, Yuvalanmış ve Anonim SınıflarEnum'lar ve Enum MetotlarıRecords (Java 16+)Sealed Classes (Java 17+)11Tasarım Kalıpları Bölüm 1
Tasarım Kalıplarına GirişSingleton KalıbıFactory KalıbıBuilder KalıbıObserver KalıbıStrategy Kalıbı14Final Meydan Okumaları
E-Öğrenme PlatformuBankacılık SistemiOyun Karakteri GeliştirmeAraç Kiralama Servisi3Sınıf Özellikleri ve Statik Üyeler
Instance ve Statik DeğişkenlerStatik MetotlarStatik BloklarSabitler (static final)Özet - Sayaç ve Utility6Arayüzler ve Soyut Sınıflar
Arayüzlere GirişArayüzleri UygulamaÇoklu Arayüz UygulamaArayüzlerde Default ve StaticSoyut Sınıflar ve ArayüzlerFonksiyonel ArayüzlerÖzet - Ödeme Sistemi9Generics
Generics'e GirişGeneric SınıflarGeneric MetotlarSınırlandırılmış Tip ParametreleriWildcard'lar (?, extends, super)Özet - Generic Container12Tasarım Kalıpları Bölüm 2
Komut KalıbıAdaptör KalıbıDekoratör KalıbıŞablon Metot KalıbıDurum KalıbıKompozit KalıbıYineleyici Kalıbı