Java-Class Instance Generation Part.3

Informationen zum Schreiben eines Artikels

Ich beziehe mich nicht auf Klassenfolien, daher denke ich, dass dies aus einer anderen Perspektive erklärt wird. Vielleicht sage ich es (sollte).

Bitte lassen Sie mich wissen, wenn Sie einen Fehler machen können, da es sich um eine Ad-lib handelt!

Es besteht aus 4 Teilen

Teil 1 Erstellen wir eine Instanz Teil 2 Reiniger mit Konstruktor Teil 3 Kontrollieren Sie den Zugriff und begrenzen Sie eingehende Werte ← Imakoko Teil.4 Versuchen Sie, Klassenvariablen / -methoden zu verwenden

Leine

Teil 2 implementierte den Konstruktor. Ein Konstruktor ist eine spezielle Methode, die beim Erstellen einer Instanz nur einmal ausgeführt wird. Der Konstruktor kann implementiert werden, indem der Name der Klasse geschrieben wird.

DigitalStudentCard.java


class DigitalStudentCard{
  //Schülernummer
  int num;

  //Name
  String name;

  //Konstrukteur
  DigitalStudentCard(int num, String name){
    //Argument num zu Instanznummer(this.num)Ersatz für
    this.num = num;

    //Ebenfalls
    this.name = name;
  }

  //Methode für die Ausgabe (Selbsteinführung erhalten)
  String getSelfIntroduction(){
    return "Schülernummer: " + num + "Name: " + name);
  }
}

Der Konstruktor ist fast identisch mit der Methode, sodass Sie ihn auf ähnliche Weise schreiben können.

Lassen Sie uns den Zugang einschränken!

Wenn ich von Zugriffsbeschränkungen höre, denke ich, dass etwas gebunden sein sollte ... </ b>. Es ist wie es ist. Sie können den Zugriff auf Variablen, Methoden und Konstruktoren einschränken, indem Sie "privat" oder "öffentlich" hinzufügen! !!

Ich nenne diese Schlüsselwörter manchmal Zugriffsmodifikatoren </ b> Die meisten Leute sagen: "Warum machst du es nicht privat?" Oder "Ist es nicht öffentlich?"

Die Arten solcher Zugriffsmodifikatoren sind wie folgt.

Qualifikation Wirksamkeit
public Kann von überall zugegriffen werden
(Schreiben Sie nichts) Es kann von überall im Paket zugegriffen werden. (Ich werde es eines Tages erklären)
protected extendsOderimplementsEs kann nur zugegriffen werden, wenn eine Eltern-Kind-Beziehung zu besteht. (Ich werde es eines Tages erklären)
private Auf diese kann nur von dieser Klasse oder Instanz aus zugegriffen werden.

ich werde schreiben

Fügen wir den "privaten" Zugriffsmodifikator zu "num" und "name" hinzu.

DigitalStudentCard.java


class DigitalStudentCard{
  //Schülernummer
  private int num;

  //Name
  private String name;

  //Konstrukteur
  DigitalStudentCard(int num, String name){
    //Argument num zu Instanznummer(this.num)Ersatz für
    this.num = num;

    //Ebenfalls
    this.name = name;
  }

  //Methode für die Ausgabe (Selbsteinführung erhalten)
  String getSelfIntroduction(){
    return "Schülernummer: " + num + "Name: " + name);
  }
}

Schreiben Sie, um dies zu verwenden.

class UseClass{
  public static void main(String[] args){

    //Instanzgenerierung
    DigitalStudentCardtanaka = new DigitalStudentCard(118114, "Kakuei Tanaka");

    //Erstellen Sie eine andere Instanz
    DigitalStudentCardnoguchi = new DigitalStudentCard(118514, "Hideyo Noguchi");

    //Ausgabe
    System.out.println(tanaka.getSelfIntroduction);
        //Schülernummer:118114 Name:Kakuei Tanaka

    System.out.println(noguchi.getSelfIntroduction);
        //Schülernummer:118514 Name:Hideyo Noguchi
  }
}

In diesem Beispiel ändert sich nichts, aber der folgende Schreibstil ist NG.

tanaka.num = 114514;
    //Kompilierungsfehler

tanaka.name = "Kakuei Tanaka";
    //Kompilierungsfehler

Da "num" und "name" durch den "privaten" Zugriffsmodifikator eingeschränkt sind, so dass nur innerhalb der Instanz auf sie zugegriffen werden kann, kann nicht auf sie zugegriffen werden.

Warum brauchst du so einen Ärger?

"Es ist praktisch, wenn Sie von überall darauf zugreifen können, und es ist einfach."

Natürlich scheint es besser zu sein, ohne Einschränkungen so zu schreiben, wie Sie es möchten. Aber Sie können tun, was Sie wollen </ b> klingt nicht so?

damit. Es ist gefährlich. (Weniger Wortschatz)

