JavaRush /Java-Blog /Random-DE /Einführung in Klassen: Schreiben eigener Klassen, Konstru...

Einführung in Klassen: Schreiben eigener Klassen, Konstruktoren

Veröffentlicht in der Gruppe Random-DE
Hallo! Heute werden wir über Klassen in Java sprechen. Man kann sagen, dass Klassen den Kern der Java-Programmierung bilden. Wenn Sie Programmierer werden, besteht Ihre Hauptaufgabe darin, eigene Klassen mit unterschiedlichen Funktionen zu schreiben. Einführung in Klassen: Eigene Klassen schreiben, Konstruktoren - 1Lassen Sie uns herausfinden, was das ist und wie es funktioniert :) Wie Sie bereits wissen, ist Java eine objektorientierte Programmiersprache. Alle Programme bestehen aus Objekten, die irgendwie miteinander verbunden sind. Eine Klasse ist im Wesentlichen eine Vorlage für ein Objekt. Es bestimmt, wie ein Objekt aussehen wird und welche Funktionen es haben wird. Jedes Objekt ist ein Objekt einer Klasse . Schauen wir uns das einfachste Beispiel an:
public class Cat {

    String name;
    int age;

}
Nehmen wir an, wir schreiben ein Programm und in diesem Programm brauchen wir Katzen für etwas (zum Beispiel haben wir eine Tierklinik mit der Möglichkeit, online einen Termin zu vereinbaren). Wir haben eine Klasse erstellt Catund zwei Variablen dafür angegeben – einen String nameund eine Zahl age. Solche Klassenvariablen werden Felder genannt . Im Wesentlichen handelt es sich hierbei um eine Vorlage für alle Katzen, die wir in Zukunft erstellen werden. Jede Katze (Klassenobjekt Cat) hat zwei Variablen – Name und Alter.
public class Cat {

    String name;
    int age;

    public static void main(String[] args) {
        Cat barsik = new Cat();
        barsik.age = 3;
        barsik.name = „Barsik“;

        System.out.println(„Wir haben eine Katze namens“ geschaffen + barsik.name + ", sein Alter - " + barsik.age);
    }

}
So funktioniert das! Wir haben eine Katze erstellt, ihr einen Namen und ein Alter gegeben und alles auf der Konsole ausgegeben. Nichts Kompliziertes :) Der Unterricht beschreibt am häufigsten Objekte und Phänomene der umgebenden Welt. Eine Katze, ein Tisch, eine Person, ein Blitz, eine Buchseite, ein Rad – all dies wird in Ihrem Programm mithilfe separater Klassen erstellt. Schauen wir uns nun die Variablen an, die wir in der Klasse erstellt haben Cat. Diese werden Felder oder Instanzvariablen genannt . Der Name offenbart tatsächlich ihr gesamtes Wesen. Jede Instanz (Objekt) der Klasse verfügt über diese Variablen Cat. Jede Katze, die wir erstellen, hat ihre eigene Variable nameund ihre eigene age. Im Allgemeinen ist es logisch: Bei echten Katzen ist alles beim Alten :) Zusätzlich zu den Instanzvariablen gibt es noch andere – Klassenvariablen oder statische Variablen. Ergänzen wir unser Beispiel:
public class Cat {

    String name;
    int age;

    static int count = 0;

    public static void main(String[] args) {
        Cat barsik = new Cat();
        barsik.age = 3;
        barsik.name = „Barsik“;
        count++;

        Cat vasia = new Cat();
        vasia.age = 5;
        vasia.name = „Wasja“;
        count++;

        System.out.println(„Wir haben eine Katze namens“ geschaffen + barsik.name + ", sein Alter - " + barsik.age);
        System.out.println(„Wir haben eine Katze namens“ geschaffen + vasia.name + ", sein Alter - " + vasia.age);

        System.out.println(„Gesamtzahl der Katzen =“ + count);
    }
}
Konsolenausgabe:

