Wann ist der richtige Zeitpunkt für das "neue" Stichwort?
Wann ist es notwendig, die new
Schlüsselwort in Java. Ich weiß man soll es verwenden, wenn Sie erstellen eine Instanz von einem Objekt wie diesem:
TextView textView = new TextView(this);
Manchmal im code, den ich bemerken, dass new
nicht verwendet wird und ich verwirrt..
In dieser code-Zeile:
AssetManager assetManager = getAssets();
Warum nicht eine Instanz der AssetManager wie folgt erstellt:
AssetManager assetManager = new AssetManager();
dann ist es gleich getAssests()?
Wann sollte new
verwendet werden?
Dank!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden Sie das new-Schlüsselwort, wenn ein Objekt explizit erstellt für die erste Zeit. Dann Holen ein Objekt mit einer getter-Methode new ist nicht erforderlich, da das Objekt bereits im Speicher vorhanden, muss daher nicht neu erstellt werden.
wenn Sie wollen eine detaillierte Beschreibung des neuen Besuch die oracle docs
Ein Objekt benötigen, das "neue" Schlüsselwort, wenn es null ist (das ist die Lust zum nicht initialisiert).
EDIT:
Diese wird immer drucken "neue" unter den gegenwärtigen Umständen.
So, um es zu beheben, Sie würde so etwas machen:
Und unter diesen Umständen werden wir immer sehen "muss NICHT neu"
assetManager = getAssets()
ohnenew
. IMO, das Bearbeiten, die Hinzugefügt, es sollte zurückgesetzt werden.LinearLayout rootView = (LinearLayout)findViewById(R.id.rootView);
In java haben Sie immer zu verwenden
new
um Objekte zu instanziieren (naja, fast immer). MitgetAssests()
rufen Sie eine bereits erstellte ein. Ich denke mal, deine Frage kommt aus c++, wonew
reserviert dynamischen Speicher, aber da java nur dynamische Objekte, neues ist immer erforderlich.In Java
new MyClass()
erstellt eine neue Instanz vonMyClass
und gibt eine Referenz darauf.Unterdessen, die Erklärung:
definiert eine variable
foo
speichern können, einen Verweis auf eine Instanz vonMyClass
oder der spezielle Wertnull
zeigt, dass die Abwesenheit von solchen Verweis. Wenn Sie nicht assing jede Bezugnahme auffoo
, wird der Standardwertnull
.Kann man sicherlich kombinieren diese Dinge, z.B. wie folgt:
oder, was dasselbe ist, wie dieses:
Aber nicht haben um eine neue Instanz erstellen jedes mal, wenn Sie ordnen etwas an eine Referenz-variable. Sie könnte genauso gut tun, wie z.B. dieser:
oder auch:
Beachten Sie, dass in Java, im Gegensatz zu einigen anderen Sprachen, wie C++, man kann nie zuordnen (eine Kopie von) einem tatsächlichen Objekt in eine variable. Eher, Java-Objekte werden immer auf die der Zugriff über Referenzen auf Sie. Wenn jemand spricht von "zuweisen eines Objekts an eine variable" oder "die übergabe eines Objekts als parameter" oder "Rückgabe eines Objekts von einer Methode" in Java, was Sie eigentlich meinen, ist die Zuweisung oder der übergabe oder Rückgabe einer Referenz auf ein Objekt.
Methoden, die Ihr code fordert, kann (und oft tun) auch wieder Verweise auf Objekte. Zum Beispiel, wenn Ihre Klasse eine Methode wie diese:
könnten Sie nennen es und speichern Sie die Referenz gibt es in einer Variablen wie diese:
oder so:
Können wir sagen, aus der Deklaration der Methode, die
getSomeObject()
wird immer wieder ein Bezug zu einemMyClass
Instanz (odernull
), aber nicht, Woher das Beispiel stammt eigentlich aus. Das hängt ganz davon ab, was der code innerhalb dergetSomeObject()
Methode. Der code kann immer einen neuenMyClass
Instanz mitnew MyClass()
jedes mal, wenn es aufgerufen wird, und geben Sie einen Verweis darauf, oder es ist vielleicht immer wieder ein Verweis auf die gleichen Objekt. Oder, es könnte natürlich manchmal Rückgabe einer Referenz auf ein neues Objekt, und manchmal zu einem zuvor erstellt haben.Beachten Sie, dass, wenn Sie einen neuen Wert zuweisen, um eine variable, was auch immer die variable enthalten ist, bevor Sie vergessen werden. Wenn die vergessenen Wert passiert, um die Letzte Referenz auf ein Objekt, wird das Objekt selbst wird zerstört durch den Java garbage collector.
So, zum Beispiel, während es ist sicherlich möglich etwas wie das hier tun:
dass macht in der Regel keinen Sinn, da wären Sie erstellen eine neue
MyClass
Instanz, nur um sofort wegwerfen Ihre einzige Referenz zu und ersetzen Sie es mit etwas anderes. Im Effekt, der code oben ist genau äquivalent zu:Das einzige mal, dass könnte auch nur im entferntesten Sinn machen würde, wenn Sie wollte zum erstellen einer neuen
MyClass
Instanz und sofort lassen Sie es sein, Müll gesammelt, z.B. weil dieMyClass
Konstruktor hatte einige Nebenwirkungen, die Sie auslösen wollte. Aber da es in der Regel als schlechter Stil für Konstrukteure, um alle nicht-trivialen Nebenwirkungen (oder, allgemeiner, alles zu tun, neben der Einrichtung der neuen Sache), solltest du normalerweise nicht haben, eine Entschuldigung für das schreiben von code.Den neuen benutzt wird beim Aufruf des Konstruktors für eine Funktion. getAssets() gibt ein AssetManager, es braucht nicht eine neue zu erstellen.
new
wird immer verwendet, um neues Objekt anlegen.diese
ist nur die Bestimmung mit dem Rückgabewert von Methode
getAssets()
ReferenzassetManager
.[Bearbeiten]
habe ich gelogen, über
new
ist es möglich, so etwas zu tun:- und Sie können auch verwenden, Reflexion:
Mithilfe
new
Sie reserviert Speicher für das Objekt.Mit einem
getXXX()
wird verwendet, um einen bestehenden Objekt bereits zugewiesen ist.Da Sie gekennzeichnet mit [android] ich vermute, dein code ist innerhalb von ein
Activity
oderService
. In diesem FallgetAssets()
ist eine Methode der Klasse, die Sie erweitern. So ist Sie eigentlich nicht erstellen, rufen Sie den vorhandenen code, um Ihnen eine Referenz zu dem, was bereits vorhanden ist.beachten Sie die Großbuchstaben in TextView, und das fehlen von in getAssets. getAssets ist nicht eine Klasse, wie TextView, es ist eine Methode zurückgeben eines Objekts. Und wie viele andere erwähnt haben, Ihr Kapital bereits vorhanden ist.