Merhaba arkadaşlar bu benim Java da ilk yazım java kısmında ki yazılarımı yeni başlayan arkadaşları da düşünerek javanın en temel konularından başlayarak elimden geldigince sıralı olarak yazmaya çalışacagım.Bu yazımda ise java da ki veri tiplerinden ,degişkenlerden ve veri tiplerinin birbirine dönüşümünden bahsedecegim.

Veri tipleri verilerin(tamsayılar,ondalıklı sayılar,harfler vb.) bilgisayar üzerinde ki modellemesidir diyebiliriz.Veri tipleri tüm programlama dillerinde vardır fakat her programlama dili veri tiplerini farklı şekilde yorumlayabilir.Veri tipinin özelligi ise bellekte tuttukların alanın sabit olmasıdır diyebiliriz.

Veri tiplerini degişken tanımlarken kullanırız ve java’da tip-güvenli(type-safe) bir dil oldugu için degişken oluştururken mutlaka veri tipini belirtmek zorundayız.Java’da veri tipleri 3’e ayrılır.Bunlar ;

  • İlkel(Primitif) teri tipleri
  • Referans tipler
  • Null Veri tipi

Veri tipi kavramını biraz daha açacak olursak.Eski programlama dillerinde veri tipleri ait oldukları programlama diline gömülü(built-in-types) ögelerdi,her bir veri tipi bir anahtar sözcük ile belirtilirdi.

Ama Java gibi neseneye yönelimli programlama dillerinde veri tiplerinin hepsi bir sınıftır ancak çok sık kullanıldıkları için Java bazı veri tiplerine ayrıcalık tanır bu türden veri tiplerine temel(primitif) veri tipleri denir.Java dili bu veri tiplerine onlara ait nesneler yaratılmaksızın kullanılmasına olanak saglar.

İLKEL(Primitif) VERİ TİPLERİ

Java dilinde ki ilkel veri tipleri aşagıda ki gibidir diyebiliriz ;

    • Tamsayılar
    • Ondalıklı Sayılar
    • Karakterler
    • Mantıksal tipler
İlkel Veri Tipi Uzunluk Minumum Deger Maksimum Deger Gömüldügü Sınıf Varsayılan Deger
char 16 bit unicode 0 unicode 216-1 Character ‘\u0000’
long 64 bit -263 263-1 Long 0l
int 32 bit -231 231-1 Integer 0
short 16 bit -215 215-1 Short 0
byte 8 bit -27 27-1 Byte 0
double 64 bit -3.4*1038 3.4*1038 Double 0.0d
float 32 bit – 1.7*1038 1.7*1038 Float 0.0f
boolean 1 bit Boolean false

TAMSAYILAR

Burada ki ilkel veri tiplerini tamsayılar için kullanırız ve bellekte tuttukları alana göre 4 çeşit tamsayılar için kullanabilecegimiz ilkel veri tipi vardır.Bunlar ;

      1. byte
      2. short
      3. int

1.)byte :Bu ilkel veritipi tamsayılar için en küçük tamsayı tipidir.byte veri tipi bellekte 8 bit yer kaplarlar.8 bitlik alanda da 256(28) farklı deger tutabiliriz.

NOT : Java dilinde tüm sayı tipleri işaret bilgisini de içerdiginden bu bitlerden bir tanesi işaret bilgisini tutmak için ayrılır.

Bu yüzden byte tipini kullanan degişkenler -128(-27) ile 127(27-1) arasında deger alabilir.

2.)short :Bu ilkel veritipi kısa tamsayıları tutar.Bellekte 16 bitlik yer tutar.-215 ile 215-1 arasında deger alabilir.

3.)int :Bu ilkel veritipi orta uzunlukta tamsayıları tutar.Bellekte 32 bitlik yer tutar.-231 ile 231-1 arasında deger alabilir.

4.)long :Bu ilkel veritipi çok uzun tamsayıları içindir.Bellekte 64 bitlik yer tutar.-263 ile 263-1 arasında deger alabilir.

NOT : long ilkel veri tipinde bir degişken tanımlayıp buna da deger atarken degere litarelini(l) atamamız gerekir.Örnegin. ;

long uzunDeger = 64l ;

ONDALIKLI SAYILAR

