Jump to content
Forumu Destekleyenlere Katılın ×
Paticik Forumları
2000 lerden beri faal olan, çok şukela bir paylaşım platformuyuz. Hoşgeldiniz.

Size ufak bir Java sorusu


Öne çıkan mesajlar

Mesaj tarihi:
Aşağıdaki kod parçasında bir hata görüyor musunuz? Görüyorsanız nedir?


public class A {

public A() {
print();
}

public void print() {
System.out.println("A initialized.");
}

}
Mesaj tarihi:
printin parantez içi boş


not: java bilmiyorum

void printClassName(Object obj) {
System.out.println("The class of " + obj +
" is " + obj.getClass().getName());
}

diye bişey gördüm ordan uydurdum
Mesaj tarihi:
Mirage said:

Aşağıdaki kod parçasında bir hata görüyor musunuz? Görüyorsanız nedir?


public class A {

public A() {
print();
}

public void print() {
System.out.println("A initialized.");
}

}


C bilgisi ile konuşayım

A() fonksiyonunun return type'ı yok. Bu default return type kullanılmasına neden olabilir ki muhtemelen int olması gerekiyor (C'de öyle en azından), return type'ı int olunca da return edilen birşey yok. ona da void desen?
Mesaj tarihi:
Financial, parametresiz metod tanımlamakta sorun yok.

Brigand, Kojiroh'un dediği gibi, constructor olduğu için return type'ı yok.

Kojiroh, anlamadığım dediğini. ; sadece satırın sonunda var?

Bu arada not düşeyim: Sorum daha çok Java ve OOP konusunda iyi tecrübesi olanlara yönelik.
Mesaj tarihi:
Yazı editlendi sanırım.
Ben baktığımda şu şekilde görünüyodu o metod:

public void print() {
System.out.println("A initialized.";);
}



Smiley vardı orda yani. Smileyleri özellikle kapatmadım bu mesajda da, yazımı alıntı edip bakabilirsiniz.

Edit: Bu arada şey dikkatimi çekti. Java'da import olaylarına çok hakim değilim o yüzden C++'taki "using namespace blabla" görevi gören bi şey var mı bilemiyorum da, System.out namespace'inde bi print() metodu daha olması lazım. Constructor içinde direkt "print()" metodu çağırmak çakışmaya yol açabilir mi acaba?
Mesaj tarihi:
merak ettim nedir hadise acikcasi.

benimde onemli olan katilmakti temali cevabim ceday inkiyle ayni, public private olmali. onun disinda problem nedir merak icinde beklemedeyim.
Mesaj tarihi:
Ceday, en mantıklı tepki senden gelmiş. Ama kodu yazan kişi print metodunun dışardan çağrılmasını istemiş, o yüzden public. Orda bir hata yok.

Kojiroh, ilk mesajda sorun yok da yukarda quote'lanan mesajlarda öyle gözüküyor haklısın.
Mesaj tarihi:
hata o deiilse hata yok o zaman :)

A a = new A();
a.print();

bu iki kere initialized yazacak.

öle hatalar aramaya baslarsan classın adı nie A die sorarlar o zaman adama :p
Mesaj tarihi:
:) Ceday, o yazdığında sonuna kadar haklısın.

Şu şekilde değiştiriyorum o zaman kodu izninizle. :)


public class A {

public A() {
print();
}

public void print() {
System.out.println("A");
}

}


Bir de ekleme yapayım, kodda doğrudan bir hata yok aslında. Hatasız compile edebilirsiniz ve yine hatasız a nesneleri oluşturup kullanabilirsiniz. Potansiyel bir hata var diyelim. Bulana şeker vercem. :)
Mesaj tarihi:
o zaman instance üzerinden herhangi bi bilgi kullanmadıgı icin static yapman daha mantıklı :))

ha bi de şöle bişi olabilir.

A yı extend eden bir class yaparsan, print metodunu override etmedikce A yazar.

fazla zorlama baska bişi cıkmaz mirage eheh
Mesaj tarihi:
Sorun o değil ama. Kodu mümkün olduğunca basit tutmak için kısa yazmaya çalıştım. O yüzden mantıksız gelen taraflar oldu tabi biraz. Alın madem instance değişkeni kullansın diyosanız:


public class A {

private int n;

public A(int n) {
this.n = n;
print();
}

public void print() {
System.out.println(n);
}

}
Mesaj tarihi:
Hatta daha karıştırmak yerine daha basite indirgeyelim:


public class A {

public A() {
foo();
}

public void foo() {}

}


Aynı potansiyel sorun burda da var.
Mesaj tarihi:
Valla ben hep print() metodunun çağrılmasında takılıp duruyorum.
A'yı extend eden B classında constructor metodu override edilmediği takdirde, B'den bi object yaratırsak hangi print() çağrılır ki?

Açıkçası ben her halükarda this'leri yerleştirdiğim için bilemedim :P
Mesaj tarihi:
Constructor override edilemez zaten. Her class kendi constructor'unu tanımlamak zorunda. Bir class'ı extend ettiysen kendi constructor'unun ilk satırında üst class'ının constructor'larından birini çağırmak zorundasın.

Hiç constructor tanımlamazsan compiler otomatik olarak parametresiz boş gövdeli constructor oluşturur. İlk satırında da üst class'ın parametresiz constructor'unu çağırır. Eğer üst class'ın parametresiz constructor'u yoksa compile hatası alırsın zaten. O zaman kendin constructor tanımlayıp super constructor'unu explicit çağırmak zorundasın.
×
×
  • Yeni Oluştur...