• Anasayfa
  • Hakkımızda
  • Etkinlikler
  • Destek Verin
  • Site Haritası
  • Giriş Yap
  • Üye Ol
  • Facebook
  • Twitter
  • RSS
Yazılım Dilleri
  • Soru - Cevap
  • EĞİTİM SETİ
  • KATEGORİ
  • DUYURU
  • TEKNOLOJİ HABERLERİ

Son Sorular

  • 8/2/2020 11:38:31 PM'Basit' Yazılım Dili
  • 6/25/2020 3:18:13 PMderleme hatası
  • 12/11/2017 4:49:15 PMWindows Hizmeti Hk.
  • 4/23/2016 12:55:33 AMC programlama 2 oyun

Popüler Sorular

  • 5/27/2012 5:49:50 AMAsp.Net ile Date time alana veri ekleyemiiyorum ?
  • 4/2/2012 12:45:18 AM.exe uzantılı dosya için dijital imza nerde nasıl alınır.
  • 5/12/2012 8:44:49 AMAcil Yardım
  • 5/27/2012 1:46:51 PMveri tabanı bağlantısı
  • .Net Framework
  • 8085 Assembly
  • Active Directory
  • ADO.NET
  • Android
  • Apple IOS
  • Arduino
  • ASP.NET
  • ASP.NET MVC
  • Blackberry
  • C#.Net
  • C++
  • CCG Framework
  • CISCO
  • CSS
  • Diğer
  • Dreamweaver
  • Entity Framework
  • Exchange Server
  • Gömülü Sistemler
  • GSM Programlama
  • Güncel
  • Güvenlik
  • HTML5
  • Java
  • Javascript / JQuery
  • Jira
  • Kariyer ve İş Yaşamı
  • LibreOffice
  • LINQ
  • Linux
  • Matlab
  • Microsoft Dynamics CRM
  • Mobil Uygulama Geliştirme
  • MySQL
  • NoSQL
  • Oracle
  • OWIN
  • PFSense
  • PHP
  • Powershell
  • Python
  • Sanallastirma
  • SAP-ABAP
  • SCOM 2012
  • SEO
  • Sharepoint 2010
  • Sharepoint 2013
  • Silverlight
  • Sistem Analiz ve Tasarımı
  • SQL Server
  • Symantec
  • TFS
  • T-SQL
  • Ubuntu
  • VB.NET
  • Veritabanı Yönetim Sistemleri
  • Visual Studio
  • VMware
  • WCF
  • Web Hosting
  • Windows 8
  • Windows Azure
  • Windows Phone 7.1
  • Windows Phone 8
  • Windows Server
  • Wordpress
  • WPF
  • Xamarin
  • XNA
  • Yazılım Mühendisliği
  • Yöneylem Araştırması
  • ASP.NET MVC
  • Entity Framework
  • Javascript / JQuery
  • LINQ
  • PHP

Son Duyurular

IPhone 6 ve IPhone 6 Plus Teknik Özellikleri ve Fiyatı

IPhone 6 ve IPhone 6 Plus Teknik Özellikleri ve Fiyatı

DELL'in Yeni Projesi: USB Bilgisayar (Project Ophelia)

DELL'in Yeni Projesi: USB Bilgisayar (Project Ophelia)

Windows Phone Youtube Uygulaması Google ve Microsoft ile Yeniden Yapılıyor

Windows Phone Youtube Uygulaması Google ve Microsoft ile Yeniden Yapılıyor

Android ve Apple IOS Telefonlar için Blackberry Messenger (BBM)

Android ve Apple IOS Telefonlar için Blackberry Messenger (BBM)

Nokia Lumia 925 Teknik Özellikleri, Lumia 928 ve 920 ile Karşılaştırması

Nokia Lumia 925 Teknik Özellikleri, Lumia 928 ve 920 ile Karşılaştırması

LG Optimus G Pro Özellikleri ve Gözle Video Oynatma Teknolojisi

LG Optimus G Pro Özellikleri ve Gözle Video Oynatma Teknolojisi

Java Değişken Tanımlama

Javada değişken tanımlama şekillerini inceleyelim.

26.09.2012

Yazar: Burak Selim Şenyurt (Google+)

Kategori: Java

5602
Java programlama dilinde değişkenlerin neler olduğunu bir tablo halinde hazırladım. Genelde programlama dilllerinde bu tip değişken tipleri hep tablolar halinde sunulur. Değişkenleri sıkça kullandıkça, bunların alt sınır, üst sınır ve alan büyüklükleri gibi bilgileri zamanla unutabiliriz. Şahsen ben hep unuturum. Ancak programlarımızı hazırlarken nerede en uygun değişken kullanılır bunuda bilmek isteriz. Ben oldum olası bu tip tabloları ezberleyemem. Zaten ezberleme taraftarı değilim. O nedenle bir sürü not defterim vardır ve taşıdığım çanta genelde ağır olur. Java dilinde kullanılan değişkenler içinde aynı şeyleri hissediyorum. Sanıyorumki bir tablo hazırlayacağım ve bunun güzel bir karton baskısını yanımda taşıyacağım.
Esasen Java dilinde, değişkenler, temel veri tipleri olarak anılırlar. Bu anlamda Java'da iki veri tipi olduğunu söyleyebiliriz. Değişkenlerin tanımanması için kullanılan Temel Veri Tipleri(Primitive) ve nesnelerin tanımlanması için kullanılan Referans Tipleri. C# dilinde'de bu böyledir zaten. Temel veri tipinden elde edilen değişkenler, bellekte yığın adı verilen bir bölgede tutulurlar. Oysa referans tiplerin tutuluş şekli daha farklı. Referans tipinden bir nesne, sahip olduğu üyülerin tutulduğu  bellek bölgesindeki alanların başlangıç adresine işaret ederki bu tip nesneler yığında tutulurken, sahip oldukları içerik öbekte tululur. Java programlama dilinde Temel Veri Türleri aşağıdaki tabloda olduğu gibidir.
 
