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.
 

26 Mayıs 2012 Cumartesi

Java ve MS DOS

Hazırlana java kaynak kodlarını derleyip çalıştırmak için iki yol vardır.
                1.   Komut satırı kullanarak;
                2.  Herhangi bir görsel arayüz kullanarak.(Netbeans, Ecplise  vs.)
Komut satırında çalışmak boşuna zaman harcamak gibi gelsede aslında  kaynak programı yazmayı, derlemeyi, gerekiyorsa hata ayıklamayı ve sonunda programı yürütmeyi el yordamıyla yapmak, görsel arayüzlerin veremediği becerileri kazandıracaktır. İşi öğrendikten sonra iyi bir görsel arayüz, programcının hayatını elbette kolaylaştıracaktır. Daha hızlı, daha hatasız yazmayı, derlemeyi, hata ayıklamayı ve yürütmeyi birer düğme tıklayışı ile yapmak, her programcıya şevk verir ve üretkenliğini artırır.
java ile geliştirme yapmak için birden fazla ortam olduğundan bahsettik. Hangi ortamda çalışılıyor olunursa olunsun çalıştığınız makinede mutlaka jdk (java development kit ) bulunması gerekir. Bunu bilgisayarınıza kurduğunuzu varsayarak devam edelim.

Jdk indirilip kurulduktan sonra notepad e yazılan kodları komut satırında  derleyen ve çalıştıran .exe dosyaları vardır. Bu dosyalar javac. exe ve java. exe dosyalarıdır. Bunlar indirmiş olduğumuz jdk programının içindeki bin klasörünün içindedir. Kurulum anında kurulum yerini değiştirmezseniz eğer doysalar programfiles içinde Java klasörünün içinde bulunacaktır. Nereye kaydettiğini bildikten sonra bin klasörü açılarak bin klasörünün açılmış haldeki yaolu yani path i biliniyor demektir.
Bu path i bin klasörünün içinde iken adres satırına tıklanırsa eğer path i kopyalayarak komut satırına tanıtmamız lazım. Dosya aşağıdaki gibi bulunmaktadır. 


Edinmemiz gereken path à     C:\Program Files\Java\jdk1.7.0_01\bin olacaktır.
Şimdi gelelim path i eklemeye.
Adım adım yapacak olursak eğer;
Bilgisayarım à Özellikler àGelişmiş Sistem Ayarları àGelişmiş à Ortam Değişkenleri 



Buradan Path i seçip düzenle dediğimizde değişken  değerinin sonuna “;” koyarak edindiğimiz path i ekleyip tamam diyerek sonlandırabiliriz.
Artık yazdığımız kodları komut satırında derleyebiliriz. Şimdi C: diskine deneme adında bir klasör oluşurup ve notepade kodları yazıp uzantısını java ile değiştirerek deneyebiliriz.
Klasik olarak ilk yazılan programı yazacak olursak  mesela, kodları yazdıktan sonra .txt dosyasının ismini Merhaba.java yaparsak bu dosyayı derleyip çalıştırabiliriz. Değiştirip kaydettikten sonra komut satırında deneme dizinine gelerek  javac  Merhaba.java yazarak derleme yapılır ve derleme sonunda deneme dizininin içine bir class oluşturulur. Artık Çalıştırmak için bu class kullanılacaktır.
Çalıştırmak içinse sadece java Merhaba yazmamız yeterli olacaktır.
Not: programda yapılan her değişiklikten sonra derleme yapmalıyız. Aksi takdirde ilk derlenen program çalıştırılacaktır.
Çıktı aşağıdaki gibi olacaktır. Program Merhaba Java --- Komut Satiri  yazdırmaktadır.




Bundan sonrası size kalmış, yeni programlar yazıp komut satırında denemek faydalı olacaktır umarım.
FAYDALI OLMASI DİLEĞİYLE …..

MS DOS Ortamı


Merhabalar ;
Bugün değineceğimiz konu MS DOS ortamında çalışmak olacak. Biraz MS DOS ortamını tanıdıktan sonra text dosyasına yazdığımız java kodlarını komut satırında derleyip,  çalıştırmayı öğreneceğiz. 
Temel MS DOS komutları
Sürücü İfadeleri
Sürücüler, bir başka ifadeyle diskler komut satırında kendilerine işletim sistemi tarafından atanan harfin  önüne “:” koymak suretiyle ifade edilir.
C:           : C sürücüsü
A:           : A Sürücüsü
D:           : D Sürücüsü 
MS DOS da mesela d sürücüsüne geçmek için D: yazıp enter tuşuna basmak yeterli olacaktır.
 Ayraç
Komutlarla çalışırken çoğunlukla disk adı, klasör adı ve dosya adını birlikte kullanırız. Windows işletim sistemlerinde bunları birbirinden “\” ile ayırırız.