Burada ki veri tiplerini ondalıklı sayılar için kullanırız ve bellekte tuttukları alana göre 2 çeşit ondalıklı sayılar için kullanabilecegimiz ilkel veri tipi vardır.Bunlar ;

      1. float
      2. double

NOT : Java ondalıklı sayıları bilgisayar ortamında depolayabilmek için java dili standartlarından IEEE 754 olanını benimser.

1.)float :Bu ilkel veritipi bellekte 32 bitlik yer tutar.-3.4*1038 ile 3.4*1038 arasında deger alabilir ve bu degişken ondalıklı sayıların ondalık kısmıiçin 7 haneye kadar duyarlılıkta olabilir.

NOT :float veri tipinde bir degişken tanımlayıp buna da deger atarken degere litarelini(f) atamamız gerekir.Örnegin. ;

floatondalikliDeger = 64.123f ;

2.)double :Bu ilkel veritipi bellekte 64 bitlik yer tutar.-1.7*10308 ile 1.7*10308 arasında deger alabilir ve bu degişken ondalıklı sayıların ondalık kısmı için 17 haneye kadar duyarlılıkta olabilir.

NOT :double veri tipinde bir degişken tanımlayıp buna da deger atarken degere litarelini(d) atamamız gerekir.Örnegin. ;

doubleondalikliDeger1 = 64.123d ;

KARAKTERLER

1.)char :Karakterler için kullanılır.Bellekte 16 bitlik yer kaplarlar.char ilkel veri tipi unicode karakter setinde karakterlere karşılık gelen işaretsiz tamsayı degerine sahip oldugundan dolayı bu veri tipine sahip degişkenlerle çeşitli aritmetik işlemler ve büyüktür küçüktür gibi karşılaştırmalar yapılabilir.

NOT : char veri tipine sahip degişkene maxsimum bir karakter verebiliriz. Örnegin. ;

charseciliHarfimiz = ‘ab’ ;         //Hata verir
charseciliHarfimiz = ‘a’ ;                //Hatasız çalışır

NOT :char ilkel veri tipinde bir degişken tanımlayıp buna da deger atarken degeritek tırnak(‘) içinde atamamız gerekir.Örnegin. ;

charseciliHarfimiz = ‘a’ ;

NOT :Çok yapılan bir yanlışdan bahsetmek istiyorum String ilkel(primitif) veri tipi degildir, String karakter kümelerini(katarlarını) tutmak için tasarlanmış bir sınıfdır ve yazının ilerliyen kısımlarında bu sınıfdan bahsedecegim.

MANTIKSAL TİPLER

1.)boolean :Mantıksal işlemlerin sonuçlarını tutmak için kullanılan ve sadece true veya false diye iki deger alabilen veri tipidir.Bellekte 1 bit yer kaplarlar.

REFERANS TİPLERİ

En başta dedigim gibi nesneye yönelimli programlama dilinin temeli sınıf(class) mantıgına dayanır ve javada veri tipi olarak sınıflarımız vardır.Bu veri tiplerinden bahsedecek olursak bizim ilkel(primitive) veri tiplerimizin birer tane gömüldügü sınıf vardır.Bunlar Byte,Short,Integer,Double,Character,Float,Double,Boolean sınıflarıdır peki diyebiliriz ki ilkel veri tipleri varsa neden sınıf olan veri tiplerine ihtiyacımız var ya da sınıf veri tiplerimiz varsa neden ilkel veri tiplerine ihtiyacımız var bunların farkı nelerdir,İlkel veri tipleri ile sınıf veri tiplerinin farkını int ilkel tipi ile Integer veri tipi arasında ki farkı göstererek anlatmaya çalışım;

      • İnt bir primitif veri tipdir Integer ise bir nesnedir
      • Integer bir degişken oldugu için null degeri verilebilir ama int’e verilmez.
      • Integer tipinde bir degişken java.lang.Integer sınıfında ki metotları kullanabilir,int ise kullanamaz.
      • Integer tipinde ki degişkenleri bir vektör ya da koleksiyon içerisinde tutabiliriz ama int ile bunu yapamayız.
      • Primitif veri tipleri(byte,short,int,double,float,double,char,boolean) bir nesne olmadıgı için serialize(serileştirme) işlemine tutamayız.
      • Integer gibi sınıflar immutable (değişmez) özelliğe sahiptirler, sıradan nesneler gibi davranmazlar.

