14 Haziran 2012 Perşembe

STATİC BLOK


Static kod blokları static değişkenlere ilk değer atamalarını yapmak için kullanılan kod bloklarıdır. Bunlara literatürde “static initializer” denmektedir. Static kod blokları sınıf değişkenleri belleğe yüklendikten hemen sonra işletilirler. JVM, o sınıfa ait bir nesne oluşturulmadan önce static kod bloklarının işletimini garanti eder.

import java.util.Random;
 public class StaticInitializer {
 
         private static int dizi[];
         private static int boy = 10;
 
         static {
 
                 dizi = new int[boy];
                 Random rnd = new Random();
 
                 for(int i=0; i < boy; i++)
                          dizi[i] = rnd.nextInt(100);
         }
}
Yukarıdaki koda baktığımızda static kod bloğu içerisinde 0 ile 99 arasında rastgele belirlenmiş 10 adet sayıdan oluşan bir dizi oluşturulduğunu görüyoruz. Bu kod bloğu sayesinde, bu sınıfın değişkeni olan dizi değişkeni yaratıldığı anda 10 tane rastgele sayı ile doldurulmaktadır. Static kod blokları içerisinde de, static metotlarda olduğu gibi static olmayan sınıf öğelerine erişmek mümkün değildir. Static kod blokları yaygın olarak kullanılmadığından daha fazla detaya inmeye gerek yok diye düşünüyorum.
Statik blok için bir başka örneği inceleyecek olursak eğer:

public class StatikBlok{
   
       public static String sampiyon = "Sampiyon Cimbom.";
       
      static {
        System.out.println("Birinci statik blok : " + sampiyon);
    }

