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 variableist eine Variable, die einen Verweis auf ein Objekt speichert und methodeine 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 variableist eine Variable, die einen Verweis auf ein Objekt speichert und fieldeine Instanzvariable (ein Feld) ist?


2. newBetreiber

Um ein Objekt einer bestimmten Klasse zu erstellen, müssen Sie den newOperator verwenden. Im Allgemeinen sieht die Erstellung eines Objekts wie folgt aus:

Class variable = new Class(arguments);

Dabei Classsteht der Name der Klasse der variableVariablen sowie der Name der Klasse des zu erstellenden Objekts. Und variable ist eine Variable, die einen Verweis auf das erstellte Objekt speichert. Und argumentsist 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 consoleVariable 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)Scannerconsole

In der zweiten Zeile rufen wir die nextInt()Methode für das ScannerObjekt auf und verwenden dabei die consoleVariable, die einen Verweis auf das ScannerObjekt speichert.

Beispiele für die Objekterstellung:

Code Beschreibung
String s = new String("Hello");
Erstellen Sie ein StringObjekt
Scanner console = new Scanner("");
Erstellen Sie ein ScannerObjekt
int[] data = new int[10];
Erstellen Sie einen int[]: einen Container mit 10 intElementen

Die erstellten Objekte werden als Objekte der Klasse oder Instanzen der Klasse bezeichnet, während die Klasse als Klasse des Objekts bezeichnet wird . Beispielsweise sspeichert die Variable einen Verweis auf eine Instanz der StringKlasse.



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 100und 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 PointKlasse:

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 PointKlasse 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 Solutionsieht 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 PointKlasse 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 StringObjekt bleibt nach seiner Erstellung für immer unverändert. Und wie haben die Entwickler von Java das erreicht?

Zunächst werden alle Variablen der StringKlasse ausgeblendet, also deklariert private.

Zweitens können Sie die StringKlasse nicht erben: Ihre Klassendeklaration enthält den finalModifikator.

Drittens und am interessantesten ist, dass alle Methoden der StringKlasse, 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 StringObjekt 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:

Veränderliche vs. unveränderliche Objekte

Sie können Ihre Zeichenfolgen also jederzeit an eine beliebige Methode übergeben: Niemand wird sie ändern.