Wenn dies Magimons Studentenausweis ist, wäre es unwiderstehlich, die Schulregistrierungsnummer oder den Namen ohne Erlaubnis neu zu schreiben. Selbst wenn Sie es ändern, sollten Regeln wie Nummern und Namen vorhanden sein, denen Sie folgen möchten.

Implementieren wir eine Methode namens Getter / Setter </ b>, um eine solche Regel zu erstellen.

Machen Sie einen Getter / Setter

Bitte seien Sie versichert, dass das bloße Sagen von "es heißt so" nicht bedeutet, eine spezielle Methode </ b> zu schreiben. So habe ich es oft gesehen.

Es ist sicher, Getter / Setter "get" () "und" set "()" zu nennen.

DigitalStudentCard.java


class DigitalStudentCard{
  //Schülernummer
  private int num;

  //Name
  private String name;

  //Konstrukteur
  DigitalStudentCard(int num, String name){  
    //Ich habe es so oft gemacht, dass ich einen Getter benutze
    setNum(num);

    //Ebenfalls
    setName(name);
  }

  //Methode für die Ausgabe (Selbsteinführung erhalten)
  String getSelfIntroduction(){
    return "Schülernummer: " + num + "Name: " + name);
  }

  // -----hinzufügen-----

  //Methode, die nur num (getter) zurückgibt
  int getNum(){
    return num;
  }

  //Methode, die nur den Namen zurückgibt (Getter)
  String getName(){
    return name;
  }

  //Methode zum Einstellen von num (Setter)
  void setNum(int number){
    //Verwenden Sie als Beispiel die Schulregistrierungsnummer unserer Schule
    //Irgendwie werde ich älter
    int year = number/1000;

    //Verbieten Sie Werte über 119
    if(year > 118){
      year = 118;
    }

    //Extrahieren Sie nur zahlenähnliche Cousins
    number = number%1000;

    //Ich möchte es dreistellig anpassen. Wenn der Wert 999 überschreitet, setzen Sie ihn auf 999.
    if(number > 999){
      number = 999;
    }

    //Bleib und kehre zurück
    return year*1000 + number;
  }

  //Methode zum Festlegen des Namens (Setter)
  void setName(String name){
    this.name = name;
  }
}

Nennen wir diese Methoden.

class UseClass{
  public static void main(String[] args){
    //Instanzgenerierung
    DigitalStudentCardtanaka = new DigitalStudentCard(118114, "Kakuei Tanaka");

    //Zeigen Sie den Wert der Variablen num an
    System.out.println(tanaka.getNum());
        // >> 118114

    //Zeigen Sie den Wert der Namensvariablen an
    System.out.println(tanaka.getName());
        //Kakuei Tanaka

    //Ändern Sie den Wert der Variablen num
    tanaka.setNum(200, 1000);
        //Versuchen Sie absichtlich, einen großen Wert einzugeben

    //Ändern Sie den Wert der Namensvariablen
    tanaka.setName("Tanaka Kakuei");
        //Mir fiel nichts ein, also was war es?


    System.out.println(tanaka.getNum());
        // 118999
    System.out.println(tanaka.getName());
        //Tanaka Kakuei
  }
}

Auf diese Weise möchte ich nur "Nonne"! Ich will nur "Name"! Sie können dies mit getNum () oder getName () erledigen.

Wenn Sie Ihre Schulregistrierungsnummer aufgrund unvorhergesehener Umstände ändern möchten oder wenn Sie heiraten und sich Ihr Nachname ändert, können Sie sie mit "setNum ()" oder "setName ()" festlegen.

Es wäre ein Problem, wenn Sie einen unordentlichen Wert für die Schulregistrierungsnummer eingeben könnten. Daher haben wir einen Mechanismus erstellt, um zu überprüfen, ob es sich um einen geeigneten Wert handelt. Da der Wert, der in die Variable "num" eingegeben werden kann, begrenzt werden kann, kann vermieden werden, dass eine gesetzlose Zone entsteht.

Da "setNum ()" und "setName ()" auch im Konstruktor verwendet werden, war es möglich, den Zuweisungsprozess nur an einer Stelle durchzuführen. Selbst wenn später ein Fehler auftritt, müssen Sie auf diese Weise nur eine Stelle überprüfen, damit es einfacher ist, ihn zu beheben! !!

Apropos

Zugriffsmodifikatoren können auch für Methoden und Konstruktoren verwendet werden.

private void setName(String name){
  //Etwas zu verarbeiten
}

Wie bei Variablen ist der Zugriffsbereich auf diese Klasseninstanz beschränkt.

nächstes Mal

Als nächstes greifen wir mit Klassenvariablen und Klassenmethoden von verschiedenen Stellen aus auf dasselbe Objekt zu! Weiter → Teil.4 Klassenvariablen / -methoden verwenden