Мы создали кота по имени Барсик, его возраст - 3
Мы создали кота по имени Вася, его возраст - 5
Общее количество котов = 2
Jetzt haben wir eine neue Variable in unserer Klasse – count(Menge). Sie ist für die Zählung der erstellten Katzen verantwortlich. Jedes Mal, wenn wir in der Hauptmethode eine Katze erstellen, erhöhen wir diese Variable um 1. Diese Variable wird durch das Schlüsselwort static bezeichnet . Dies bedeutet, dass es zur Klasse gehört und nicht zu einem bestimmten Objekt der Klasse. Was natürlich logisch ist: Wenn jede Katze einen eigenen Namen haben soll, dann brauchen wir einen Katzenzähler für alle. Das ist genau das, was Sie mit dem Wort „statisch“ erreichen können – countdie gleiche Variable für alle Katzen. Bitte beachten Sie: Wenn wir es auf der Konsole drucken, schreiben wir nicht barsik.countoder vasia.count. Sie gehört weder zu Barsik noch zu Vasya – sie gehört zur ganzen Klasse Cat. Deshalb ist es einfach count. Sie können auch schreiben Cat.count– das wird auch richtig sein. nameDies würde mit der Ausgabe einer Variablen an die Konsole nicht funktionieren:
public class Cat {

    String name;
    int age;

    static int count = 0;

    public static void main(String[] args) {
        Cat barsik = new Cat();
        barsik.age = 3;
        barsik.name = „Barsik“;
        count++;

        System.out.println(„Wir haben eine Katze namens“ geschaffen + name + ", sein Alter - " + barsik.age);

        System.out.println(„Gesamtzahl der Katzen =“ + count);
    }
}
Fehler! nameJede Katze hat ihre eigene. Hier gerät der Compiler in Verwirrung. „Den Namen an die Konsole ausgeben? Wessen Name ist das? :/“

Methoden

Zusätzlich zu Variablen verfügt jede Klasse über Methoden. Wir werden in einem separaten Vortrag ausführlicher darauf eingehen, aber die allgemeinen Punkte sind recht einfach. Methoden sind die Funktionalität Ihrer Klasse; was Objekte dieser Klasse können. Eine der Methoden kennen Sie bereits – das ist die main(). Aber die Methode mainist, wie Sie sich erinnern, statisch – das heißt, sie gehört zur gesamten Klasse (die Logik ist dieselbe wie bei Variablen). Und gewöhnliche, nicht statische Methoden können nur für bestimmte Objekte aufgerufen werden, die wir erstellt haben. Wenn wir beispielsweise eine Klasse für eine Katze schreiben möchten, müssen wir verstehen, welche Funktionen die Katze in unserem Programm haben soll. Auf dieser Grundlage schreiben wir ein paar Methoden dafür:
public class Cat {

    String name;
    int age;

    public void sayMeow() {
        System.out.println("Miau!");
    }

    public void jump() {
        System.out.println(„Springender Galopp!“);
    }

    public static void main(String[] args) {
        Cat barsik = new Cat();
        barsik.age = 3;
        barsik.name = „Barsik“;

        barsik.sayMeow();
        barsik.jump();

    }
}
Nun, unsere Klasse gleicht viel mehr der Beschreibung einer echten Katze! Jetzt haben wir nicht nur eine Katze namens Barsik mit Namen und Alter. Er kann auch miauen und springen! Was für eine Katze gäbe es ohne eine solche „Funktionalität“ :) Wir nehmen ein bestimmtes Objekt - barsikund nennen seine Methoden sayMeow()und jump(). Wir schauen uns die Konsole an:

Мяу!
Прыг-скок!
Eine echte Katze! :) :)

Erstellen Sie Ihre eigenen Klassen. Abstraktion