Örnek C:\windows\system32\calc.txt
Bu örneğimizde en üstte bulunan ROOT(\) tan yani kök dizininden  Windows dizinine(DAL)  oradan da system32 klasöründeki calc.txt dizinine ulaşılmaktadır. Ulaşma bir hiyerarşi içindedir ve ayraç ile geçiş sağlanır. Ve kesinlikle geçiş yapılacak dizinin yolu yukarıdaki gibi belirtilmelidir.

NOT: directory = dizin = klasör = folder  à aynı olgunun değişik ifadelerdir.
Gelelim kullanılan bazı komutlara.(0. indisden başladım çaktırmayın :) )

0.   CD (Change Directory)
Dizin (folder) değiştirmek için kullanılır.

Örnekler
cd windows                                                      : windows klasörüne git..
cd windows\system32                                       : windows içindeki system32 klasörüne git..
cd..                                                                  : Bir üst klasöre git..       
cd..\..                                                               : İki üst klasöre git..       
cd\                                                                   :Kök (root) dizine git..

     1. MD (Make Directory)
Dizin (klasör) oluşturmak için kullanılır.
Örnekler
 md java                              : java isimli bir klasör oluştur...
 md java\jsp                        : java klasörü içinde jsp isimli bir klasör oluştur..

2.    RD (Remove Directory)
Bir dizini(klasörü) silmek için kullanılır. Silinecek klasörün içi boş olmalıdır.

Örnekler
 rd java                             : java isimli bir klasörü sil...
 rd java\jsp                        : java klasörü içindeki jsp isimli klasörü sil..

      3. COPY [sürücü:][yol]<kaynak dosyalar> [sürücü:][yol]<hedef dosyalar>
Dosya kopyalamak için kullanılır.
Örnekler
copy c:\bordrolar\ocak.xls d:\yedek\ocak.xls

4.       REN [sürücü:][yol] <dosya adı> <yeni dosya adi>
Dosyaları yeniden adlandırmak için kullanılır.
Örnekler
 ren ocak.xls ocak2001.xls : ocak.xls olan dosya ismini ocak2001.xls olarak değiştir..

5.       DIR
Dizin ve dosyaları görüntülemek için kullanılır.
Örnekler
dir                                         : Tüm dosyaları listele..
dir *.*                                  : İsmi ve uzantısı ne olursa olsun tüm dosyaları listele..
dir *.doc                            : Uzantısı doc olan tüm dosyaları listele..
dir *.pdf                             : Uzantısı pdf olan dosyaları listele..
dir a*.*                              : İsmi a ile başlayan tüm dosyaları sil..   
dir d:\yedek\*.xls         : D sürücüsünün yedek dizinindeki uzantısı xls olan tüm dosyaları listele..
    
      6.    CLS
Ekranı temizler.

      7.  DEL [sürücü:][yol] dosya Dosya silmek için kullanılır.
Örnekler
del run.bat                     : run.bat dosyasını sil..
del *.pdf                        : Uzantısı pdf olan dosyaları sil..
del d:\yedek\*.xls         : D sürücüsünün yedek dizinindeki uzantısı xls olan tüm dosyaları sil..

            8.    PATH [sürücü:][yol];[sürücü:][yol]...
Arama yolu ayarlama komutudur. Komut satırında, PATH ile tanımı yapılan klasör içindeki çalıştırılabilir dosyalara (örneğin ;  . exe,  .com,  .bat uzantıya sahip) , bilgisayarın hangi klasörü içinde olursanız olun erişilebilir. Erişim derken, çalıştırmak maksadıyla erişim kastedilmektedir.
Burada sürücü ve yol, ulaşılmak istenen dosyaların bulunduğu sürücü ve yol (dizin) isimleridir. İki dizinin birbirinden ayrılmasında noktalı virgül (;) kullanılır.
Örnekler
path                                                   :Hangi dizinlere arama yolu tanımlandığını gösterir.
path;                                                  :Tanımlanmış olan arama yollarını iptal eder.
path c:\dos;c:\maas;                        :C sürücüsündeki DOS ve MAAS dizinlerine arama yolu tanımlar.

     9. EXIT
MS-Dos'dan oturumunu kapatmak amacıyla kullanılır.

8 Mayıs 2012 Salı

Algoritma ve Akış Diyagramları

Merhabalar,
Programlamaya başlamadan önce algoritmayı bilmek gerek değil mi.Öncelikle akış diyagramları şekil ve tanımları anlamaya çalışalım.Yavaş yavaş java programlamaya başlayabiliriz.
Hadi bakalım hayırlısı. 
Akış diagram sembolleri

Şimdilik bu kadar bu ilk yazı paylaşımım olduğu için eksiklikler olabilir.Kusurumu mazur görün.