Static bir metot nedir?

soruldu: 13 Nis '13, 13:11

aqil%20isa's gravatar image

aqil isa
42223
cevap kabul oranı: 0%

değiştirildi: 14 Nis '13, 13:11

mhkoca60's gravatar image

mhkoca60
1.8k264554

3
(13 Nis '13, 13:14) AliRıza Adıyahşi ♦ AliR%C4%B1za%20Ad%C4%B1yah%C5%9Fi's gravatar image
3

Benzer bir soru sorulmuş:

Static class' lar nasıl kullanılmalı?

(14 Nis '13, 03:41) numankaraaslan numankaraaslan's gravatar image

Müsadenizle soru başlığını biraz genişlettim.

(14 Nis '13, 13:11) mhkoca60 mhkoca60's gravatar image

Choox Tskler

(15 Nis '13, 12:27) aqil isa aqil%20isa's gravatar image

Sınıfa ait herhangi bir niteliği kullanmayan, sadece kendi parametrelerini kullanarak hesap yapan metodlar static yapılır. Bu tip metodları kullanmak bir nevi "bu metod sınıfın niteliklerini değiştirmeyecek" diye ilan etmektir. Eğer bu metodlar sadece sınıf tarafından kullanılacaksa private static yapabilirsiniz.

Ayrıca Netbeans ve Eclipse ortamlarında static metodlar otomatik tamamlamada italic gösterilir. Böylece metodun herhangi bir sınıf niteliğini değiştirmeyeceğini bilirsiniz.

Yanı sıra, JVM dokümanlarında da görebileceğiniz gibi, static olmayan metodları çağırmak için üretilen bytecode'da aload kullanılacağından stackframe'e bir nesne daha eklenir.

Yani size tavsiyem static yapabileceğiniz (nesnenin niteliklerine ihtiyaç duymayan) metod varsa yapın, böylece makinenin kaynaklarını daha etkili kullanabilirsiniz.

permanent link
Bu kayıt wiki sayfası olarak tanımlanmıştır.

cevaplandı: 14 Nis '13, 06:28

nurettin's gravatar image

nurettin
2.2k2441
cevap kabul oranı: 14%

wikileştirildi: 18 Nis '13, 03:27

Size katılıyor olsam da yine de bir ekleme yapmadan geçemeyeceğim, static metod kullanırken oluşabilecek olası memory leak lere de çok dikkat etmek gerekiyor.

(15 Nis '13, 08:53) dreampowder dreampowder's gravatar image
1

herhalde static metod değil, static sınıf değişkenlerinden bahsediyorsunuz. Ben de eklemeden geçmeyeyim, fazla yer kaplayan static değişkenleri olduğundan şüphelenenler -Xmx seçeneğiyle programlarına çok az hafıza verip HeapDumpOnOutOfMemoryError özelliğiyle dump alıp eclipse mat gibi bir araçla sorunlu değişkenleri inceleyebilirler.

(18 Nis '13, 01:02) nurettin nurettin's gravatar image

Bir dönem başıma gelmişti, bir array döndüren bir static metodum vardı, bayağı bir leak oluşmuştu :)

(18 Nis '13, 01:36) dreampowder dreampowder's gravatar image
1

@dreampowder static final değişkeniyle hafızada şişme olabilir, static metodla alakası olmaması lazım. Diziyi static metoddan ya da instance metoddan vermeniz arasında fark yok. Örnek verebilir misiniz?

(18 Nis '13, 03:35) nurettin nurettin's gravatar image

hocam şu anda kodlar elimde değil, fakat olay başka birisinin projesine bambaşka bir amaçla yeni bir implementasyon yapmaya çalışmamla başıma gelmişti (sonrasında problemlerden bunalıp baştan yazmam buna harcadığım zamanın 20'de 1'ine denk geldi:) ), büyük bir ihtimalle dediğiniz gibi static metoddan gelen değerleri static bir değişkende tutup sonrasında o değişkenin memory den temizlenmemesiyle ilgili bir problemdi... yani asıl sorun dediğiniz gibi o zaman static değişkene dayanmış oluyor

(18 Nis '13, 07:53) dreampowder dreampowder's gravatar image

kaygisizcom a ek olarak static bir method içinde sadece global olan static değişkenleri kullanabilirsin. static olmayan global değişkenleri kullanamazsın.

Fakat ben static method kullanmayı çoğu zaman daha kullanışlı bulurum. Bu konuda kaygisizcom dan ayrılıyoruz.

permanent link

cevaplandı: 13 Nis '13, 21:55

Emre's gravatar image

Emre
1763410
cevap kabul oranı: 12%

bir sınıfın nesnesini yaratmadan direk olarak sınıfın içindeki değişkene erişebilirsin.

permanent link

cevaplandı: 15 Nis '13, 03:53

Hasan%20Bey's gravatar image

Hasan Bey
342202532
cevap kabul oranı: 0%

-3

Static belirlenmiş bir metot kullanman demek, onu kullanacağın sınıfta nesne oluşturmadan rahatlıkla kullanabilirsin demek. Fakat Tavsiye edilmez. kullanımları aşağıdaki gibidir.

sınıfta;

class yazma{

public void yaz(){

sysout("merhaba");

}

public static void yazstatic(){

sysout("merhaba"); }

}

mainde;

yazma yazmak= new yazma();

yazmak.yaz();

yazma.yazstatic();

permanent link

cevaplandı: 13 Nis '13, 15:14

kaykisizcom's gravatar image

kaykisizcom
37141417
cevap kabul oranı: 0%

değiştirildi: 13 Nis '13, 17:11

Neden tavsiye edilmiyor? Tavsiye edilmiyor diye birşey olamaz. Ne zaman, hangisi gerekliyse o kullanılır.

(13 Nis '13, 15:26) AliRıza Adıyahşi ♦ AliR%C4%B1za%20Ad%C4%B1yah%C5%9Fi's gravatar image

Orada bir yazım hatasından kaynaklı anlaşılmazlık olmuş. Tavsiye edilmiyor çünkü direk erişim sağlıyor. yani sizin önünüzde engelleyici bir katman yok orada.

(13 Nis '13, 17:14) kaykisizcom kaykisizcom's gravatar image

kavramları yanlış anladığınızı düşünüyorum. nesne oluşturmak engelleyici katman değildir. methodlarla statik fonksiyonların amaçları farklıdır. sizin mantığınızda alakasız fonksiyonlar bir sınıfta toplanabilir, bu da "high cohesion, loose coupling" ilkesinin sağlanamamasına neden olacaktır. oo programlama da önemli bir kavramdır ve projeye yönelik çeşitli çıkarımlar yapmayı sağlayan hesaplamalarda bu noktaya bakılır.

(14 Nis '13, 05:01) baran baran's gravatar image
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,079
×13

Soruldu: 13 Nis '13, 13:11

Görüntüleme: 5,286 kez

Son güncelleme: 18 Nis '13, 07:53

powered by BitNami OSQA