transient etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
transient etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

26 Şubat 2015 Perşembe

Keywords in Java

       S.a. Arkadaşlar,
   Uzun zamandır yazamıyorduk. Bugünkü konumuz java'da olan tüm keywordleri elimizden geldiğince az ve öz bir şekilde yazmak. Hem tüm keywordleri ayno başlıkta altında toplayabilmek

Abstract: Belli bir sınıfın üyelerinin kullanıdığı temel arayüzler bulunmaktadır java dilinde bu kavram interface ile yürütülmektedir. C++ da bu işlem abstract class ile yürütülebilir.
Assert: Java 5 ile gelen bir hata belirtme işlemidir.
Boolean: Primative değer olup , false ve true değerini alır.
Break: Bir döngü içinde bu komuta rastlanıldığında, döngüyü kırar.
Byte: primative değer alıp -128 ile 127 arasında değerler alır.
Case: switch yapısı ile birlikte kullanılır. Belirlenen hangi case (seçenek ) uygunsa o çalıştırılır.
Catch : try catch bloğu içinde try içinde hata olduğunda çalışacak bloğu belirtir.
Char: tek karekterlik işlemlerde kullanılan primative tiptir.
Class: hepimizin duyduğu sınıf tanımlaması yapar. Başlı başlına bir denizdir diyebiliriz.
Const: değişmeyen değişken ve alanlara atanır. Bir kere tanımlanır. Ama java’da kullanılmıyor
Continue: Döngü içine kullanılır, break gibi. Farkı ise sadece o değer için döngüyü atlar, döngüyü tamamen kırmaz.
default: aynı paketteki erişebilir ama yazılmaz. Switch case yapısında  ise kullanılır ve diğer tüm koşullar sağlanmadığında bu koşul çalıştırılır.
Do: while ile birlikte çalışır ve döngüyü en az 1kez çalıştıran komuttur.
Double: küsüratlı değer alan sayıları göstermek için kullanılır. Floattan geniştir
Else : if else yapısında , if koşulu sağlanmadığı zaman bu yapı çalışmaya başlar.
Enum: Sabit değerleri ayrı ayrı tanımlamak yerine kullanılan sınıf tanımlamasıdır.
extends: bir sınıfa ait özelliklere başka bir sınava miras almak için kullanılır.
final: Bir kere değer tanımlaması yapılır ve daha sonra aynı sınıfa erişildiğinde sınıf atama yapmaz, konstrüktör ile okunur. Metodları ise alt sınıflarca override(ezme) edilemezler, sınıfları ise alt sınıflarca genişletilemezler.
Finally: try catch ile birlikte kullanılabilir, fakat her koşulda çalışması gereken kodları içerir
Float: küsüratlı sayıları göstermek için kullanılır
For: Hepimizin yakından bildiği döngü ifadesidir.
Goto: Pek kullanılması uygun olmasa da istenen yere götüren komut diyebiliriz.
İf: bir koşul ifadesir. Tek başına kullanıldığı gibi else ile de kullanılabilir.
İmplements: interfaceleri class ile kullanmak istediğimizde kullanırız.
İmport: Paketleri eklemek için kullanulır
insance of: Javada bir nesnenin bir sınıftan türemiş olup olmadığını anlamamızı sağlayan “instanceof” anahtar kelimesidir.  Varsa true yoksa false döndürür.
Long: int gibi değerleri alır, fakat int’ten daha büyük değerleri tutabilir.
Native: C++ extern komutu ile benzer mantıkta çalışır. Harici programlama dili desteği sağlar
New: obje tanımlama işlemi yapar.
package: Sınıflardan vb yapıları içinde bulunduran yapıdır.
private: Sadece içinde bulunduğu sınıf çağırabilir.
Protected:  Alt sınıf ve aynı pakettekiler erişebilir
public: Bütün sınıflardan erişilebilir
return: metotların geri dönüş değerlerini döndürür.
short: int gibi değerleri kullanmak için vardır. Short’tan büyük int’ten küçük değer aralığı vardır.
static : Java programlama dilinde bir metod ya da değişkenin belli bir objeye degil de bir sınıfın tamamına ait olduğunu belirten bir kelimedir. Metodu statik yapar ve dışarıdan çağrılırken sınıftan bir instance yaratılmaz. Aynı sınıf içinde statik olmayan bir metod tarafından çağırılamaz.
Strictfp: Flaot ile çalışırken farklı sebeplerden dolay değerler değişkenlik gösterebilir. Bunun önüne geçmek için bu komut kullanılır.
super: Tüm default yapılandırıcılar kalıtım ağacında yukarıdan aşağı doğru  java tarafından gizli olarak ve otomatik aktarılır. Bu yapılandırıcıları kullanmak için super() deyimini kullanırız.
Synchronized: Bir threat bir sınıfta herhangibir metoda erişirken diğer sınıfın erişiminin sırada beklemesini istersiniz. Bunun için bu ifadeyi kullanırız
This: Nesnelerin kendilerine ulaşmalarında kullanılır. Nesnelere bağlı data alanlarına erişim imkanı sağlar.
Throw: açıkça exception fırlatma işlemini yapar
throws: Eğer bir metot yönetemediği bir istisnaya neden olursa, metot çağırıcılarının kendilerini bu istisnaya karşı koruyabilmeleri için, metodun bu davranışı belirtmesi gerekir.
transient: Serileştirilmesi istenmeyen sınıf özellikleri/değişkenleri için kullanılan java anahtar terimidir
try: hata fırlatma olasılığı olan kodun yazıldığı kısımdır.
Void: Geri dönüş tipinin olmadığını belirtir. Return döndürülmez. Hata verir.
Volatile: Program dışında onu etkileyecek unsurların var olabileceğini hatırlatıyor
while: Bir çeşit döngüdür. Tek başına veya do ile kullanılabilir.

12 Ocak 2015 Pazartesi

Serialization/Serileştirme

                Bugünkü konumuz serizilation yani serileştirme olacak. Peki nedir serileştirme diye kısaca söyleyecek olursak bir andaki durumu kaydetme , daha sonra da kayıtlı olan durumu çekme işlemine diyoruz. Serileştirme özellikle network ve persistance işlemlerinde sıkça kullanılır. Serileştirmeyi kullanabilmemiz için implements Serializable . yazmamız gerek. Buradan anlayacağımıza göre serileştirme interface/ara birimdir. Şimdi konuyu daha iyi anlayabilmek için kod üzerinden devam edelim.

class Dog implements Serializable {
                String name = "Karabas";
}

public class SerializeDog {
public static void main(String[] args)
 throws IOException, ClassNotFoundException {
    Dog dog = new Dog();//dog objesi oluşturuyoruz

    FileOutputStream fos = new FileOutputStream("dog.serial");
    //dog.serial diye kaydediyoruz,farklı bir şey de olabilir
    ObjectOutputStream oos = new ObjectOutputStream(fos);
    oos.writeObject(dog);//oluşturduğumuz objeyi kaydediyoruz
    oos.flush();//bufferden bağımsız kaydeder
    oos.close();//açık olanı kapatmak zorundayız
                              
    FileInputStream fis = new FileInputStream("dog.serial");
    //şimdi okuma işlemini yapıyoruz
    ObjectInputStream ois = new ObjectInputStream(fis);                         
    Dog deserializedDog = (Dog)ois.readObject();
    //veri kaybı olmaması için cast yapıyoruz
    System.out.println(deserializedDog.name);//ekrana yaz
    ois.close();//açılan dosyayı kapat
                              
                }
}

Peki tüm değişkenleri serileştirmek zorunda mıyız diye bir soru akla gelebilir. Tam da bu nokta transient keywordu karşımıza çıkar. Serileştirmek istemediğimiz değişkenin başına yazıyoruz. Mesela yukarıdaki örneğimizde eğer transient String … yapsaydık çıktımız null olacaktı. Şimdi de son bir örnek verip , o örnekler üzerinde farklı işlemler yaparak nasıl farklı çıktıları aldığımızı incelemeye çalışacağız. Bu açıdan konunun daha iyi pekişeceğini inanıyorum. Çünkü neden bu böyle olmuş , böyle olursa ne olur gibi sorularının cevabını da bulmuş olacağımıza inanıyorum. Şimdi kodumuzu yazalım

class Animal { //serileştirme işlemi yapılsa çıktı değişir
int height = 30;
        //String name="akbas";*
}

public class Dog extends Animal implements Serializable {
String name;//* bu kodu silmezsek yukarıdaki name değişkeni pasif kalır

public Dog(int height, String name) {
this.height = height;// bu satırları silerken 
this.name = name; // çıktımız 30 akbas olur !!
}

public static void main(String[] args) throws IOException, ClassNotFoundException {
    FileOutputStream fos = new FileOutputStream("dog.ser");
    ObjectOutputStream oos = new ObjectOutputStream(fos);
    Dog dog = new Dog(50, "karabas");
    System.out.println(dog.height + " " + dog.name);
    oos.writeObject(dog);
    oos.close();

    FileInputStream fis = new FileInputStream("dog.ser");
    ObjectInputStream ois = new ObjectInputStream(fis);
    Dog deserializedDog = (Dog) ois.readObject();
    System.out.println(deserializedDog.height + " " + deserializedDog.name);
    ois.close();
}

}
  Çıktı:
50 karabas
30 karabas

    Burada çıktımız yukarıdaki gibi oldu. Fakat niye böyle oldusunu irdeleyelim isterseniz. Çünkü deserializetion işlemi sırasında yapılandırıcılar ve değişkenlere değer atanamıyor. Bu nedenle çıktımız böyle oldu. Dikkat edin Animal sınıfımıza serileştirme işlemi yapılmamış , eğer ona da serileştirme işlemi yaparsak bu sefer çıktımız değişecektir. Farklı satırlara bazı bilgiler ekledik. Sizler de aklınıza takılan soruları kodu değiştirerek daha iyi anlayabilirsiniz. Kolay gelsin

Kaynak
http://www.injavawetrust.com/pure-java-60-file-and-io-05-serialization/