Static bir sınıf yada metot içerisinde statik bir alan veya değişken tanımlanırsa ne olur ? Static tanımlanmış alanlara erişilebilir mi? Erişilirse şayet nasıl erişilir ?

soruldu: 23 Şub '12, 09:46

matsavar's gravatar image

matsavar
115347
cevap kabul oranı: 25%

değiştirildi: 23 Şub '12, 11:49

%C3%B6zcanacar's gravatar image

özcanacar ♦♦
17.2k59183183

Java dilinde olacak cevap...

(23 Şub '12, 09:47) matsavar matsavar's gravatar image

Static olmayan bir sınıfın static değişkenlerine nesne yaratılmadan direk sınıfın adından sonra nokta koyularak erişilebilir. O sınıftan yaratılan tüm nesneler için aynı değere sahiptir bir static değişken.

permanent link

cevaplandı: 23 Şub '12, 10:51

faridmovsumov's gravatar image

faridmovsumov
1.1k193738
cevap kabul oranı: 16%

değiştirildi: 24 Şub '12, 11:18

2

Eger Java ise static bir sinif tanimlamaniz zaten mümkün degil. Sadece bir sinif bünyesinde baska bir sinif static olarak tanimlanir, oda bu sinifa bünyesinde tanimlandigi sinif üzerinden erisebilmek icin. Bir sinif bünyesinde hem static hem de static olmayan metotlar yer alabilir.

(23 Şub '12, 11:48) özcanacar ♦♦ %C3%B6zcanacar's gravatar image
1

OOP conceptine aykırı olduğu için static sınıf tanımı yapılamaz. oluşturulan her instance içinde bu static değerler paylaşılır. Mülakatta gelebilecek güzel bir soru :)

(23 Şub '12, 14:36) gklp gklp's gravatar image

OOP conceptine göre static nesne tanımı yapılabilir. Nitekim java jenerikleri dizayn eden ve 1.5 sürümünden itibaren kullanılan güncel java compiler'ı inşa eden bilgisayar bilimci Martin Odersky'nin geliştirmiş olduğu pure oop scala dilinde, object keywordüyle singleton nesne olabilir ve sadece bu nesneler bünyesinde static üyeleri barındırabilir. Java'dakinin aksine, sınıf bünyesinde static üye tanımlanamaz.

(24 Şub '12, 05:28) lostsoul lostsoul's gravatar image
1

Şimdi bildiğimiz şey jvm tarafından classlar load edilirken static alanlar static bloğuna bind ediliyor ve 1000 lerce instance oluşturulsa bile tüm instancelar aynı referansı görüyor. Bu mimari böyle çalışıyorken benim bir static sınıf yazıp onun instance oluşturmam mümkün değil. Hiç bir zaman oluşturamadığım için. static class abc{} // hatalı new abc() // hiç bir zaman yok

Zaten yukardaki durumdan dolayı hiç bir zaman oluşturamadığım için extend etmemde mümkün değil. Bu yüzden bu concepte aykırı.

(24 Şub '12, 07:21) gklp gklp's gravatar image

Anlamadığım konu, Şimdi dediğinize göre " object keyword {} " dediğiniz kavram başka bir class için extend edilebiliyor.

class cbd extend keyword {} gibi, bu kısmı anlamadım, static bizim bildiğimiz gibi scala tarafındada bu mantık ile çalışıyorsa nasıl oluyor anlamadım.

(24 Şub '12, 07:22) gklp gklp's gravatar image

OOP konseptini herhangi bir dilin kuralları/özellikleri/sınırları belirlemez.Java'nın desteklemediği "static class abc" tanımıyla teorikte düşündüğün static nesne yapısı başka bir dilde var olabilir. Aynen Scala'da "object Denek{ private val a }" şeklinde tanımlanabildiği gibi.Bu yapı konsepte aykırı mı olur?Olmaz, çünkü bu şekilde elde edilen bütün nesneler Singleton Object olur, yani sistem üzerindeki bütün erişimler için tek bir nesne referans edilerek, kullanılması sağlanır. Java built in bu yapıyı desteklemediği içinde singleton tasarım şablonu kullanılarak singleton nesneler elde edilir.

(24 Şub '12, 16:29) lostsoul lostsoul's gravatar image
6 yorumdan 5 tanesi gösteriliyor hepsini göster

Peki bunlar metot içinde geçerlimidir ?

permanent link

cevaplandı: 23 Şub '12, 10:56

matsavar's gravatar image

matsavar
115347
cevap kabul oranı: 25%

Aynı şeyler metod için de geçerlidir.

(23 Şub '12, 11:03) faridmovsumov faridmovsumov's gravatar image
package com.pozitifkod.Genel;

public class StatikNesneKullanimi {
public static class StatikSinif{
int sayi1;
static int sayi2;
public static void statikMetot(){
System.out.println("Bu bir statik metottur..");
}
public void normalMetot(){
System.out.println("Bu bir normal metottur..");
}
}
public class StatikOlmayanSinif{
public static final int sayia = 25; //statik olmayan bir alan içinde statik bir değişken tanımlanacaksa eğer kesinlikle final olmalıdır!!
//public static void statikYordam(){}  Hata!!statik olmayan bir dahili sınıf içerisinde statik metot tanımlanamaz..
public void normalYordam(){
System.out.println("Statik olmayan dahili sınıf içindeki yordam..");
}  //Normal kullanım
}

public static void main(String[] args) {
//static dahili sınıfın statik olmayan alanlarına yada metotlarına erişme..
StatikSinif ss = new StatikSinif();
ss.sayi1 = 12;
ss.normalMetot();
//static dahili sınıfın static olan alanlarına yada metotlarına erişim..
StatikSinif.sayi2 = 15;
StatikSinif.statikMetot();
//statik olmayan dahili bir sınıfa erişim..
StatikNesneKullanimi.StatikOlmayanSinif sos = new StatikNesneKullanimi().new StatikOlmayanSinif();
System.out.println(StatikNesneKullanimi.StatikOlmayanSinif.sayia);
sos.normalYordam();
}
}

Buyrun açıklama satırlarında olabildiğince açıklamaya çalıştım faydalı olması dileğiyle...

permanent link

cevaplandı: 23 Şub '12, 11:31

matsavar's gravatar image

matsavar
115347
cevap kabul oranı: 25%

Cevabınız
toggle preview

Bu soruyu takip et

E-Posta üzerinden:

Üyelik girişi yaptıktan sonra abonelik işlemlerini yapabilirsiniz

RSS üzerinden:

Cevaplar

Cevaplar ve Yorumlar

Yazı Formatlama

  • *italic* ya da _italic_
  • **bold** ya da __bold__
  • link:[text](http://url.com/ "başlık")
  • resim?![alt text](/path/img.jpg "başlık")
  • liste: 1. Foo 2. Bar
  • temel HTML etiketleri de kullanılabilir

Bu sorunun etiketleri:

×1,077
×13

Soruldu: 23 Şub '12, 09:46

Görüntüleme: 2,192 kez

Son güncelleme: 24 Şub '12, 16:57

powered by BitNami OSQA