Merhaba,

Elime geçen ilk Java kitabı Kim Korkar Java'dan ile Java öğrenmeye çalışıyorum. Pass by Referance konusunda kafam karıştı. Metotlara argüman olarak nesne göndermenin anlatıldığı bölümde bir örnekte, argüman olarak nesne alan metot, static olarak tanımlanmıştı ve bunun neden static olduğunu anlayamadım. Bu metot Main metoduyla aynı sınıfta, Main sınıfındaydı.

Şuna benzer yapıda bir örnekti:

public class Main{
 public static void main(String argv[]){

     Yol malkarakesan=new Yol(43.03, 10.00, 43.45, 9.80); //bunlar koordinat olsun
     System.out.println("Malkara-Keşan arası yol "+malkarakesan.getMesafe());

     degistirGuzergah(malkarakesan);
     System.out.println("Malkara-Keşan arası asıl yol"+malkarakesan.getMesafe());
 }

 public static void degistirGuzergah(Yol guzergahimiz){
     guzergahimiz.setKalkisX(50.00);
     guzergahimiz.setVarisX(30.00);
     ...

 }
}

Bir metot niçin static tanımlanır? Bu örnekte degistirGuzergah isimli metot static olmasa da argüman olarak Yol sınıfından türetilecek bir sınıfı alıp onun public metotlarıyla yine işlem yapamaz mıydı?

soruldu: 03 Haz '12, 15:33

murtaza's gravatar image

murtaza
981122535
cevap kabul oranı: 29%

değiştirildi: 03 Haz '12, 15:52

%C3%B6zcanacar's gravatar image

özcanacar ♦♦
17.2k59183183


genel olarak statik metodlar stateless sınıflarda yani sadece metodlardan oluşan sınıflarda kullanılırlar ve çoğu zaman bu tarz sınıflar utility sınıflarıdır, örneğin bir string'i alıp bir şekilde formatlıyordur, ya da bir integer'ı formatlı bir string haline getiriyordur v.s. ve projedeki bir çok sınıf tarafından kullanılması gerekmektedir, ya da birim dönüştürme v.s. yapıyordur

permanent link

cevaplandı: 04 Haz '12, 12:23

nht's gravatar image

nht
95651720
cevap kabul oranı: 33%

teşekkür ederim. bunu tuttum. :)

(06 Haz '12, 18:05) murtaza murtaza's gravatar image

Kitap içerisinden örnek bir kod olduğu için pratik yazılmış bir kod. Eğer degistirGuzergah metodu static olmasaydı, Main sınıfının bir instance' ı alınıp bu nesne üzerinden degistirGuzergah metodu çağırabilirdi. Ancak kodu fazla karmaşıklaştırmamak adına yapılmış bir örnek.

permanent link

cevaplandı: 03 Haz '12, 15:44

querman's gravatar image

querman
391162028
cevap kabul oranı: 0%

Kalıtım konularını öğrenip aklımda tam olarak yapılandırmadan static ve final metotlar konusundaki sorularımı bir kenara saklamalıyım sanırım. :) Haklısınız, static bir metodu nesne üzerinden değil de sınıf üzerinden de çağırabiliyoruz. Sanırım sınıf adının Main olması bunu görmeme engel oldu, karıştırdım. Önemli olan main metodu tabi.

Teşekkür ederim.

(03 Haz '12, 15:52) murtaza murtaza's gravatar image

Main metodu static oldugu icin degistirGuzergah() metodu static tanimlanmis. Static metodtan static olmayan metoda erisemessiniz! Buna karsin static bir metodun icinde bir class'i new yapip o class'in static olmayan metodlarini cagirabilirsiniz.

permanent link

cevaplandı: 03 Haz '12, 15:54

CemIkta's gravatar image

CemIkta ♦
19.9k29125190
cevap kabul oranı: 36%

teşekkür ederim. buna android-java örneklerinde rastlıyorum çokça.

(06 Haz '12, 18:06) murtaza murtaza's gravatar image

Ayrıca static olmayan metodlar da argüman olarak nesne alabilir. Static metodlar nesne üretilmeden kullanılmasını sağlar. @Cemlkta'nın da belirttiği gibi static olmayan metodlar ise nesne üretilmeden kullanılamaz.

permanent link

cevaplandı: 03 Haz '12, 17:50

omerozkan's gravatar image

omerozkan
87581528
cevap kabul oranı: 9%

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: 03 Haz '12, 15:33

Görüntüleme: 1,752 kez

Son güncelleme: 06 Haz '12, 18:06

powered by BitNami OSQA