In Zukunft müssen Sie Ihre eigenen Klassen schreiben. Worauf sollte man beim Verfassen achten? Wenn wir über Variablen sprechen, müssen Sie etwas namens Abstraktion verwenden . Abstraktion ist eines der vier Grundprinzipien der objektorientierten Programmierung. Dabei geht es darum , die wichtigsten und wichtigsten Merkmale eines Objekts hervorzuheben und umgekehrt – sekundäre, unbedeutende Merkmale zu verwerfen. Wir erstellen beispielsweise eine Datei mit Firmenmitarbeitern. Um Mitarbeiterobjekte zu erstellen, haben wir eine Klasse geschrieben Employee. Welche Merkmale sind wichtig, um einen Mitarbeiter in einer Firmenakte zu beschreiben? Vollständiger Name, Geburtsdatum, Sozialversicherungsnummer, Steueridentifikationsnummer. Aber es ist unwahrscheinlich, dass wir seine Größe, Augen- und Haarfarbe auf der Mitarbeiterkarte eines Unternehmens benötigen. Das Unternehmen benötigt diese Informationen nicht. Daher Employeewerden wir für die Klasse die Variablen String name, int ageund festlegen int socialInsuranceNumberund int taxNumberInformationen, die für uns unnötig sind (z. B. Augenfarbe), weglassen und abstrahieren . Wenn wir jedoch für eine Modelagentur eine Datei mit Fotomodellen erstellen, ändert sich die Situation dramatisch. Um ein Model zu beschreiben, sind uns Körpergröße, Augenfarbe und Haarfarbe sehr wichtig, die TIN-Nummer ist für uns jedoch absolut unwichtig. Daher Modelmüssen wir in der Klasse Variablen int height, String hair, erstellen String eyes. So funktioniert Abstraktion, es ist ganz einfach! :) :)

Konstrukteure

Kehren wir zu unserem Katzenbeispiel zurück.
public class Cat {

    String name;
    int age;

    public static void main(String[] args) {
        Cat barsik = new Cat();

        System.out.println(„Seit 2 Stunden passiert etwas im Programm …“);

        barsik.age = 3;
        barsik.name = „Barsik“;

    }
}
Schauen Sie sich diesen Code an und versuchen Sie zu erraten, was mit unserem Programm nicht stimmt. Zwei Stunden lang gab es in unserem Programm eine Katze ohne Namen und Alter! Das ist natürlich völlig falsch. In der Datenbank der Tierklinik sollten keine Katzen ohne Informationen über sie vorhanden sein. Jetzt überlassen wir es dem Programmierer. Wenn er nicht vergisst, seinen Namen und sein Alter anzugeben, ist alles in Ordnung. Wenn er es vergisst, liegt ein Fehler in der Datenbank vor, unbekannte Katzen. Wie können wir dieses Problem lösen? Es ist notwendig, die Schaffung von Katzen ohne Namen und Alter irgendwie zu verbieten. Hier helfen uns Konstruktorfunktionen . Hier ist ein Beispiel:
public class Cat {

    String name;
    int age;

    //Konstruktor für Klasse Cat
    public Cat(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public static void main(String[] args) {

        Cat barsik = new Cat("Barsik", 5);
    }
}
Ein Konstruktor ist im Wesentlichen eine Vorlage für Klassenobjekte. In diesem Fall geben wir an, dass für jedes Objekt catzwei Argumente angegeben werden müssen – eine Zeichenfolge und eine Zahl. Wenn wir jetzt versuchen, eine namenlose Katze zu erschaffen, wird uns das nicht gelingen.
public class Cat {

    String name;
    int age;

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

