1. Ein Objekt erstellen

Nun, wir sind beim Erstellen von Objekten angelangt. Das ist Ihnen schon einmal aufgefallen, aber jetzt werden wir dieses Thema genauer analysieren. Es ist eigentlich sehr einfach, Objekte zu erstellen.

Um ein Objekt zu erstellen, müssen Sie den neuen Operator verwenden. Das Erstellen eines Objekts sieht ungefähr so ​​aus:

new Class(arguments)

Nach dem Erstellen eines Objekts speichern wir meist sofort einen Verweis darauf in einer Variablen, die sehr oft denselben Typ wie das erstellte Objekt hat. Das bedeutet, dass Sie beim Erstellen eines Objekts normalerweise Code wie diesen sehen:

Class name = new Class(arguments)

Wo ist die Erstellung einer neuen Variablen und der Code rechts vom Gleichheitszeichen ist die Erstellung eines neuen Objekts vom Typ .Class nameClass

Beispiele:

Code Notiz
Object o = new Object();
Erstellen Sie ein ObjectObjekt
Cat pet = new Cat();
Erstellen Sie ein CatObjekt
Scanner console = new Scanner(System.in)
Erstellen Sie ein ScannerObjekt

Programmierer benennen Variablen häufig nach ihren Klassen, jedoch mit Kleinbuchstaben. Für einen unerfahrenen Programmierer kann dieser Code verwirrend sein:

Code
BufferedReader bufferedReader = new BufferedReader( reader );
Cat cat = new Cat();
PersonInfo personInfo = new PersonInfo()

An diesem Code ist nichts auszusetzen – es handelt sich um den gewöhnlichsten Code, bei dem eine Variable erstellt und dann sofort von einem Objekt desselben Typs initialisiert wird.

Links vom Gleichheitszeichen sehen wir die Erstellung einer Variablen. Rechts die Erstellung eines Objekts. Das ist es.

2. Konstrukteur

Sie haben wahrscheinlich gesehen, dass einige Argumente beim Erstellen eines Objekts häufig übergeben werden. Darüber hinaus werden für einige Objekte Argumente übergeben, für andere jedoch nicht. Wie funktioniert dieser ganze Mechanismus mit Argumenten?

Auch hier ist alles einfach: Jede Klasse verfügt über eine oder mehrere spezielle Methoden, die für die Verarbeitung der beim Erstellen eines Objekts übergebenen Argumente verantwortlich sind. Diese Methoden werden Konstruktoren genannt . Oder wenn wir nur über eines sprechen: den Konstruktor .

Es ist einfach, eine Konstruktormethode von einer regulären Methode zu unterscheiden. Diese Methode weist zwei Unterscheidungsmerkmale auf:

  • Der Name eines Konstruktors ist derselbe wie der Name seiner Klasse (und beginnt mit einem Großbuchstaben).
  • Ein Konstruktor hat keinen Rückgabetyp.

Im Allgemeinen sieht es normalerweise so aus:

modifiers Class(arguments)
{
   Code
}

Beispiel:

Code Notiz
public class Point
{
   public int x;
   public int y;

   Point(int x, int y)
   {
      this.x = x;
      this.y = y;
   }
}
PointKlassenkonstruktor




Point_
public class Solution
{
   public static void main(String[] args)
   {
      Point point = new Point(5, 10);
   }
}




Erstellen Sie ein Objekt der PointKlasse. Der Klassenkonstruktor wird aufgerufen.

Beachten Sie, wie der Konstruktor aussieht: Er hat keinen Rückgabetyp und sein Name ist derselbe wie der Klassenname.

Und noch etwas: Schauen Sie sich den Code im Konstruktor an. Die Parameter des Konstruktors haben die gleichen Namen wie die Felder der Klasse: x und y. Es ist gängige Praxis, die Erfindung neuartiger Parameternamen zu vermeiden. Die Namen sind dieselben wie die der Felder der Klasse. Der Namenskonflikt wird mit dem Schlüsselwort this gelöst.

3. Aufruf eines Konstruktors

Wenn Sie den new- Operator und einen Befehl wie „new Class ( argumente )“ verwenden, um ein neues Objekt zu erstellen, passieren zwei Dinge:

  • Die Java-Maschine erstellt ein Objekt vom Typ Klasse
  • Die Java-Maschine ruft den Konstruktor des Objekts auf und übergibt Ihre Argumente

Als Programmierer können Sie entscheiden, welche Konstruktoren Ihre Klasse haben soll und welche Parameter diese Konstruktoren haben sollen.

