1. Objekte
Alles in Java ist ein Objekt.
Genauer gesagt gibt es in Java nur sehr wenige Dinge, die keine Objekte sind. Zum Beispiel primitive Typen. Dies ist jedoch eine eher seltene Ausnahme von der Regel.
Was ist also ein Objekt?
Ein Objekt ist eine Entität, die Daten zusammen mit Methoden gruppiert, die die Daten verarbeiten . Wenn wir „Daten“ sagen, meinen wir natürlich Variablen.
Die Variablen eines Objekts werden als „Daten“ oder „Zustand“ bezeichnet.
Die Methoden eines Objekts werden als sein „Verhalten“ bezeichnet. Es ist üblich, den Zustand (Variablen) eines Objekts nur mithilfe der Methoden dieses Objekts zu ändern. Das direkte Ändern der Variablen eines Objekts (ohne Verwendung seiner Methoden) gilt als schlechte Form.
Jedes Objekt sowie jede Variable haben einen Typ . Dieser Typ wird einmalig beim Anlegen des Objekts festgelegt und kann in Zukunft nicht mehr geändert werden. Der Typ eines Objekts ist seine Klasse.
Jedes Objekt verfügt über eine eigene Kopie von Instanzvariablen (Feldern). Wenn in einer Klasse eine nicht statische Int-Variable deklariert wird und Ihr Programm 10 Objekte dieser Klasse erstellt, verfügt jedes Objekt über eine eigene Int-Variable.
Mit einem Objekt interagieren
Die bequemste Art, mit einem Objekt zu arbeiten, besteht darin, einen Verweis darauf in einer Variablen zu speichern und dann Methoden für diese Variable aufzurufen. Das wird Ihnen bekannt vorkommen:
variable.method()
Wo variable
ist eine Variable, die einen Verweis auf ein Objekt speichert und method
eine Methode dieser Klasse ist?
Wenn Sie auf ein Feld (eine Variable) eines Objekts verweisen möchten, müssen Sie auch den Punktoperator verwenden :
variable.field
Wo variable
ist eine Variable, die einen Verweis auf ein Objekt speichert und field
eine Instanzvariable (ein Feld) ist?
2. new
Betreiber
Um ein Objekt einer bestimmten Klasse zu erstellen, müssen Sie den new
Operator verwenden. Im Allgemeinen sieht die Erstellung eines Objekts wie folgt aus:
Class variable = new Class(arguments);
Dabei Class
steht der Name der Klasse der variable
Variablen sowie der Name der Klasse des zu erstellenden Objekts. Und variable
ist eine Variable, die einen Verweis auf das erstellte Objekt speichert. Und arguments
ist ein Platzhalter für eine durch Kommas getrennte Liste von Argumenten, die an den Konstruktor übergeben werden.
Die spezifische Liste der Argumente, die übergeben werden können, wird von den Programmierern festgelegt, die die Klasse schreiben.
Sie haben bereits Objekte erstellt und sogar dieses spezielle Konstrukt verwendet. Du hast es nicht vergessen, hoffe ich?
Scanner console = new Scanner(System.in);
int x = console.nextInt();
Scanner console
– Dadurch wird eine console
Variable vom Typ erstellt Scanner
. – Dadurch wird ein neues Objekt erstellt. Und der Zuweisungsoperator setzt die Variable gleich einer Referenz auf das neu erstellte Objekt.new Scanner(System.in)
Scanner
console
In der zweiten Zeile rufen wir die nextInt()
Methode für das Scanner
Objekt auf und verwenden dabei die console
Variable, die einen Verweis auf das Scanner
Objekt speichert.
Beispiele für die Objekterstellung:
Code | Beschreibung |
---|---|
|
Erstellen Sie ein String Objekt |
|
Erstellen Sie ein Scanner Objekt |
|
Erstellen Sie einen int[] : einen Container mit 10 int Elementen |
Die erstellten Objekte werden als Objekte der Klasse oder Instanzen der Klasse bezeichnet, während die Klasse als Klasse des Objekts bezeichnet wird . Beispielsweise s
speichert die Variable einen Verweis auf eine Instanz der String
Klasse.
3. Einführung in den Unterricht
Ich denke, Sie haben bereits gesehen, wie praktisch es ist, von anderen Programmierern geschriebene Klassen zu verwenden. Aber wie wäre es, eigene Kurse zu schreiben?
Woher wissen Sie, wann und wo Sie Ihren eigenen Kurs benötigen und wie Sie einen erstellen?
Programmierer erstellen normalerweise ihre eigenen Klassen, wenn sie eine neue Entität in das Programm einbinden möchten. Klingt das verwirrend? Dann werde ich versuchen, es zu erklären, aber ich werde von weitem beginnen.
Datengruppe
Etwas vereinfacht können wir sagen, dass ein Objekt in Java ein Speicherblock ist, der die in einer Klasse deklarierten Variablen (Instanzfelder) enthält. Oder mit anderen Worten: Variablen, die zu einer Gruppe zusammengefasst sind.
Nehmen wir an, Ihr Programm muss die Koordinaten von Punkten speichern 100
und benötigt eine Methode, um sie auf dem Bildschirm anzuzeigen. Dies kann mithilfe von Arrays erfolgen. Zum Beispiel so:
class Solution
{
public static void printPoints(int[] x, int[] y, int[] color)
{
for (int i = 0; i < x.length; i++)
System.out.println("Color of (" + x[i] + ", " + y[i] + ") = " + color[i]);
}
public static void main(String[] args)
{
int[] x = new int[100];
int[] y = new int[100];
int[] color = new int[100];
printPoints(x, y, color);
}
}
Es wäre viel praktischer, wenn wir einen einzigen Typ zum Speichern aller Informationen über einen Punkt hätten: x
, y
, color
. Wenn ein solcher Typ in Java nicht existiert, können Sie ihn selbst erstellen.
Dazu schreiben wir Code für eine Point
Klasse:
public class Point
{
public int x;
public int y;
public int color;
}
Jetzt kann der obige Code wie folgt umgeschrieben werden:
class Solution
{
public static void printPoints(Point[] points)
{
for (int i = 0; i < points.length; i++)
System.out.println("Color of (" + points[i].x + ", " + point[i].y + ") = " + points[i].color);
}
public static void main(String[] args)
{
Point[] data = new Point[100];
for (int i = 0; i < data.length; i++)
data[i] = new Point();
printPoints(data);
}
}
Fügen wir nun der Point
Klasse eine Methode hinzu, die Informationen über das Objekt anzeigt:
public class Point
{
public int x;
public int y;
public int color;
public void print()
{
System.out.println("Color of (" + x + ", " + y + ") = " + color);
}
}
Jetzt Solution
sieht die Klasse so aus:
class Solution
{
public static void printPoints(Point[] points)
{
for (int i = 0; i < points.length; i++)
points[i].print();
}
public static void main(String[] args)
{
Point[] data = new Point[100];
for (int i = 0; i < data.length; i++)
data[i] = new Point();
printPoints(data);
}
}
Wir haben die Koordinaten und Farbinformationen des Punkts geschickt in der Point
Klasse versteckt, zusammen mit der Methode, die den Zustand des Punkts anzeigt.
Klassen sind eine Möglichkeit, die Programmkomplexität zu verwalten. Ein großes Programm wird weniger komplex, wenn es in viele kleine Klassen aufgeteilt wird.
4. Veränderliche vs. unveränderliche Objekte
Es war einmal, als wir Konstanten in Java untersuchten und zu einem Ergebnis kamen, das nicht sehr tröstlich ist. Mit Konstanten können Sie Variablen vor Änderungen schützen, aber sie können Änderungen an den Objekten, auf die sie verweisen, nicht verhindern.
Um dieses Problem zu lösen, hat Java konstante Objekte entwickelt. Oder, wie sie häufiger genannt werden, unveränderliche Objekte.
Sie kennen übrigens bereits eine solche Klasse, deren Objekte nicht geändert werden können: String
. Ein String
Objekt bleibt nach seiner Erstellung für immer unverändert. Und wie haben die Entwickler von Java das erreicht?
Zunächst werden alle Variablen der String
Klasse ausgeblendet, also deklariert private
.
Zweitens können Sie die String
Klasse nicht erben: Ihre Klassendeklaration enthält den final
Modifikator.
Drittens und am interessantesten ist, dass alle Methoden der String
Klasse, von denen man theoretisch erwarten würde, dass sie das vorhandene Objekt ändern, es nicht tatsächlich ändern, sondern stattdessen ein neues zurückgeben.
Beispielsweise toUpperCase()
schreibt die Methode alle Buchstaben in der Zeichenfolge in Großbuchstaben. Aber anstatt das Objekt zu ändern, für das die Methode aufgerufen wird, gibt sie ein neues String
Objekt zurück, das aus Großbuchstaben besteht:
String text = "This is a very important message";
String message = text.toUpperCase();
Folgendes wird nach der Ausführung dieses Codes im Speicher sein:
Sie können Ihre Zeichenfolgen also jederzeit an eine beliebige Methode übergeben: Niemand wird sie ändern.
GO TO FULL VERSION