Ich habe kürzlich in meiner Freizeit einen Blick auf „Think in Java“ geworfen, und es fühlte sich ganz anders an als beim ersten Mal, als ich es noch einmal las.
Als Nächstes sprechen wir über die Beziehung zwischen Objekten und Referenzen in Java und die Konzept der internen Klassen.
1. Alles in Java ist ein Objekt
Was steuert Objekte in Java? Die Antwort ist eine Referenz, die einem Zeiger in C oder C++ ähnelt.
Wenn Sie eine Referenz haben, müssen Sie diese zu diesem Zeitpunkt einem Objekt zuordnen, da die Referenz sonst nicht wie erwartet unter Ihrer Kontrolle steht. Wenn Sie beispielsweise eine String-Referenz erstellen:
String s ;
Es ist zu diesem Zeitpunkt keinem Objekt zugeordnet. Wenn Sie zu diesem Zeitpunkt einige Vorgänge ausführen, z. B. einige Methoden von String aufrufen, treten definitiv Probleme auf (bei einigen Grundtypen außer, weil dies der Fall ist). Wenn Sie Geld verwenden, müssen Sie es mit dem Objekt verknüpfen:
String s = new String();
oder
String s = “my name is ajun”;
Einfach so.
2. So verknüpfen Sie ein Objekt
In Java wird ein Objekt normalerweise durch „Neu“ erstellt, um es mit einer Referenz zu verknüpfen, wie zum Beispiel:
String s = new String("my name is ajun")
Dies ist Es wird nicht nur ein Objekt erstellt und mit den Referenzen verknüpft, sondern auch initialisiert. Gleichzeitig können wir auch unseren eigenen Objekttyp erstellen.
3. Speicherort
(1) Stapel: Speichert im Allgemeinen Referenzen und Basistypvariablen. Der Stapel weist hauptsächlich Speicher zu und gibt ihn frei, indem er den Stapelzeiger nach oben und unten bewegt.
Variablen vom Typ „Basis“ eignen sich nicht für die Erstellung mit „Neu“, da sie nur wenig Speicher belegen.
(2) Heap: Wird zum Speichern von Java-Objekten verwendet. Wenn das Programm neu ausgeführt wird, weist der Heap diesem Objekt einen Speicherplatz zu. Beachten Sie, dass die Zuweisung und Freigabe von Speicher durch den Heap teurer ist als die Speicherung und Freigabe von Speicher durch den Stapel Dies bedeutet, dass Basistypvariablen auf dem Stapel gespeichert werden müssen, da Basistypvariablen am häufigsten verwendet werden und Speicher häufig gespeichert und freigegeben wird, kann man sich die Leistung vorstellen.
4. Interne Klassen
(1) Grundkenntnisse über interne Klassen:
Im Allgemeinen werden innerhalb von Java-Klassen definierte Klassen zu internen Klassen.
Interne Klassen können unterteilt werden in: Klassen, die außerhalb des Methodenkörpers definiert sind, Klassen innerhalb der Methode definiert, statische innere Klassen (können nur außerhalb der Methode definiert werden), anonyme innere Klassen
Beschreibung:
Außerhalb der Methode definierte Klassen:
Mitgliedsvariablen der Klasse (statisch, nicht statisch) kann Zugriff sein. Um sicherzustellen, dass auf die Mitgliedsvariablen der Klasse korrekt verwiesen werden kann, muss zuerst das Objekt der äußeren Klasse instanziiert werden, bevor das Objekt der inneren Klasse instanziiert werden kann
Die Zugriffsberechtigungen können beliebig sein. und es kann als Mitgliedsvariable der Klasse betrachtet werden. Dies macht es viel einfacher zu verstehen.
Im Methodenkörper definierte Klasse;
Auf die Mitgliedsvariablen (statisch und nicht statisch) der Klasse kann zugegriffen werden. Um sicherzustellen, dass auf die Mitgliedsvariablen der Klasse korrekt verwiesen werden kann, muss das Objekt der Die externe Klasse muss zuerst instanziiert werden. Das Objekt
, das die innere Klasse instanziiert, darf keine Zugriffsrechte haben. Behandeln Sie es einfach als lokale Variable der Methode.
Statische innere Klasse:
Kann nur auf statische Mitgliedsvariablen der Klasse zugreifen
Zugriffsrechte Beliebig
Anonyme innere Klasse:
Auf Mitgliedsvariablen (statisch, nicht statisch) der Klasse kann zugegriffen werden Um sicherzustellen, dass die Mitgliedsvariablen der Klasse korrekt referenziert werden, muss das Objekt der äußeren Klasse zuerst instanziiert werden, bevor das Objekt der inneren Klasse instanziiert werden kann
Zugriffsberechtigungen können nicht sein
(2), Die Rolle der inneren Klasse
Interne Klassen können Klassen sehr gut ausblenden. Im Allgemeinen dürfen Klassen keine privaten Standardzugriffsrechte haben.
Innere Klassen können eine Mehrfachvererbung erreichen, was die Tatsache ausgleicht, dass Java keine Mehrfachvererbung haben kann
(3), Beispiel
package com.ajun.test.innerclass.example; /** * 水果内容 * @author Administrator * */ public interface Contents { String value(); } package com.ajun.test.innerclass.example; /** * 水果目的地 * @author Administrator * */ public interface Destination { //目的地 String readLabel(); } package com.ajun.test.innerclass.example; public class Goods { private String des="is ruit!!"; //方法外部 private class Content implements Contents{ private String name = "apple "+des; @Override public String value() { return name; } } //方法外部 private class GDestination implements Destination{ private String label ; private GDestination(String label){ this.label= label; } @Override public String readLabel() { return label; } } //匿名内部类 public Destination getdestination(final String label){ return new Destination(){ @Override public String readLabel() { return label; } }; } public Destination dest(String s){ return new GDestination(s); } public Contents content(){ return new Content(); } public Destination dest2(String s){ class GDestination implements Destination{ private String label; private GDestination(String label){ this.label= label; } @Override public String readLabel() { return label; } } return new GDestination(s); } } package com.ajun.test.innerclass.example; public class Test { public static void main(String [] a){ Goods gs = new Goods(); Contents c = gs.content(); Destination d = gs.dest("Beijing"); System.out.println(c.value()); System.out.println(d.readLabel()); Destination d1 = gs.getdestination("Shanghai"); System.out.println(d1.readLabel()); System.out.println(gs.dest2("Tianjin").readLabel()); } }
wobei Inhalt und Gdestination gut verborgen sind. Wenn es von außen aufgerufen wird, ist nicht bekannt, welche spezifische Klasse aufgerufen wird, sodass diese Klasse über die Funktion einer Mehrfachvererbung verfügt.
apple is ruit!! Beijing Shanghai Tianjin
Weitere Artikel zum Verständnis von Objekten, Referenzen und internen Klassen in der objektorientierten Programmierung von Java finden Sie auf der chinesischen PHP-Website!