Veri Tipi
Alan Büyüklüğü
Kategori
byte
8 bit
Tamsayı Tipleri
short
16 bit
int
32 bit
long
64 bit
float
32 bit
Kesirli Sayı Tipleri
double
64 bit
char
16 bit
Karakter Tipi
boolean
-
Mantıksal Tip (ture/false)
Görüldüğü gibi temel veri tipleri bunlar. Aslında bu tabloda birde alt aralık ve üst aralık bilgilerinin olması gerekiyordu. Ancak bunlar genelde kaynaklarda üstsel bilgi olarak gösterilmiş. Gerçekte, bu veri tiplerinin en üst ve en alt sınır bilgilerini küçük bir program kodu yazarakta öğrenebilirim. İşte küçük programım.
public class Sinirlar
{
    public static void main(String[] args)
    {
        System.out.println("Integer veri tipi");
        System.out.println("Integer alt sınır :"+Integer.MAX_VALUE);
        System.out.println("Integer ust sınır :"+Integer.MIN_VALUE);
        System.out.println("---");

        System.out.println("Double veri tipi");
        System.out.println("Double alt sınır :"+Double.MAX_VALUE);
        System.out.println("Double ust sınır :"+Double.MIN_VALUE);
        System.out.println("---");

        System.out.println("Float veri tipi");
        System.out.println("Float alt sınır :"+Float.MAX_VALUE);
        System.out.println("Float ust sınır :"+Float.MIN_VALUE);
        System.out.println("---");

        System.out.println("Long veri tipi");
        System.out.println("Long alt sınır :"+Long.MAX_VALUE);
        System.out.println("Long ust sınır :"+Long.MIN_VALUE);
        System.out.println("---");

        System.out.println("Short veri tipi");
        System.out.println("Short alt sınır :"+Short.MAX_VALUE);
        System.out.println("Short ust sınır :"+Short.MIN_VALUE);
        System.out.println("---");

        System.out.println("Byte veri tipi");
        System.out.println("Byte alt sınır :"+Byte.MAX_VALUE);
        System.out.println("Byte ust sınır :"+Byte.MIN_VALUE);
        System.out.println("---");
    }
}
Şimdi yazdığım uygulamayı Java Derleyicisi ile derliyorum. Hayret, her hangibir hata vermeden derledi. Daha sonrada programı çalıştırıyorum. Sonuç gayet güzel oldu. Tam istediğim gibi, temel veri türlerine ait alt  ve üst sınır değerlerini elde etmeyi başardım. Bunu yaparken, bu veri tipleri için Java içinde geliştirilmiş hazır sınıfları kullandım. Örneğin int veri tipi için Integer sınıfını kullandım. Aslında tüm temel veri tipleri için sınıflar mevcut. Tek yaptığım bu sınıfların MAX_VALUE ve MIN_VALUE özelliklerinin değerlerini ekrana yazdırmak oldu. Bu kadar basit.
Açıklama: Açıklama: http://www.bsenyurt.com/makale/images/j24_2_1.jpg
Burada aslında önemli bir noktada her veri tipi için bir sınıfın var olması. Dolayısıyla bir değişken tanımlamasını iki şekilde yapma imkanına sahibim. Örneğin aşağıdaki kod parçasında, int (integer-tamsayı) veri tipinden iki değişkenin farklı şekillerde tanımlandığını görüyoruz.
public class DegTan
{
    public static void main(String[] args)
    {
        int deger1=45;
        Integer deger2=new Integer(50);

        System.out.println("deger1 "+deger1);
        System.out.println("deger2 "+deger2);
    }
}
Bu uygulamayı çalıştırdığımda aşağıdaki sonucu elde ettim.
Açıklama: Açıklama: http://www.bsenyurt.com/makale/images/j24_2_2.gif
Sonuçta iki tane integer tipinde değişken tanımlamıştım, ancak bu tanımlamalar arasında büyük farklar olduğuna inanıyorum. Şimdi bunu araştırmam gerektiğini düşünüyorum. İlk başta gözüme çarpan, Integer sınıfını kullanarak, integer tipte veriyi barındıran Deger2 isimli bir nesne tanımlamamız. Bu durumda deger2 değerinin bellekte tutuluş şekli, deger1'den farklı olmaktadır. Diğer yandan tüm temel veri tiplerinin birer sınıfı mevcuttur ve bu sınıflar java.lang adı verilen bir pakette bulunmaktadırlar. Kaynaklardan edindiğim bilgiye göre, burada adı geçen paket kavramının, C#'taki namespace (ad alanı) kavramı ile aynı olduğu sonucuna vardım. Bu bilgiye ulaşmak benim için internette biraz zaman harcamak ile gerçekleşti. Java için herzaman elimizin altında bulunması gereken yardım dokumantasyonu olan Java 2 Platform Std.Ed. Documentation v1.3.1' i
http://java.sun.com/j2se/1.3/docs.html
adresinden indirdim. Bu döküman yaklaşık olarak 22 megabyte'lık bir zip dosyası. Açıldığında, html dokumatasyonuna ulaşabiliyorsunuz. Burada aradığım hemen her konuya ait bilgi mevcut. Ancak bazı konuların yanında web pages yazılı. Bunlar internetten online olarak bakılabilecek yada indirilebilecek adreslere işaret ediyor. İşte, java.lang paketinin içeriğinede bu dokmantasyondan ulaştım. Temel veri tiplerine ait sınıfları kullanarak pek çok fonksiyonu kullanma şansına sahip olduğumu gördüm. Örneğin, ilk örneğimizde kullandığımız MAX_VALUE ve MIN_VALUE özellikleri gibi. Yada integer değeri String'e dönüştürmek için kullanılan toString metodu ve daha pek çok sayısız metod yer alıyor.
Bir diğer konuda, Java'daki temel veri türünden değişkenler ile, referans türünden nesneler arasındaki temel farklılıklar. Burada önemli olan konu, bu iki veri türününde bellekte farklı şekillerde tutuluyor olması. Temel veri türünden olan değişkenler bellekte kendi isimleri ile stack(yığın) adı verilen bölgede tutuluyorlar. Referans tipinden olan nesneler ise, belleğin heap(öbek) adı verilen bölgesinde tutuluyor. Tanımlanan referans tipindeki nesne, öbekte yer alan verilerine işaret eden ve yığında tutulan bir değişken adına sahip oluyor. Bu kavramlar aslında karmaşık gibi görünsede, nesneler arasındaki atamalarda önemli sonuçlar doğuruyor. Bunu açıklamak için örnekler geliştirmek sanıyorumki en doğrusu olucaktır. Bu örnekte yapmak istediğim, bir sınıf hazırlamak ve bu sınıf içinde değişkenler tanımlamak. Sonra  bu sınıfa ait bir nesne örneği yaratacak ve onu aynı sınıftan türetilen başka bir sınıfa atayacağım. Bu işlemlerin gerçekleşmesi halinde bellekteki oluşucak hareketleri ise şekille göstermeye çalışacağım. Öncelikle örneğimi geliştireyim. İlk önce nesnelerim için kullanacağım sınıfımı oluşturuyorum.
public class Sinifim
{
    public int Deger1;
    public int Deger2;

