Variable Declarations and Declaring Enums

Merhaba arkadaslar, pure java yazılarına devam ediyoruz. Bu yazımda variable ve enum declarasyonuna değinmeye çalışıcağım.

Variable Declarations

Java’da iki tip değişken vardır. Bunlar; primitive type ve reference type ‘dır. Primitive tip’den dolayı Java, pure object bir dil değildir. Scala’nın gözünü seveyim
Not : İlerleyen Java sürümlerinde primitive tiplerin kaldırılacağı konuşulmaktadır.

Primitive Type

Primitive tipler 8 adettir. Bunlar; char, boolean, byte, short, integer, long, float ve double’dır.

Primitive değişkenler; class değişkeni(static member), instance değişkeni, method parametresi ve local değişken olabilir. Aynı satırda birden fazla aynı tipte değişken declarasyonu yapılabilir;

Primitive tiplerin range aralıklarına bakalım;

2015-02-03 00:53:33

* byte için bakacak olursak; işaret biti ve kalan 7 bitten oluşmaktadır. En soldaki 8.ci bit 0 ise positive number, 1 ise negative number’dır. Range olarak ta; >-2^7 ve <2^7-1 (-128 ile 127). Positive number 1 eksiktir negative numberdan. Buda 0 sayısından kaynaklıdır. 2^8 == 256 , 256 farklı sayı alabileceğini göstermektedir.

 

2015-02-03 00:57:56

* boolean tipin range aralığı yoktur. boolean (cümle başı olmasına rağmen Boolean yazmak istemedim, wrapper class olarak anlaşılabilirdi.) type sadece true ve false değer alabilir. C/C++ ‘ın aksine >0 oldugunda true , <0 oldugunda false değildir. Bit sayısı da virtual machine göre değişkenlik göstermektedir.

* char tipi ; 16-bit Unicode karekterlerinden tek karekter içerir. ASCII karekter setinin genişletilmiş halidir. Unicode karekterleri 16 bit unsigned int olarak da bilinir. Java specification’da char değişkenin bir int olduğu yazılmaktadır. Bu da char değişkenin üzerinde bir sayı gibi artırma/azaltma yapılabileceğini gösterir. Range aralığı ise 0 ‘dan 65535(2^16-1).

 

 Default value

  • byte, short, int  : 0
  • double : 0.0d
  • float : 0.0f
  • boolean : false

Reference Type

Bir objeye reference eden değişkendir. Reference değişken declare edildikten sonra değiltirilemez. Reference değişkeni declare edilen tipe reference eder. Ek olarak IS-A ilişkisi bulunan, subtype değişkenlere de reference edebilir.

Reference değişkenler , primitive değişkenler gibi static değişken, instance değişken, local ve parametre değişkeni olabilir.

 İnstance variable

İnstance değişkenler, sınıf declarasyonu içerisinde ve method declarasyonu dışında declare edilir. Sadece sınıftan obje üretildiğinde initalize edilirler. İnstance değişkenler her object için unique’dir.

* Employee sınıfından üretilen her objenin kendine ait name, surname ve title alanları vardır. Terminolojide fields, instance variable, property yada attribute olarak geçebilir. Hepsi aynı anlamdadır.

* İnstance variable’lar hakkında birkaç ek bilgi;

  • 4 access level’a sahip olabilir.(3 access modifiers + package level)
  • final olabilir.
  • transient olabilir.
  • abstract,synchronized, strictfp,native olamaz.
  • static olamaz. (static olursa instance member olmaz class member olur)

* Yabancı bir kaç kelime görmüş olabilirsin şuan ama bir önceki yazılarda kabataslak anlatmıştım, yeri geldiğinde detaylıca değinicem insaAllah.

Local variable

* Automatic/Stack/Method variable olarak da bilinir. Method içerisinde declare edilir. Method içinde initalize etmek değil, declare etmek!.

* Local değişkenlerin ömrü tanımlandıkları method ile sınırlıdır. Method dışından ulaşımaz ve method tamamlandığında ölürler

* Local değişkenler , stack üzerinde yer alır. Heap üzerinde yer almaz. Eğer değişkenimiz bir reference değişkeni ise yine stack üzerinde saklanır. Ama reference olunan obje heap üzerindedir. Yani stack object diye birşey yoktur, sadece stack variable vardır. Local object tanımı yanlıştır!. Doğru tanım, local olarak declare edilmiş reference variable olucaktır.

* Local değişkenler access modifers alamazlar, transient, volatile vs. de alamazlar. Local değişkenler sadece final anahtarını alabilirler.

* Local değişkenler kullanılmadan önce initalize edilmelidir. Local değişkenler, intance değişkenler gibi default değerlere sahipt değildir.

Shadowing :  Local değişkenin, aynı isme sahip instance değişkeni gölgelemesidir.

Declaring Enums

Bir değişkenin sadece belli değerleri almasını sağlar. Runtime hatalarını engellemeye yardımcı olur. Compile checking zamanını azaltır. Enum yerine integer yada String kullanırsanız compile anında checking yapmak zorunda kalır ve performans kaybı yaşarsınız. Yine hataların da oluşma potansiyelini artırmış olursunuz.

* Enum, sınıf içerisinde yada dışında tanımlanabilir. Ancak method içerisinde tanımlanamaz!

* Class dışındaki enum tanınımda private ve protected kullanılamaz. Class dışında public ve default olabilir.

* Class içerisinde tanımlanırsa default olarak static olur ve access modifiers kullanılabilir.

Enun tanımı;

* Enum değişkenleri constantır. Enum değişkenleri int yada String değildir özel olarak enum tiptedir. Yukardaki kod aslında şudur;

* Enumu kullanalım;

* Enum özel bir class’dır. Constructor, method ve değişkenlere sahip olabilir.

* Class içerisinde ki tanıma bakalım;

* static  olan main methodu içerisinde direkt ulaşabildik. enum eğer instance variable ise default olarak static olur.

* Enumu itere edelim, enum array olarak enumları return eden static bir values() methoduna sahiptir.

* Biraz trick verelim

  • Enum constructoru direkt olarak çağıramayız. Enum constructoru otomatik olarak çağrılır.
  • Enum constructoru public ve protected olamaz.
  • Enum constructoru overloaded olabilir.
  • Enum abstract olamaz.
  • Her enumun süper classı Enum<E> dir.

Yazımı burada sonladırmak istiyorum arkadaşlar.

Mutlu kalın, kod’la kalın ve bol bol Çay için

~ Alican Akkus

1253 Total Views 1 Views Today

  • Nazan

    Elinize sağlık , yazılarınızın devamını bekliyorum,çok açıklayıcı olmuş.
    Teşekkürler.

    • AlicanAkkus

      Ben tesekkur ederim yazılar devam edicek insaAllah.