Aynı benzer durumlar byte-Byte,short-Short,int-Integer,float-Float,double-Double,char-Character,boolean-Boolean için de geçerlidir.

NOT : Java derleyicisi gerektiginde tanımlanan her ilkel veriyi ait oldugu sınıfa otomatik olarak gömer buna kutulama(boxing) denilir ya da derleyici gerektiginde bir sınıf nesnesini ilkel veri tipine döndürür buna da kutu açma(unboxing) denilir.Her iki işlemi de Java derleyicisi kendiliginden otomatikman yapar.

Yukarı da saydıklarımızdan farklı olarak karakter kümeleri(katarları) için kullanılan veri tiplerinden de bahsedecek olursak biraz.

KARAKTER KÜMELERİ(Katarları)

String Sınıfı

Karakter kümelerini yani birden fazla karakterin bir araya gelerek oluşturdugu degişkenler için kullanılan veritipidir.String veri tipi primitif veri tipi olmadıgını söylemiştik String karakter kümelerini tutmak için tasarlanmış özelleşmiş bir sınıftır.

NOT : String veri tipinde bir degişken tanımlayıp buna da deger atarken degeri çift tırnak(“) içinde atamamız gerekir.Örnegin. ;

StringseciliKelimemiz = "mustafa" ;

StringBuffer Sınıfı

Java’da String sınıfının degerleri degişmez(immutable)olarak tanımlanmıştır.Yani String tipinden bir degişkene bir deger atadagımızda bu degişkenin degeri artık degişmez.Bu degişkenlerin degerlerinin degişmesi için ise derleyici(JDK) StringBuffer sınıfını kullanır.StringBuffer sınıfı JDK içerisinde bulunan bir sınıftır ve bize dinamik karakter kümeleri oluşturmamıza izin verir.Bir örnek verecek olursak ;

String ifade = " Merhaba"+ " Java" ;

Bu ifade arka planda da aşagıda ki kod gibi çalışır ;

String ifade = new StringBuffer().append("Merhaba").append(" Java").toString();

DEGİŞKENLER

Programlarımızı yazarken çeşitli degerleri,gerekli olan degerlerin degiştirilmesi ve güncellenmesi için bellekte depoladıgımız Java elemanlarına degişken denilir.Örnegin bir hesap makinesi programı düşünelim iki sayının toplamını bulmak için toplamamız istenilen 2 sayıda bellekte yer almalıdır bu yüzden her biri için degişken oluştururuz ve degişkenlere deger atarak toplama işlemini yaparız.

Java type-safe(tip-güvenli) bir dildir bu yüzden Java da her degişkenin bir tipi olması zorunludur.Bu tipler temel veri tipleri olacagı gibi bizim oluşturdugumuz bir sınıfda olabilir.Bir degişken oluşturmak için gerekli söz dizimi aşagıdaki gibidir.

Özel Anahtar Kelimeler — Degişken Tipi –Degişken Adı = Degikenin Degeri

1.Özel Anahtar Kelimeler : public,private,protected gibi erişim belirliyiciler veya static,final gibi çeşitli anahtar kelimeler kısmıdır.Bu kısım opsiyoneldir yazsak da yazmasak da olur ama eger deger girmessek varsayılan olarak public yazılmış gibi kabul görür.

2. Degişken Tipi : Java’da her degişkenin bir tipi olması gerektigini söylemiştik bu yüzden java da degişken oluştururken tipini belirtmek zorundayız. Bu tipler temel veri tipleri olacagı gibi bizim oluşturdugumuz bir sınıfda olabilir.

3. Degişken Adı : Degişkenlere verecegimiz isimdir istedigimiz ismi verebiliriz ama bazı kurallar vardır ;

  • Degişken isminde boşluk kullanılmaz
  • Degişken adları Javada tanımlı anahtar kelimelerden herhangi biri olamaz(private,string,java vb.)
  • Degişken isimleri rakam ile başlayamaz ama ilk karakterden sonra rakamları kullanabiliriz.
  • Degişken isimlerinin başındada içindede _(alttan çizgi) ve $(dolar işareti) kullanabiliriz)

4. Degişken Degeri :Degişkenin alacagı deger.

TİP DÖNÜŞÜMLERİ(TYPE-CASTİNG)

Tip dönüşümü bir veri tipinde ki degişkeni başka bir veri tipine dönüştürmedir.Örnegin elimizde double tipinde bir degişken var ve ondalıklı kısmı bizim için önemli degil o zaman bu sayıyı long veritipine verebiliriz.