    public Sinifim()
    {
        Deger1=0;
        Deger2=0;
    }

    public Sinifim(int d1,int d2)
    { 
        Deger1=d1;
        Deger2=d2;
    }

    public void Yaz()
    {
        System.out.println("Deger1 :"+Deger1);
        System.out.println("Deger2 :"+Deger2); 
    }
}
 
Doğruyu söylemek gerekirse bu kodlar bize çok şey söylüyor. Buradaki kodları tamamen C#'taki bilgimi kullanarak yazdım. Örneğin sınıfı tanımlaması içinde, iki adet yapıcı (constructor) metod var. İlki Deger1 ve Deger2 isimli değişkenlerimize 0 değerlerini atıyan parametre almayan ve sınıflar için varsayılan olarak kabul edilen yapıcı metodumuz. Diğeri yapıcı metodumuz ise, bu değişkenlere aldığı parametre değerlerini atıyor. Birde Yaz isimli bir metodumuz var. Bu metod ise, sınıfımızın Deger1 ve Deger2 isimli integer değişkenlerini komut satırına yazdırıyor. Yapıcı metodların kullanımı, sınıflar içindeki yeri gibi kavramlara şimdilik göz ucu ile bakmış oldum. Bu kavramları ve daha fazlasını diğer kahve molalarımda incelemek istiyorum. Hazır kahve demişken, kahvemi tazelesem iyi olucak sanırım. Gelelim diğer sınıfımıza. Bu sınıfımız ise Sinifim sınıfı türünden nesneler üzerinde işlem yapmak için kullanılıyor.
 