    public static void main(String[] args) {

        Cat barsik = new Cat(); //Fehler!
    }
}
Da eine Klasse nun über einen Konstruktor verfügt, weiß der Java-Compiler, wie die Objekte aussehen sollen, und lässt nicht zu, dass Objekte ohne die darin angegebenen Argumente erstellt werden. Schauen wir uns nun das Schlüsselwort an this, das Sie im Konstruktor sehen. Auch bei ihm ist alles einfach. „this“ bedeutet auf Englisch „dies, dies“. Das heißt, dieses Wort bezeichnet ein bestimmtes Objekt. Code im Konstruktor
public Cat(String name, int age) {
    this.name = name;
    this.age = age;
}
kann fast wörtlich übersetzt werden: „ Name für diese Katze (die wir erstellen) = das Namensargument , das im Konstruktor angegeben ist. Alter für diese Katze (die wir erstellen) = das Altersargument , das im Konstruktor angegeben ist.“ Nachdem der Konstruktor gestartet wurde, können Sie überprüfen, ob unserer Katze alle erforderlichen Werte zugewiesen wurden:
public class Cat {

    String name;
    int age;

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

    public static void main(String[] args) {

        Cat barsik = new Cat(„Barsik“, 5);
        System.out.println(barsik.name);
        System.out.println(barsik.age);
    }
}
Konsolenausgabe:

Барсик
5
Wenn der Konstruktor abgeschlossen ist:
Cat barsik = new Cat(„Barsik“, 5);
Folgendes geschah tatsächlich im Inneren:
this.name = „Barsik“;
this.age = 5;
Und dem Objekt barsik(es ist this) wurden Werte aus den Konstruktorargumenten zugewiesen. Wenn Sie in der Klasse keine Konstruktoren angeben, wird der Konstruktor tatsächlich ausgelöst ! Aber wie ist das möglich? O_O Tatsache ist, dass in Java alle Klassen einen sogenannten Standardkonstruktor haben . Es hat keine Argumente, wird aber jedes Mal ausgelöst, wenn ein Objekt einer beliebigen Klasse erstellt wird.
public class Cat {

    public static void main(String[] args) {

        Cat barsik = new Cat(); //Hier hat der Standardkonstruktor gearbeitet
    }
}
Auf den ersten Blick fällt das nicht auf. Nun, wir haben ein Objekt erstellt und es erstellt. Wo ist die Arbeit des Designers? Um dies zu sehen, schreiben wir Catmit unseren eigenen Händen einen leeren Konstruktor für die Klasse und geben darin einen Satz an die Konsole aus. Wenn es angezeigt wird, hat der Konstruktor funktioniert.
public class Cat {

    public Cat() {
        System.out.println(„Eine Katze erschaffen!“);
    }

    public static void main(String[] args) {

        Cat barsik = new Cat(); //Hier hat der Standardkonstruktor gearbeitet
    }
}
Konsolenausgabe:

Создали кота!
Hier ist die Bestätigung. Der Standardkonstruktor ist in Ihren Klassen immer unsichtbar vorhanden. Aber Sie müssen noch eine weitere Funktion kennen. Der Standardkonstruktor verschwindet aus der Klasse, wenn Sie einen Konstruktor mit Argumenten erstellen. Den Beweis dafür haben wir tatsächlich bereits oben gesehen. Hier in diesem Code:
public class Cat {

    String name;
    int age;

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

    public static void main(String[] args) {

        Cat barsik = new Cat(); //Fehler!
    }
}
Wir konnten keine Katze ohne Namen und Alter erstellen, da wir einen Konstruktor für CatString + Nummer definiert haben. Der Standardkonstruktor verschwand unmittelbar danach aus der Klasse. Denken Sie daher unbedingt daran: Wenn Sie in Ihrer Klasse mehrere Konstruktoren benötigen, einschließlich eines leeren, müssen Sie diesen separat erstellen . Unsere Tierklinik möchte zum Beispiel Gutes tun und obdachlosen Katzen helfen, deren Namen und Alter wir nicht kennen. Dann sollte unser Code so aussehen:
public class Cat {

    String name;
    int age;

    //für Hauskatzen
    public Cat(String name, int age) {
        this.name = name;
        this.age = age;
    }