NOT : Genelde küçük veri tipleri büyük veri tiplerine çevrilirken sorun yok ama büyük veri tipinden küçük veri tipine çevrilirken bilgi kaybı olabilir.

Şimdi sırasıyla örnekler üzerinden tip dönüşümlerine bakalım ;

1.)int’i String’e dönüştürmek

int sayi= 10 ;
String sayi1 = String.valueOf(sayi) ;         //Yol 1
String sayi2 = Integer.toString(sayi) ;       //Yol 2
String sayi3 = sayi+" " ;                     //Yol 3

2.)int’i String’e dönüştürmek

String ifade = "10" ;
int sayi1 = Integer.valueOf(sayi) ;            //Yol 1
int sayi2 = Integer.parseInt(sayi) ;           //Yol 2

NOT : Integer.valueOf() ile Integer.parseInt() metotları arasında temel fark valueOf() metodu Integer tipinde bir nesne,parseInt() metodu ise int tipinde bir veri tipi dönderir.Ve parseInt() metodu temel veri tipi döndürdügü için daha hızlı çalışır.(Aynı durum Byte.valueOf()-Byte.parseByte(),Short.valueOf()-Short.parseShort(),Long.valueOf()-Long.parseLong(),Float.valueOf()-Float.parseFloat(),Double.valueOf()-Doble.parseDouble() için de geçerlidir)

2.)String’i byte,short,long,double ve float’a dönüştürmek

String byteSayı = "5";
byte sayi1 = Byte.valueOf(byteSayı);               //Yol 1
byte sayi2 = Byte.parseByte(byteSayı);             //Yol 2
String shortSayı = "155";
short sayi3 = Short.valueOf(byteSayı);             //Yol 1
short sayi4 = Short.parseShort(byteSayı);          //Yol 2
String longSayı = "155555";
long sayi5 = Long.valueOf(longSayı);               //Yol 1
long sayi6 = Long.parseLong(longSayı);             //Yol 2
String floatSayi = "125.125f";
float sayi7 = Float.valueOf(floatSayi);            //Yol 1
float sayi8 = Float.parseFloat(floatSayi);         //Yol 2
String doubleSayi = "12512.1125d";
double sayi9 = Double.valueOf(doubleSayi);         //Yol 1
double sayi10 = Double.parseDouble(doubleSayi);    //Yol 2

3.) byte,short,long,double ve float’ı String’e dönüştürmek

Short shortSayı = 155;
String sayi4 = String.valueOf(shortSayı);           //Yol 1
String sayi5 = Short.toString(shortSayı);           //Yol 2
String sayi6 = shortSayı + " ";                     //Yol 3
long longSayı = 155555;
String sayi7 = String.valueOf(longSayı);            //Yol 1
String sayi8 = Long.toString(longSayı);             //Yol 2
String sayi9 = longSayı + " ";                      //Yol 3
float floatSayi = 125.125f;
String sayi10 = String.valueOf(floatSayi);          //Yol 1
String sayi11 = Float.toString(floatSayi);          //Yol 2
String sayi12 = floatSayi + " ";                    //Yol 3
double doubleSayi = 12512.1125d;
String sayi13 = String.valueOf(doubleSayi);         //Yol 1
String sayi14 = Double.toString(doubleSayi);        //Yol 2
String sayi15 = doubleSayi + " ";                   //Yol 3
byte byteSayı = 5;
String sayi1 = String.valueOf(byteSayı);            //Yol 1
String sayi2 = Byte.toString(byteSayı);             //Yol 2
String sayi3 = byteSayı + " ";                      //Yol 3

4.) double’ı int’e çevirmek

double doubleSayi = 123.123d;
int intSayi = (int) doubleSayi;

5.) int’i double’e çevirmek

int intSayi = 123;
double doubleSayi = (double) intSayi;

6.) long’u float’a çevirmek

long longSayi = 1234567;
float floatSayi = (float) longSayi;

7.) float’ı long’a çevirmek

float floatSayi = 123.123f;
long longSayi = (long) floatSayi;

Diger tip dönüşümleri de yukarıda ki örnekler benziyor zaten.

Yazar : Mustafa Bektaş Tepe

Java && Oracle

26,026 total views, 12 views today