Vor kurzem habe ich das Think in Java verwendet, das ich gesehen habe, als ich nicht arbeit war. Ich hatte das Gefühl, dass es ganz anders war als das erste Mal, dass ich es sah. Sprechen wir über die Beziehung zwischen Objekten und Referenzen in Java sowie über das Konzept der internen Klassen.
1. Alles in Java ist ein Objekt
Was ist das Operatorobjekt in Java? Die Antwort ist ein Zitat, das wie ein Zeiger in C oder C ++ ist.
Wenn Sie eine Referenz haben, müssen Sie sie zu diesem Zeitpunkt mit einem Objekt in Verbindung bringen, andernfalls wird die Referenz nicht Ihrer Kontrolle überlassen, wie Sie denken. Zum Beispiel erstellen Sie eine String -Referenz:
String S;
Es ist zu diesem Zeitpunkt keinem Objekt zugeordnet. Wenn Sie zu diesem Zeitpunkt einige Operationen ausführen, z. B. einige Methoden der Zeichenfolge aufrufen, wird es definitiv Probleme geben (mit Ausnahme einiger grundlegender Typen, denn wenn Sie sie definieren, werden sie dem Anfangswert zugewiesen), sodass Sie bei Verwendung des Objekts Geld mit dem Objekt in Verbindung bringen müssen:
String s = new String ();
oder
String S = "Mein Name ist Ajun";
Mach es einfach so.
2. wie man sich mit Objekten verbindet
In Java wird ein Objekt normalerweise durch Neue erstellt, um mit Referenzen zu assoziieren, wie z. B.:
String s = new String ("Mein Name ist ajun"); Dies schafft nicht nur ein Objekt, um Referenzen zu assoziieren, sondern auch für Kollegen initialisiert, sondern auch unseren eigenen Objekttyp.
3. Speicherort
(1) Stack: Im Allgemeinen speichert der Stack Referenzen und Grundtypvariablen. Der Stapel weist hauptsächlich den Speicher zu und veröffentlicht den Speicher, indem er den Stapelzeiger auf und ab verschiebt.
Grundtypvariablen sind nicht für die neue Erstellung geeignet, da sie weniger Gedächtnis belegen.
(2) Haufen: Wird zum Speichern von Java -Objekten verwendet. Wenn das Programm neu ausgeführt wird, wird der Haufen diesem Objekt einen Platz bereitstellen. Denken Sie daran, dass der Heap mehr Zeit verwendet, um Speicher zuzuweisen und den Speicher zu veröffentlichen, als der Stapel zum Speichern und Verlassen von Speicher. Aus diesem Grund müssen grundlegende Typvariablen auf dem Stapel gespeichert werden, da Grundtypvariablen am häufigsten verwendet werden, speichern und freigelassenen Speicher, und wenn mehr verbraucht wird, kann die Leistung vorgestellt werden.
4. Interne Klasse
(1) Grundwissen über interne Kategorien:
Im Allgemeinen können Klassen, die innerhalb von Java -Klassen definiert werden, zu internen Klassen unterteilt werden in: Klassen außerhalb des Methodenkörpers, Klassen, die innerhalb der Methode definiert sind, und statische interne Klassen (nur außerhalb der Methode definiert), anonyme interne Klassen Beschreibung:
Definieren Sie die Klasse außerhalb der Methode:
Die Mitgliedsvariablen der Klasse (statisch, nicht statisch) können zugegriffen werden. Um sicherzustellen, dass die Mitgliedsvariablen der Klasse korrekt verwiesen werden können, müssen Sie zuerst das Objekt der externen Klasse instanziieren, bevor Sie die Berechtigungen des Objektzugriffs der inneren Klasse instanziieren. Sie können es als Mitgliedsvariable der Klasse behandeln, damit Sie es viel mehr verstehen.
Klassen im Körper der Methode definiert;
Die Mitgliedsvariablen der Klasse (statisch, nicht statisch) können zugegriffen werden. Um sicherzustellen, dass die Mitgliedsvariablen der Klasse korrekt referenziert werden können, müssen Sie das Objekt der externen Klasse zuerst instanziieren, bevor das Objekt der inneren Klasse keine Zugriffsrechte haben und sie einfach als lokale Variable der Methode behandelt.
Statische innere Klasse:
Zugriff auf eine anonyme innere Klasse nur durch Zugriff auf statische Mitgliedsvariablen der Klasse:
Die Mitgliedsvariablen der Klasse (statisch, nicht statisch) können zugegriffen werden. Um sicherzustellen, dass die Mitgliedsvariablen der Klasse korrekt referenziert werden können, ist es erforderlich, das Objekt der externen Klasse zu instanziieren, bevor das Objekt der inneren Klasse nicht haben kann (2). Die Rolle der inneren Klasse kann die Klasse sehr gut verbergen. Im Allgemeinen erlaubt die Klasse keinen privaten Schutzzugriff.
Interne Klassen können mehrere Vererbung implementieren und die Eigenschaften ausmachen, die Java nicht mehr erben kann (3), Beispiele, Beispiele
Paket com.ajun.test.innerclass.example; / ** * Fruchtinhalte * @Author Administrator * */ public interface Inhalt {String value (); } paket com.ajun.test.innerclass.example; / ** * Obstziel * @Author Administrator * */ public interface Ziel {// Zielstring readLabel (); } paket com.ajun.test.innerclass.example; öffentliche Klassengüter {private String Des = "ist RUIT !!"; // Methode externe private Klasse Inhalt implementiert Inhalt {private String name = "Apple"+Des; @Override public String value () {return name; }} // externe private Klasse GDestination implementiert Ziel {private String -Label; private GDestination (String -Label) {this.label = label; } @Override public String readLabel () {return label; }} // Anonymous interne Klasse öffentliches Ziel getDestination (endgültige String -Label) {return New destination () {@Override public String readLabel () {return label; }}; } public destination dest (string s) {return neue gdestination (s); } public contents content () {neue content zurückgeben (); } public destination dest2 (string s) {class Gdestination implementiert Ziel {private String -Label; private GDestination (String -Label) {this.label = label; } @Override public String readLabel () {return label; }} Neue GDestination (s) zurückgeben; }} Paket com.ajun.test.innerclass.example; public class test {public static void main (String [] a) {Waren gs = new Goods (); Inhalt c = gs.content (); Ziel D = gs.Dest ("Peking"); System.out.println (C.Value ()); System.out.println (D.Readlabel ()); Ziel D1 = Gs.GetDestination ("Shanghai"); System.out.println (d1.readlabel ()); System.out.println (gs.dest2 ("Tianjin"). ReadLabel ()); }}Inhalt und Gdestination sind gut versteckt. Wenn Sie draußen anrufen, wissen Sie nicht, welche Klasse aufgerufen wird, so dass diese Klasse mehrere Erbschaftsfunktionen aufweist.
Ausgabe;
Apple ist RUIT !! Peking Shanghai Tianjin