    //für Straßenkatzen
    public Cat() {
    }

    public static void main(String[] args) {

        Cat barsik = new Cat("Barsik", 5);
        Cat streetCat = new Cat();
    }
}
Nachdem wir nun explizit einen Standardkonstruktor angegeben haben, können wir beide Arten von Katzen erstellen. Im Konstruktor können Sie Werte explizit zuweisen und nicht nur aus den Argumenten übernehmen. Beispielsweise können wir alle Straßenkatzen in einer Datenbank unter dem Namen „Straßenkatzennummer…“ erfassen:
public class Cat {

    String name;
    int age;

    static int count = 0;

    public Cat() {
        count++;
        this.name = „Straßenkatzennummer“ + count;
    }

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

    public static void main(String[] args) {

        Cat streetCat1 = new Cat();
        Cat streetCat2 = new Cat();
        System.out.println(streetCat1.name);
        System.out.println(streetCat2.name);
    }
}
Wir haben eine Variable count, die einen Straßenkatzenzähler darstellt. Jedes Mal, wenn wir den Standardkonstruktor ausführen, erhöhen wir ihn um 1 und weisen diese Zahl als Namen der Katze zu. Für einen Konstruktor ist die Reihenfolge der Argumente sehr wichtig. Lassen Sie uns die Namens- und Altersargumente in unserem Konstruktor vertauschen.
public class Cat {

    String name;
    int age;

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

    public static void main(String[] args) {

        Cat barsik = new Cat(„Barsik“, 10); //Fehler!
    }
}
Fehler! Der Konstruktor beschreibt klar: Beim Erstellen eines Objekts müssen ihm eine Zahl und eine Zeichenfolge in dieser ReihenfolgeCat übergeben werden . Deshalb funktioniert unser Code nicht. Denken Sie unbedingt daran und denken Sie daran, wenn Sie Ihre eigenen Klassen erstellen:
public Cat(String name, int age) {
    this.name = name;
    this.age = age;
}

public Cat(int age, String name) {
    this.age = age;
    this.name = name;
}
Das sind zwei völlig unterschiedliche Designer! Lösen Sie nun ein paar Aufgaben, um das Material zu festigen :)
  • Museum für Antiquitäten.
Ihre Aufgabe ist es, die Klasse zu gestalten Artifact. Die im Museum aufbewahrten Artefakte sind in drei Arten unterteilt. Über die erste ist außer der vom Museum zugewiesenen Seriennummer (zum Beispiel: 212121) nichts bekannt. Beim zweiten geht es darum, welche Seriennummer und die Kultur, durch die es geschaffen wurde, bekannt sind (zum Beispiel: 212121, „Azteken“). Bei der dritten Art geht es um die Angabe der Seriennummer, die Kultur, in der sie geschaffen wurde, und das genaue Alter ihrer Entstehung (zum Beispiel: 212121, „Azteken“, 12). Erstellen Sie eine Klasse Artifact, die die im Museum aufbewahrten Antiquitäten beschreibt, und schreiben Sie die erforderliche Anzahl von Konstruktoren dafür. Erstellen Sie in der Methode main()ein Artefakt jedes Typs.
public class Artifact {

    public static void main(String[] args) {
    }
}
  • Online-Dating
Sie erstellen eine Benutzerdatenbank für eine Dating-Site. Das Problem ist jedoch, dass Sie vergessen haben, in welcher Reihenfolge sie angegeben werden müssen, und dass Sie die technischen Spezifikationen nicht zur Hand haben. Entwerfen Sie eine Klasse Usermit den Feldern Name ( String), Alter ( short) und Größe ( int). Erstellen Sie dafür die erforderliche Anzahl an Konstruktoren, damit Name, Alter und Größe in beliebiger Reihenfolge angegeben werden können.
public class User {

    String name;
    short age;
    int height;

    public static void main(String[] args) {

    }
}
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION