2016-03-19 26 views
1

Ben java bir acemi değilim ve bu bir yöntem nesneleri geçen bir sınıf örneği tarafından yöntemini çağırarak daha etkilidir clarification.Is istiyorum O same.Suppose Aşağıdaki örnek kod bana bakıyor:?Nesne yöntemini geçirme yöntemi nesneye göre çağırmaktan daha etkili midir?

Ben geçersiz yöntemi kullandığınızda
public class Test { 
    public static void main(String[] args) { 
     CircleWithPrivateDataFields myCircle = new CircleWithPrivateDataFields(5.0); 
     printCircle(myCircle); 
    } 

    public static void printCircle (CircleWithPrivateDataFields c) { 
     System.out.println("The area of the circle of radius " 
      + c.getRadius() + " is " + c.getArea()); 
    } 
} 

Ben CircleWithPrivateDataFields sınıfını tanımlamak, bu geçiş yöntemi console.Also üzerinde yazdırılır printCircle yöntemi nesne, genellikle, ben konsolda geçersiz yöntemi yazdırmak için ana yöntemle System.out.print(void method); içine yazmaya gerek ama ne zaman Nesneyi yöntemde geçiririm, buna ihtiyacım yok.

+4

hiçbir geçerli bir fark yoktur - böyle endişesi sadece kötü tasarlanmış kod yol açacaktır. Java bytecode (ve işin) sanal bir yöntem ve statik yöntemi çağırmak için gerekli biraz farklı olmakla birlikte, bu muhtemelen bir uygulama/akademik soru olarak ele alınmalıdır. – user2864740

+2

Sorunuz anlamsızdır, çünkü "verimli" terimi burada gerçekten geçerli değildir. Mantıklı olan, tek sorumluluğu olan, düşük bağlanma ve yüksek bir bütünlüğe sahip sınıflar yaratma konusunda daha fazla endişelenirim. –

+0

Ben ne söylediğini anlıyorum ama böyle endişeleri netleştirmek yoksa, büyük ihtimalle ben bir acemi ve bir kalkınan öğrenci, ben usta programcılar için saçma geliyor olsa bile, bu öğrenmek için üzerime görevdeki olduğunu düşünüyorum learn.As asla vardır ben de senin gibi olacak you.One günü gibi;) bazı teknik detaylar için –

cevap

0

En temiz basitçe sınıf bir toString() yöntem geçersiz kılma vermektir ve PrintStream sınıfının out(...) yöntemi içine geçirilen herhangi bir nesnenin toString() yöntemini arayacak beri o zaman basitçe yazdırabilirsiniz:

public class CircleWithPrivateDataFields { 
    private double radius; 

    public CircleWithPrivateDataFields(double radius) { 
     this.radius = radius; 
    } 

    public double getRadius() { 
     return radius; 
    } 

    public double getArea() { 
     return Math.PI * radius * radius; 
    } 

    @Override 
    public String toString() { 
     return String.format("The area of the circle of radius %.2f is %.2f", radius, getArea()); 
    } 

    public static void main(String[] args) { 
     CircleWithPrivateDataFields circle = new CircleWithPrivateDataFields(5); 
     System.out.println(circle); 
    } 

} 

Verimliliğin bununla hiçbir ilgisi olmadığını unutmayın.

Ayrıca, toString() yöntemlerinin hata ayıklama yardımı ve yukarıda gösterildiği gibi oyuncak programları için çıktı olarak mükemmel olduğunu, ancak üretim kodu için çıktı yöntemleri olarak neredeyse hiç kullanılmadığını unutmayın.

+0

Evet, teşekkürler. Teşekkürler. –

İlgili konular