Angenommen, Sie beschließen, einen Kurs zu gründen, um Katzen in einem Tierheim im Auge zu behalten. Dann Catkönnte Ihre Klasse so aussehen:

class Cat
{
   public String name;
   public int age;

   public Cat(String name, int age)
   {
      this.name = name;
      this.age = age;
   }
}
Cat cat = new Cat("Whiskers", 2);
Dies ist erlaubt
Cat cat = new Cat("Whiskers");
Dies ist jedoch nicht zulässig. Dieser Code lässt sich nicht kompilieren.
Cat cat = new Cat();
Und das ist nicht erlaubt. Dieser Code lässt sich nicht kompilieren.

Die CatKlasse hat nur einen Konstruktor mit Namens- und Altersparametern. Da es keine anderen Konstruktoren gibt, müssen Sie beim Erstellen eines Objekts den Namen ( name) und das Alter ( ) der Katze als Argumente übergeben . ageDie Übergabe von Argumenten an den Konstruktor ist nicht optional .

4. Mehrere Konstrukteure

Bei Bedarf können Sie der Klasse jedoch mehrere Konstruktoren hinzufügen. Es gibt keine Begrenzung hinsichtlich der Anzahl der Konstruktoren oder ihrer Parameter. Wenn Sie ein Objekt erstellen, wählt der Compiler automatisch den Konstruktor aus, der den Parametern entspricht

Code Notiz
class Cat
{
   public static final int UNKNOWN = -1;
   public String name;
   public int age;

   public Cat(String name, int age)
   {
      this.name = name;
      this.age = age;
   }
   public Cat(String name)
   {
      this.name = name;
      this.age = UNKNOWN; // Unknown
   }
}
Cat cat = new Cat("Whiskers", 2);
Dies ist zulässig: Der erste Konstruktor wird aufgerufen
Cat cat = new Cat("Whiskers");
Dies ist zulässig: Der zweite Konstruktor wird aufgerufen
Cat cat = new Cat();
Dies ist jedoch nicht zulässig. Dieser Code lässt sich nicht kompilieren.

Wir haben beschlossen, der Tatsache Rechnung zu tragen, dass das Alter einer Katze möglicherweise nicht bekannt ist. Um diesen Fall zu bewältigen, haben wir die spezielle Konstante UNKNOWNzusammen mit einem Konstruktor hinzugefügt, der nur einen Parameter hat – den Namen der Katze.

Beachten Sie, dass wir weiterhin beide Variablen in beiden Konstruktoren initialisieren. Wir ersetzen die unbekannten/fehlenden Parameter durch die Konstante UNKNOWN.

Wenn der Altersvariable kein Wert zugewiesen ist, hat sie den Standardwert 0. Schließlich kann ein auf der Straße gefundenes Kätzchen durchaus 0 volle Jahre alt sein. Das bedeutet, dass eine Null in der Altersvariable nicht unbedingt „unbekanntes Alter“ bedeutet.

5. Standardkonstruktor

Wenn Sie möchten, dass Ihre Objekte ohne Parameter instanziiert werden, muss Ihre Klasse einen Konstruktor ohne Argumente deklarieren.

Ein Konstruktor ohne Parameter ist nicht unbedingt ein Konstruktor ohne Code. Ein solcher Konstruktor kann Code enthalten, der Variablen mit Startwerten initialisiert:

Code Notiz
class Cat
{
   public static final int UNKNOWN = -1;
   public String name;
   public int age;

   public Cat(String name, int age)
   {
      this.name = name;
      this.age = age;
   }

   public Cat()
   {
      this.name = "Nameless";
      this.age = UNKNOWN; // Unknown
   }
}
Cat cat = new Cat("Whiskers", 2);
Dies ist zulässig: Der erste Konstruktor wird aufgerufen
Cat cat = new Cat();
Dies ist zulässig: Der zweite Konstruktor wird aufgerufen

Standardkonstruktor

Es gibt einen sehr wichtigen Punkt, den Sie kennen und im Gedächtnis behalten sollten.

Wenn Ihre Klasse keinen Konstruktor deklariert , fügt der Compiler einen Standardkonstruktor hinzu, bei dem es sich um einen Konstruktor ohne Argumente mit dem Modifikator public handelt.

Wenn Ihre Klasse jedoch auch nur einen Konstruktor deklariert , wird kein Standardkonstruktor hinzugefügt , und Sie müssen ihn bei Bedarf selbst hinzufügen.

Code Notiz
class Cat
{
   public String name;
   public int age;
}
Cat cat = new Cat();
Dies ist zulässig: Der Standardkonstruktor wird aufgerufen