    public StatikBlok(){
        String sampiyon=kanaraya;
        System.out.println("Kurucu Metod..");
Static kod blokları static değişkenlere ilk değer atamalarını yapmak için kullanılan kod bloklarıdır. Bunlara literatürde “static initializer” denmektedir. Static kod blokları sınıf değişkenleri belleğe yüklendikten hemen sonra işletilirler. JVM, o sınıfa ait bir nesne oluşturulmadan önce static kod bloklarının işletimini garanti eder.

package com.javagelistir.makale;
import java.util.Random;
 
public class StaticInitializer {
 
         private static int dizi[];
         private static int boy = 10;
 
         static {
 
                 dizi = new int[boy];
                 Random rnd = new Random();
 
                 for(int i=0; i < boy; i++)
                          dizi[i] = rnd.nextInt(100);
         }
}
Yukarıdaki koda baktığımızda static kod bloğu içerisinde 0 ile 99 arasında rastgele belirlenmiş 10 adet sayıdan oluşan bir dizi oluşturulduğunu görüyoruz. Bu kod bloğu sayesinde, bu sınıfın değişkeni olan dizi değişkeni yaratıldığı anda 10 tane rastgele sayı ile doldurulmaktadır. Static kod blokları içerisinde de, static metotlarda olduğu gibi static olmayan sınıf öğelerine erişmek mümkün değildir. Static kod blokları yaygın olarak kullanılmadığından daha fazla detaya inmeye gerek yok diye düşünüyorum.
Statik blok için bir başka örneği inceleyecek olursak eğer:

package statikblok;


public class StatikBlok{
   
        public static String ilk = "ilk çalışan alana gider";
        
       static {
        System.out.println("Birinci statik blok : " + ilk);
    }

    public StatikBlok(){
       String sampiyon="kanarya";
        System.out.println("Kurucu Metod..");
    }

    public static String ikinci = "ikinci çalışan alana gider";

    static {
        System.out.println("Ikinci satatik blok : " +ikinci);
    }

    public static void main(String[] args){
        System.out.println(ilk);
         StatikBlok sb = new StatikBlok();
        StatikBlok.statikMethod2();
    }

    static {
        statikMethod();
        System.out.println("Üçüncü statik blok çalisti..");
    }

    public static void statikMethod() {
        System.out.println("statikMetod calisti..");
    }

    public static void statikMethod2() {
        System.out.println("statikMetod2 calisti..");
    }
}


Yukarıda ki örneği inceleyecek olursak görüldüğü gibi birden fazla statik blok tanımlanmıştır ve bu statik blokların çalışması ilk bloktan itibaren çalışmaya başlamaşdır.Yani main metodu ilk olarak çalıştırılmayacaktır.Öncelikle ilk statik blok sonra ikincisi şeklinde bloklar bittikten sonra ise main metodu çalıştırılacaktır.Bir diğer husus da static blok içinde tanımlanan değişkenleri static olarak siz yazmasanızda zaten staticdir.
Çıktısı ise;

Birinci statik blok : ilk çalışan alana gider
Ikinci satatik blok : ikinci çalışan alana gider
statikMetod calisti..
Ucuncu statik blok çalisti..
ilk çalışan alana gider
Kurucu Metod..
statikMetod2 calisti..

Şeklindedir...


13 Haziran 2012 Çarşamba

ENUM SINIF YAPISI



Enum sınıfı için konuşacak olursak eğer enum sınıfı tıpkı interface gibi bazı sabitleri tanımlamamıza yarar. Yani tanımladığımız değişkenlere enum  sınıfı  isiminden direkt olarak ulaşabiliriz.
Örnek olarak haftanın  günlerini tanımlayalım ve günlere nasıl ulaşabileceğimizi gösterelim.
public enum Gunler {
       Pazartesi, Salı, Carsamba, Persembe, Cuma, Cumartesi, Pazar
}
Gördüğünüz gibi Gunler adında enum sınıfı oluşturuldu ve haftanın günlerini olduğu gibi yazdık. Artık enum sınıfımız oluşturuldu. Bunu test etmek istersek, Test sınıfı oluşturulur  ve main metodu içinde  enum sınıfının ismi üzerinden ulaşılır. Aşağıdaki gibi;
Kısaca,
public static void main(String[] args) {
             System.out.println(Gunler.Pazar);
       }
Şeklinde çalıştırdığımızda Pazar yazacaktır.

FİNAL VE STATİC ANAHTAR SÖZCÜKLERİ


Bir metod eğer final ise o metod kendisinin override edilmesini engeller.(Sadece bu!!!).
Değişkenlerde ise bilindiği gibi sabit değerler için kullanılır.
Sınıfın Final Olması:
Final sınıflar hiçbir class tarafından miras alınamaz.Final sınıflar hiçbir miras bırakmaz.
Final sınıfa örnek verecek olursak :
String sınıfı final bir sınıfdır. Yani değiştirilemez yeni bir nesne ürettiğimizde her seferinde yeni bir nesne alanı üretmek zorundadır.Bunun için böyle durumlarda StringBuffer sınıfı kullanılır. StringBuffer değiştirilebilir  bir sınıftır.
Kısaca bu şekilde bahsedebiliriz. Bunlar sadece kısa notlar.. :)

STATİC                                                                                                                     
Static kelimesinin Türkçe karşılığı durağan demektir. Eğer bir değişkeninizi static olarak tanımlamışsanız bu değişkeninize ulaşmak istediğinizde sadece sınıfın isminden ulaşabilirsiniz. Nesne üretmeye gerek kalmaz. Ve static değer static bölgesinde tutulur. Yani static üyeler sınıfa aittir, nesneye ait değildir diyebiliriz.
Static değişkene en iyi örnek static olarak tanımlanan sayac değişkeni  herhangi bir sınıfın constructor(yapıcı) metoduna yazılırsa eğer, her nesne üretildiğinde sayac artar ve kaç nesne oluşturulduğunu anlarız.
Static metodlara bakacak olursak eğer;
Statik metodlar nonstatic değişkenlere erişemez. (aşağıdaki gibi PI ve pi şeklinde iki değişken tanımlarsak eğer)
private static final double PI = 3.1415;
      private double pi = 3.0;
mesela aşağıdaki getAlan() metodu  pi değişkenine erişemez. Çünkü  pi değişkeni non-static.
public static double getAlan(double r){
            return PI * r * r;
      }
NOT:Final ve Static anahtar sözcüklerine kısaca değinmek istedim.Umarım faydalı olur.

İNTERFACE SINIFINDA DİKKAT EDİLECEK HUSUSLAR



İNTERFACEDE DEĞİŞKENLER

İnterface içinde siz demesenizde bir variable hem public hem static ve final özelliklerini alır.
İnterface içinde değişkenler public olur.
İnterface içinde değişkenler mutlaka static olmalı.
İnterface de tanımlanan değişkenler  interface in isminden direkt olarak erişilir. Nesne üretmemize gerek kalmaz.
Örneğin: Sabitler adında bir interface sınıfı olursa;

private static final double PI = 3.1415; (Bu şekilde sabitler tanımlayabiliriz.)

şeklinde tanımlamamız gerekir. Daha sonra bir metodun veya değişkenin final veya static olması durumuna değineceğiz.
Tanımlanan bu değişkenleri diğer paketlerde dahil heryerden  Sabitler. PI şeklinde çağırabiliriz ve kullanabiliriz.

INTERFACEDE METODLAR

İnterfacede tanımladığımız metodlar biz  yazmasak dahi abstract olarak kabul edilir. Ve interfacede yazılan metodların gövdesi olmaz.
Örneğin: Swing de kullanılan bazı interface sınıfları vardır. Bunlardan biri SwingConstants interface dir. Aşağıdaki gibi yazdıktan sonra kaynak dosyasını incelemenizi tavsiye ederim. SwingConstants kaynak dosyasında bu sınıftaki değişkenler teker teker tanımlanmıştır.