ClassIsmi Obje = new ClassIsmi(); şekilnde oturuyoruz.
Örneğin
araba bmw = new araba();
şeklinde.
Gelelim Sorulara
1-) sadece araba bmw şeklinde yazarsak. Sanırım sadece objeyi oluşturuyoruz ve bellekte herhangi bir yer kaplamıyor. 2-) new JLabel("Buton"); şeklinde yazarsak. Bellekte bir yer kaplıyor fakat herhangi bir objeye ait olmadığı için sanırım fonksiyonlarına ulaşılamıyor ?
DH forumlarında vakit geçirmekten keyif alıyor gibisin ancak giriş yapmadığını görüyoruz.
Üye olduğunda özel mesaj gönderebilir, beğendiğin konuları favorilerine ekleyip takibe alabilir ve daha önce gezdiğin konulara hızlıca erişebilirsin.
"stack memory" ve "heap memory" kavramlarını bilmen gerek.
stack memory'de int, boolean... gibi basit veriler ve nesne referansları tutulur.
heap memory'de ise nesneler tutulur. -------
Araba bmw = new Araba( );
burada denklemde sağ tarafta kurucu metot çağrılır yani nesne oluşur. sol tarafta ise Araba türünden nesne referansı alacak bir değişken oluşur. yani "bmw" kendisi nesne değildir; nesne referans adresini taşıyan bir değişkendir.
bu konuyu daha derin öğrenmek istersen java başlığının en altlarında bana ait bir konu vardı orda farklı türde veriler için bellek yapılarını anlatmıştım.
1-) sadece "Araba bmw;" yazarsan adres bilgisi taşıyacak kadar yer kaplar fakat içindeki değer null olur.
2-) sadece new Araba( ) yazarsan nesne oluşur. bunun kaplayacağı alan basit veri tiplerinde olduğu gibi kalıplaşmış değildir; esnektir. fakat bu nesnenin adresini gösteren bir değişken olmadığı için nesne garbageCollector tarafından silinir. Böyle olması nesneye ulaşılamaz demek değildir. nesneyi oluşturduğun anda onunla işlem yapılabilir fakat daha sonra onunla işlem yapmak için onu işaret eden bir değişkene ihtiyaç vardır.
< Bu mesaj bu kişi tarafından değiştirildi Guest -- 10 Şubat 2013; 13:03:02 >
Javada stack, heap gibi şeyleri bilmek gerekmez. new Araba() sadece bir sözdizimi. Nesnenin nerede oluşturulacağına derleyici karar verir. Özellikle metod içi yerel nesneleri genelde stack ta tutar.
Javada stack, heap gibi şeyleri bilmek gerekmez. new Araba() sadece bir sözdizimi. Nesnenin nerede oluşturulacağına derleyici karar verir. Özellikle metod içi yerel nesneleri genelde stack ta tutar.
Ek bilgi olarak "Araba bmw;" c++ ta mümkündür.
new Araba( ); yazarak zaten nesnenin nerede oluşacağına karar vermiyoruz. derleyici onu bellekte belli bir adrese koyuyor fakat oluşan bu nesnenin adresini "Araba bmw" şeklinde tanımadığınız Araba türünde bmw değişkeninde tutarız. aksi taktirde ilk kullanımdan sonra nesneye ulaşamayız.
System.out.printline( bmw ); yazarsanız ekranda nesnenin adresini görebilirsiniz.
Araba bmw; java'da da mümkün yukarda yazmışım ama içerisinde adres bilgisi olmaz.
stack, heap, static memory kavramlarını programlama yapmak için bilmek gerekmez fakat arkadaşıma sorduğu sorunun cevabı oradaydı. bu bilgilerin gerekip gerekmediği oracle sertifika sınavlarında görülebilir.
Benim merak ettiğim, new komutu gelinceye kadar hafızada herhangi bir yeri işgal ediyormuydu.
Nesne, Sınıf Kavramları ve Bellek Yapısı konunuz galiba. O Konuyuda okuyorum.
bardak, içi boş olsa da masa üzerinde bir yer kaplar.
nasıl ki "int a = 7;" ile int b = 524;" hatta "int c;" bellekte 4 bit yer kaplar.
kaç bit olduğunu bilmiyorum ama karşısına "new Araba( );" demesen de "Araba bmw" stack memory'de yer kaplar. zaten tanımladığın bir şeyin yer kaplamaması düşünülemez.
ClassIsmi Obje = new ClassIsmi(); şekilnde oturuyoruz.
Örneğin
araba bmw = new araba();
şeklinde.
Gelelim Sorulara
1-) sadece araba bmw şeklinde yazarsak. Sanırım sadece objeyi oluşturuyoruz ve bellekte herhangi bir yer kaplamıyor.
2-) new JLabel("Buton"); şeklinde yazarsak. Bellekte bir yer kaplıyor fakat herhangi bir objeye ait olmadığı için sanırım fonksiyonlarına ulaşılamıyor ?
DH forumlarında vakit geçirmekten keyif alıyor gibisin ancak giriş yapmadığını görüyoruz.
Üye Ol Şimdi DeğilÜye olduğunda özel mesaj gönderebilir, beğendiğin konuları favorilerine ekleyip takibe alabilir ve daha önce gezdiğin konulara hızlıca erişebilirsin.