Sabitler (static final)
Coddy'nin Java Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası — ders 18 / 87.
static ve final anahtar kelimelerinin birleştirilmesi bir sabit oluşturur; bu, sınıfa ait olan ve asla değişemeyen bir değerdir. Bu, Java'da sabitleri tanımlamanın standart yoludur.
public class GameSettings {
public static final int MAX_PLAYERS = 4;
public static final double GRAVITY = 9.81;
public static final String GAME_TITLE = "Space Adventure";
}Geleneksel olarak, sabit isimleri onları normal değişkenlerden ayırt etmek için UPPER_SNAKE_CASE kullanır. Hem static hem de final oldukları için, onlara sınıf adı üzerinden erişirsiniz ve değerlerinin asla değişmeyeceği garanti edilir:
System.out.println(GameSettings.MAX_PLAYERS); // 4
// GameSettings.MAX_PLAYERS = 8; // Hata! DeğiştirilemezSabitler genellikle public olarak bildirilir çünkü uygulamanız genelinde paylaşılmaları amaçlanır. Math.PI gibi değerleri düşünün - bu, herhangi bir kodun kullanabileceği bir public static final sabitidir.
Neden doğrudan yazılmış değerler yerine sabitler kullanmalısınız? Kodunuzun her yerinde 4 yazarsanız ve daha sonra bunu 6 olarak değiştirmeniz gerekirse, her bir örneği bulup güncellemeniz gerekir. MAX_PLAYERS gibi bir sabitle, değişikliği tek bir yerde yaparsınız.
Sabitler ayrıca kodun daha okunabilir olmasını sağlar - MAX_PLAYERS, gizemli bir 4 değerinden daha nettir.
Görev
KolayÖnemli matematiksel değerleri sabitler olarak saklayan bir MathConstants yardımcı sınıfı ve bu sabitleri hesaplamalar yapmak için kullanan bir CircleCalculator oluşturalım.
Kodunuzu düzenlemek için iki dosya oluşturacaksınız:
MathConstants.java:public static finalalanlarını kullanarak matematiksel sabitleri tutan bir sınıf oluşturun:3.14159değerine sahipPI2.71828değerine sahipE(Euler sayısı)1.61803değerine sahipGOLDEN_RATIO
Main.java: Daire hesaplamaları yapmak için sabitlerinizi kullanın. Girdi olarak bir yarıçap alacaksınız ve üç satır yazdıracaksınız:- Dairenin alanı:
Area: [value] - Dairenin çevresi:
Circumference: [value] - Altın oranla ölçeklendirilmiş çap:
Golden Diameter: [value]
- Dairenin alanı:
Hesaplamalar için:
- Area = PI * radius * radius
- Circumference = 2 * PI * radius
- Golden Diameter = 2 * radius * GOLDEN_RATIO
Bir girdi alacaksınız: yarıçap (double).
Tüm çıktı değerlerini String.format("%.2f", value) kullanarak 2 ondalık basamağa formatlayın. Sabitlerinize MathConstants.PI gibi sınıf adı üzerinden erişin.
Kopya kağıdı
static ve final anahtar kelimelerini birleştirmek bir sabit oluşturur - sınıfa ait olan ve asla değişemeyen bir değer:
public class GameSettings {
public static final int MAX_PLAYERS = 4;
public static final double GRAVITY = 9.81;
public static final String GAME_TITLE = "Space Adventure";
}Geleneksel olarak, sabit isimleri UPPER_SNAKE_CASE kullanır. Sabitlere sınıf adı üzerinden erişin:
System.out.println(GameSettings.MAX_PLAYERS); // 4
// GameSettings.MAX_PLAYERS = 8; // Hata! DeğiştirilemezSabitler genellikle uygulamanız genelinde paylaşılmak üzere public olarak bildirilir. Sabit kodlanmış değerleri anlamlı isimlerle değiştirerek kodun bakımını kolaylaştırır ve okunabilirliğini artırırlar.
Kendin dene
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
double radius = scanner.nextDouble();
// TODO: MathConstants.PI kullanarak alanı hesaplayın
// Formül: PI * radius * radius
// TODO: MathConstants.PI kullanarak çevreyi hesaplayın
// Formül: 2 * PI * radius
// TODO: MathConstants.GOLDEN_RATIO kullanarak altın çapı hesaplayın
// Formül: 2 * radius * GOLDEN_RATIO
// TODO: Sonuçları virgülden sonra 2 basamak olacak şekilde yazdırın
// Biçimlendirme için String.format("%.2f", value) kullanın
// Çıktı formatı:
// Area: [value]
// Circumference: [value]
// Golden Diameter: [value]
}
}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ı