public class Program
{
    public static void main(String args[])
    {
        Sinifim sf1=new Sinifim(10,20);
        System.out.println("Sf1 nesnesi için");
        sf1.Yaz();

        Sinifim sf2=new Sinifim();
        System.out.println("Sf2 nesnesi için");
        sf2.Yaz();

        System.out.println("sf1 nesnesi, Sf2 nesnesine aktarılıyor");
        sf2=sf1;
        sf2.Yaz();

    }
}
Bu kodlarla göstermek istediğim, referans tipleri arasındaki atamalar sonucu oluşan ilişkidir. Program içinde, önce sf1 isimli bir nesne örneği oluşturuluyor ve bu nesne içindeki Deger1 ve Deger2 integer değişkenlerine 10 ile 20 değerleri atanıyor. Bu durumda belleğin durumunun tasviri aşağıdakine benzer olucaktır.
Açıklama: Açıklama: http://www.bsenyurt.com/makale/images/j24_2_3.gif
Daha sonraki adımda ise, sf2 isimli başka bir Sinifim nesne örneğini oluşturuyoruz. Bu kez nesneyi, Sinifim sınıfının varsayılan yapıcı metodu ile oluşturuyor ve değişkenlerimize 0 değerini atıyoruz. Bu halde, belleğin durumu şu şekilde olucaktır. Bellekte Sinifim, sınıfı türünden iki adet nesne örneği mevcuttur.
Açıklama: Açıklama: http://www.bsenyurt.com/makale/images/j24_2_4.gif
Buraya kadar herşey normal. Ancak son adımda, sf1 , nesnesini sf2 nesnesine atıyoruz. İşte bu durumda olay biraz daha değişik bir hal oluyor. Nitekim, sf1 nesnemiz artık sf2 nesnemize işaret ediyor.
Açıklama: Açıklama: http://www.bsenyurt.com/makale/images/j24_2_5.gif
Şimdi örneğimizi biraz değiştirelim ve Sinifim sınıfına aşağıdaki DegerAta isimli metodu ve kod satırlarını ekleyelim.
public void DegerAta(int d1,int d2)
{
    Deger1=d1;
    Deger2=d2;
}
Şimdide Program sınıfına aşağıdaki kod satırlarını ekleyelim.
sf1.DegerAta(1,2);
sf1.Yaz();
sf2.Yaz();
Bu haldeyken, Program dosyasını çalıştırdığımda, her iki nesne örneğininde aynı değerleri yazdırdığını görürüz. Bu şu anlama geliyor. Atama işleminden sonra, öbekteki aynı bölgeyi işaret eden bu iki nesneden birisinin içindeki değerlerin değiştirilmesi, diğer nesneninde aynı değişiklikleri işaret etmesi anlamına gelmektedir. Sonuç aşağıdaki gibi olucaktır.
Açıklama: Açıklama: http://www.bsenyurt.com/makale/images/j24_2_11.gif
Değişkenler arası atamalara gelince. Burada durum referans tiplere göre daha farklı. Çünkü değişkenler oluşturuldukları isim ile bellekte tutulur. Bu konuyuda bir örnek üzerinde incelemek taraftarıyım. Kısa ve basit bir örnek bize yeterli olucaktır sanırım.
public class Program2
{
    public static void main(String args[])
    {
        int Deger1=50;
        int Deger2;

        System.out.println("Deger1 :"+Deger1);
        System.out.println("Deger2 :"+Deger2);

        Deger2=Deger1;
        System.out.println("Deger1 :"+Deger1);
        System.out.println("Deger2 :"+Deger2);

        Deger1=48;
        System.out.println("Deger1 :"+Deger1);
        System.out.println("Deger2 :"+Deger2);

    }
}
Kodu derlediğimde hiçte beklemediğim bir hata ile karşılaştım.
Açıklama: Açıklama: http://www.bsenyurt.com/makale/images/j24_2_6.gif
Sanıyorumki hatanın sebebi Deger2 isimli integer veri tipindeki değişkene ilk değer atamasını yapmamış olmamdı. Bu durumda kodun bu satırını aşağıdaki gibi değiştirdim ve programın başarılı bir şekilde derlendiğini gördüm.
int Deger2=0;
Şimdi uygulamamı çalıştırdığımda aşağıdaki sonuçlar ile karşılaştım.
Açıklama: Açıklama: http://www.bsenyurt.com/makale/images/j24_2_7.gif
Şimdi kodu güzelce bir incelemem gerektiğini düşünüyorum. Kahvemden bir yudum aldım ve Javaca düşünmeye başladım. İlk olarak Deger1 ve Deger2 değişkenlerimizi tanımlıyor ve bunlara ilk değer olarak sırasıyla 50 ve 0 değerlerini atıyoruz. Bu noktada belleğin durumu aşağıdaki tasvirde olduğu gibi olucaktır. İki ayrı integer tipte değişken belleğin yığın bölgesinde yerlerini almıştır.
Açıklama: Açıklama: http://www.bsenyurt.com/makale/images/j24_2_8.gif
Daha sonraki adımda ise, Deger1 değişkeninin değeri Deger2'ye atanıyor. Bu durumda Deger1'in sahip olduğu 50 değeri, Deger2 değişkenine atanmış ve belleğin görünümü aşağıdaki şekilde olmuş oluyor.
Açıklama: Açıklama: http://www.bsenyurt.com/makale/images/j24_2_9.gif
Son adımda ise, Deger1' değişkenine 48 değerini atıyoruz ve bellekteki Deger1 değişkeninin değerinin değişmesine neden oluyoruz. Referans tiplerinde olduğu gibi, değişken tanımlamalarında, atamadan sonraki değişiklikler, değişkenlerin birbirlerini etkilemesine neden olmamaktadır.
Açıklama: Açıklama: http://www.bsenyurt.com/makale/images/j24_2_10.gif
 
