Java

Java’da Değişkenler ve Veri Türleri

Java'da Değişkenler ve Veri Türleri

Java, güçlü ve statik tür sistemine (strongly-typed and statically-typed) sahip bir programlama dilidir. Bu yapı, yazılan her verinin türünün derleme aşamasında bilinmesini ve kontrol edilmesini zorunlu kılar. Java uygulamalarında verilerin bellekte saklanması, işlenmesi ve güvenli bir şekilde yönetilmesi doğrudan değişkenler ve veri türleri aracılığıyla gerçekleştirilir.

Değişken Nedir ve Nasıl Tanımlanır?

Değişken, programın çalışması sırasında ihtiyaç duyulan verilerin geçici olarak saklandığı bellek gözlerine verilen addır. Java’da bir değişken oluşturulurken önce saklanacak verinin türü, ardından değişkene verilecek isim belirtilir. İsteğe bağlı olarak tanımlama anında bir başlangıç değeri atanabilir.

Java’da değişken tanımlama sözdizimi şu şekildedir:

veriTuru degiskenAdi = deger;

Değişken isimlendirirken bazı kurallara uyulması zorunludur:

  • Değişken isimleri bir harf, alt çizgi (_) veya dolar işareti ($) ile başlamalıdır; rakamla başlayamaz.
  • Java büyük-küçük harfe duyarlıdır (case-sensitive). Bu nedenle “sayi” ile “Sayi” tamamen farklı iki değişkendir.
  • Java’nın rezerve ettiği özel anahtar kelimeler (class, int, public vb.) değişken ismi olarak kullanılamaz.
  • Genel kabul görmüş kodlama standardı olarak camelCase (örneğin: kullaniciYasi, toplamTutar) yapısı tercih edilir.

Aşağıdaki örnekte temel bir değişken tanımlama ve ekrana yazdırma işlemi yer almaktadır:

public class DegiskenOrnegi {
    public static void main(String[] args) {
        int sunucuPort = 8080;
        System.out.println("Uygulamanın çalıştığı port: " + sunucuPort);
    }
}

Bu örnekte “int” veri türünde “sunucuPort” adında bir değişken tanımlanmış ve bellekteki bu alana 8080 tam sayı değeri atanmıştır. Ardından bu değer konsola yazdırılmıştır.

Java’da Temel (İlkel – Primitive) Veri Türleri

Java’da veriler temel olarak iki ana kategoriye ayrılır: ilkel (primitive) ve referans (reference) türler. İlkel veri türleri, doğrudan değerin kendisini belleğin stack bölgesinde saklayan en basit yapı taşlarıdır. Java dilinde toplam 8 adet ilkel veri türü bulunur.

Tam Sayı Türleri

Tam sayı değerlerini depolamak için kullanılan dört farklı veri türü vardır. Bunlar bellekte kapladıkları alan ve tutabilecekleri sayı aralığına göre ayrılır:

  • byte: 8 bit (1 bayt) uzunluğundadır. -128 ile 127 arasındaki tam sayıları saklar. Bellek kısıtının yüksek olduğu ağ paketleri veya dosya okuma işlemlerinde tercih edilir.
  • short: 16 bit (2 bayt) uzunluğundadır. -32.768 ile 32.767 arasındaki tam sayıları tutar.
  • int: 32 bit (4 bayt) uzunluğundadır. Yaklaşık -2 milyar ile +2 milyar arasındaki tam sayıları saklar. Java’da tam sayılar için varsayılan türdür.
  • long: 64 bit (8 bayt) uzunluğundadır. Çok büyük sayısal veriler (örneğin mikrosaniye cinsinden zaman damgaları, finansal kimlikler) için kullanılır. Değer tanımlanırken sonuna “L” veya “l” harfi eklenmelidir.

Ondalıklı Sayı Türleri

Kesirli sayıların saklanması için iki farklı tür kullanılır:

  • float: 32 bit (4 bayt) uzunluğundadır. Tek duyarlıklı (single-precision) kayan noktalı sayıdır. Sayı değerinin sonuna “f” veya “F” harfi konulmalıdır.
  • double: 64 bit (8 bayt) uzunluğundadır. Çift duyarlıklı (double-precision) kayan noktalı sayıdır. Java’da ondalıklı sayılar için varsayılan türdür ve matematiksel hassasiyeti daha yüksektir.

Karakter ve Mantıksal Türler

  • char: 16 bit (2 bayt) uzunluğundadır. Unicode karakter standardını kullanır ve tek bir karakteri saklar. Tanımlanırken tek tırnak (‘ ‘) kullanılır.
  • boolean: Yalnızca iki değer alabilir: “true” ya da “false”. Karar yapılarında ve mantıksal kontrollerde temel görevi üstlenir. Mantıksal olarak 1 bitlik bilgi ifade etse de JVM seviyesindeki bellek temsili mimariye bağlıdır.

Tüm ilkel türlerin kullanımını gösteren örnek kod bloğu:

public class IlkelTurler {
    public static void main(String[] args) {
        byte seviye = 3;
        short agPortu = 443;
        int istekSayisi = 150000;
        long kullaniciKimligi = 9876543210L;

        float cpuKullanimi = 45.6f;
        double gecikmeSuresi = 12.4589;

        char durumKodu = 'A';
        boolean baglantiAktif = true;

        System.out.println("Sistem Durumu: " + durumKodu);
        System.out.println("Aktif mi: " + baglantiAktif);
        System.out.println("CPU: " + cpuKullanimi);
    }
}

Bu programda, farklı boyutlardaki sayısal, karakter ve mantıksal veriler uygun türlerle eşleştirilerek belleğe yerleştirilmiş ve ekranda gösterilmiştir.

Referans (Reference) Veri Türleri

İlkel türlerin aksine referans veri türleri, nesnelerin kendisini değil, o nesnelerin bellekteki (Heap alanı) adreslerini tutar. Sınıflar (Classes), Diziler (Arrays) ve Arayüzler (Interfaces) referans veri türleridir.

Java’da en sık kullanılan referans türü “String” sınıfıdır. Metin bloklarını temsil etmek için kullanılır.

public class ReferansTurler {
    public static void main(String[] args) {
        String alanAdi = "yunuskaytan.com";
        int[] portListesi = {80, 443, 22};

        System.out.println("Hedef: " + alanAdi);
        System.out.println("İlk port: " + portListesi[0]);
    }
}

Yukarıdaki kodda “alanAdi” değişkeni, “yunuskaytan.com” metin nesnesinin Heap bellekteki adresine işaret eder. Benzer şekilde “portListesi” bir dizi nesnesinin referansıdır.

Bellek Yönetimi: Stack ve Heap Ayrımı

Java’da değişkenlerin bellek performansı ve çalışma prensibi Stack ve Heap alanları üzerinden şekillenir:

  • Stack Bellek: Yordam (metot) çağrıları ve yerel ilkel değişkenler burada depolanır. Hızlı erişilir, boyutu küçüktür ve değişkenlerin yaşam süresi içinde bulundukları blok sona erdiğinde biter.
  • Heap Bellek: new anahtar kelimesi ile oluşturulan nesnelerin ve dizilerin saklandığı alandır. Referans türündeki bir değişken tanımlandığında değişkenin referans adresi Stack üzerinde tutulurken, nesnenin asıl gövdesi Heap üzerinde yaşar.

Tür Dönüşümleri (Type Casting)

Farklı türdeki değişkenlerin birbirine atanması gerektiğinde tür dönüşümü uygulanır. Bu işlem iki farklı yöntemle gerçekleşir:

  • Genişletme Dönüşümü (Widening Casting): Küçük boyutlu bir türün daha büyük boyutlu bir türe dönüştürülmesidir. Veri kaybı riski bulunmadığından Java bu dönüşümü otomatik olarak gerçekleştirir (Örnek: byte -> int -> double).
  • Daraltma Dönüşümü (Narrowing Casting): Daha büyük boyutlu bir verinin daha küçük boyutlu bir türe zorlanarak dönüştürülmesidir. Veri kaybı veya taşma ihtimali olduğu için programcı tarafından açıkça parantez içinde belirtilmelidir.
public class DonusumOrnegi {
    public static void main(String[] args) {
        int tamSayi = 100;
        double ondalikSayi = tamSayi;

        double yuksekHassasiyet = 9.78;
        int yuvarlananSayi = (int) yuksekHassasiyet;

        System.out.println("Otomatik genişleyen değer: " + ondalikSayi);
        System.out.println("Kesilen tam sayı değeri: " + yuvarlananSayi);
    }
}

Yukarıdaki örnekte “tamSayi” değeri doğrudan “double” türüne dönüştürülmüş ve 100.0 olmuştur. İkinci işlemde ise 9.78 değeri int türüne daraltılırken ondalık kısım atılmış ve sonuç 9 olmuştur.

Değişken Tanımlarken Dikkat Edilmesi Gerekenler

Java uygulamalarında hatasız ve performanslı kod üretmek için değişken yönetiminde şu kurallar göz önünde bulundurulmalıdır:

  • Değişkenin yaşam alanını (scope) mümkün olduğunca dar tutun; değişkenleri sadece kullanılacakları blok içinde tanımlayın.
  • Veri kaybını önlemek için daraltma dönüşümü yaparken veri aralıklarını dikkatlice kontrol edin.
  • Mümkün olan en küçük ve amaca en uygun veri türünü seçerek gereksiz bellek kullanımından kaçının.
  • Sayısal taşma (overflow) riskine karşı büyük değerler beklenen hesaplamalarda int yerine long türünü değerlendirin.

Özet ve Sonraki Adımlar

Java’da değişkenler ve veri türleri, programlama dilinin tip güvenliğini sağlayan en kritik parçalarıdır. 8 ilkel veri türünün sınırlarını bilmek ve nesne tabanlı referans türlerin Stack-Heap ilişkisini kavramak, yazılımların kararlı çalışmasını sağlar. Bir sonraki aşamada bu değişkenler üzerinde matematiksel, mantıksal ve ilişkisel işlemler yapabilmek için Java’da operatörler ve karar yapıları incelenmelidir.

#java#java degiskenler#nesne yonelimli programlama#veri tipleri#yazılım

コメント

まだコメントはありません。最初のコメントをどうぞ。

コメントを書く

コメントは管理者の承認後に公開されます。