2017-10-02 6 views
-1

Anfänger insgesamt in Java. Ich habe die Zeile unten mehrmals gesehen und kann sie nicht verstehen ... new TestCode() - es scheint, eine Instanz zu sein, aber nichts zugewiesen - Wie kann man also darauf verweisen?In Java ist die neue Instanz einer Klasse keiner Variablen zugewiesen

class TestCode 
{ 
    public TestCode() 
    { 
     System.out.println(); 
     System.out.println("Welcome to the Program"); 
    } 

    public static void main(String args[]){new TestCode();} 

} 
+0

https://stackoverflow.com/questions/46396647/what-is-calling-class-method- on-constructor –

+1

* Also wie kann es bezeichnet werden? * Es kann nicht. Dafür gibt es Variablen. – shmosel

+0

Überprüfen Sie diese https://docs.oracle.com/javase/tutorial/java/javaOO/objectcreation.html –

Antwort

0

Es kann nicht darauf verwiesen werden. Die neue Instanz wird erstellt und sofort verworfen.

Allerdings wird sein Konstruktorcode aufgerufen, daher treten Nebeneffekte auf (wenn es solche gibt - und in Ihrem Beispiel gibt es - es wird auf stdout gedruckt). So etwas zu tun ist jedoch eine schlechte Übung.

Siehe Zakis Antwort über die Zuweisung zu Variablen. Dann kannst du dich darauf beziehen und Sachen machen.

+0

Dank Adam .............. Ich kann Ihnen alle einen Link zu senden Tutorial, wo ich das sah - aber nicht, wenn es hier die Regeln bricht – user3511553

0

Wenn Sie ein Objekt über das Codewort new instanziieren, wird Speicherplatz auf dem Heap (der Teil des Systemspeichers, der zum Speichern von Objekten und deren Feldern verwendet wird) zugewiesen und der Konstruktor wird ausgeführt. In diesem Fall schreibt der Konstruktor in die Standardausgabe, und dies wird unabhängig davon ausgeführt, ob eine Referenz für das Objekt erstellt wurde oder nicht.

Danach haben Sie Recht, auf das Objekt kann nicht zugegriffen werden, da keine Referenzen darauf existieren. Daher gibt der Garbage Collector schließlich den Speicherplatz frei.

Genau wie Adam gesagt hat, wird dies im Allgemeinen jedoch davon abgeraten, da es Ihre Erwartung zunichte macht, dass ein Konstruktor das Objekt initialisieren sollte, und Interaktionen mit der Außenwelt sollten über seine Methoden möglich sein.

Also, auch wenn es ein bisschen länger, besser strukturierter Code zum Beispiel wie folgt aussehen könnte:

class TestCode { 
    public TestCode() {} 

    public void welcome() { 
     System.out.println(); 
     System.out.println("Welcome to the Program"); 
    } 

    public static void main(String args[]){ 
     TestCode tc = new TestCode(); 
     tc.welcome(); 
    } 
} 

P. S. Natürlich gibt es Fälle, in denen Sie bei jeder Instantiierung Operationen außerhalb der Instanz ausführen möchten, wie zum Beispiel das Speichern einer statischen Liste aller Instanzen der Klasse und daher das Hinzufügen der jeweiligen Instanz bei jeder Instanz. Aber selbst dann ist es wahrscheinlich am besten, eine private init() -Methode zu erstellen und sie vom Konstruktor aus aufzurufen, um Elemente mit unterschiedlichen Funktionen besser zu trennen.

Als weiteres Beispiel, hier ist eine andere, funktional gleiche Art und Weise Ihres Code neu formuliert werden:

class TestCode { 
    public TestCode() { 
     init(); 
    } 

    private void init() { 
     System.out.println(); 
     System.out.println("Welcome to the Program"); 
    } 

    public static void main(String args[]){ 
     TestCode tc = new TestCode(); 
     // Or simply: new TestCode(); 
    } 
} 
Verwandte Themen