Burak Selim ŞENYURT
selim@bsenyurt.com 

 

Yazar Hakkında

Burak Selim Şenyurt

Burak Selim Şenyurt

buraksenyurt.com

Yıldız Teknik Üniversitesi Matematik Mühendisliği mezunu olan Şenyurt, 1999 yılında profesyonel olarak adım attığı yazılım dünyasında, 2003 yılından beri Microsoft .Net teknolojileri ile ilgilenmektedir. Yazılım hayatına Assist Line isimli Call Center firmasında Delphi programcısı olarak başlayan Şenyurt sonrasında, sırasıyla Bizitek(Junior Developer), Netron(Master Trainer), Citibank(Outsource Senior Software Developer), Innova(Application Development Consultant), ve TCM(Software Architect) firmalarında görev almıştır. Su anda ING Bank bünyesinde Kıdemli Yazılım Danışmanı olarak görev yapmaktadir. 2006, 2007 yıllarında C#, 2008,2009,2010 yıllarında ise Connected System Developer kategorisinde Microsoft MVP seçilen Şenyurt, evli ve 1 çocuk babasıdır. C# diline olan düşkünlüğü, oğluna S(h)arp adının verilmesinde önemli bir etken olmustur.

Sosyal Medya

ORANLAR

  • 5602izleme

Arkadaşlarınla Paylaş

  • Tweet

0 Yorum

Yorum Yaz / Soru Sor

Lütfen yorum yazmak veya soru sormak için üye girişi yapınız.

Son Yorumlar

  • Böyle bir sayfalama ağ trafiğini hafifleti...
  • Böyle bir sayfalama ağ trafiğini hafifleti...
  • Merhaba, ellerinize sağlık çok yardımcı ol...
  • Merhaba Bu uygulama örneğinden ASP.net ...
  • Hocam Link başka sayfaya yönlendiriyor.

En Güncel Sorular

  • Bilgilendirme maili (C#.Net)
  • Power Pivot (Sharepoint 2010)
  • BigInteger, BigDecimal (Asp.Net ve Asp.Net MVC)
  • visual C# ile asp nette veritabanı islemleri (Asp.Net ve Asp.Net MVC)
  • Share Point ile Dosya Arşiv Yönetim Sistemi yapılabilir mi ? (Sharepoint 2010)

En Son Cevap Verilen Sorular

  • Bilgilendirme maili
  • BigInteger, BigDecimal
  • visual C# ile asp nette veritabanı islemleri
  • Share Point ile Dosya Arşiv Yönetim Sistemi yapılabilir mi ?
  • txt dosyasına veri yazma

Twitter

Takip et: @yazilim_dilleri

En Çok Okunanlar

Elif BAYRAKDAR

C# ile SQL Server Bağlantısı, Insert, Update ve Delete Sorguları

23.05.2013

  • 123831
  • 0
Hakan Keskin

C# ile Windows Service Projesi Oluşturma, Debug Etme ve Setup Hazırlama

17.12.2013

  • 70908
  • 0
batuhan avlayan

Php - Mail Gönderme (İletişim Formu)

02.09.2013

  • 51545
  • 0

Sponsorlar

KODLAB
Pluralsight
Exchange server is
Office 365
YAZILIM DİLLERİ
Yukarı Çık
  • Hakkımızda
  • Facebook
  • Twitter
  • RSS

© Yazılım Dillerinin Buluşma Noktası | Kaynak belirtildiği sürece makaleler kopyalanabilir.
YazilimDilleri.Net sitesinde yer alan kullanıcıların oluşturduğu tüm içeriklerin yayınlanması ile ilgili yasal yükümlülükler içeriği oluşturan kullanıcıya aittir, YazilimDilleri.Net hiçbir şekilde sorumlu değildir.

Kapat

Giriş Yap

Kullanıcı Adı

Şifre

Şifremi Unuttum

KULLANICI GİRİŞİ