Eine Funktion, die den Zugriff auf Klassenfelder und -methoden einschränkt. Es hat die Aufgabe zu verhindern, dass Felder und Methoden für unerwartete Zwecke verwendet werden.
//Beispiel: Benutzerklasse mit Zeichenfolgenname und ganzzahligem Geld im Feld
public class User {
String name;
int money;
public User(String name, int money) {
this.name = name;
this.money = money;
}
}
Der Name und das Geld der Benutzerklasseninstanz können frei geändert werden.
public class Main {
public static void main(String[] args) {
User user = new User("Taro Suzuki", 100);
System.out.println(user.name + "Der Geldbetrag, den Sie haben" + user.money + "Kreis");
//Es kann ein leerer Name sein
user.name = "";
//Der Betrag kann negativ sein
user.money = -1000;
System.out.println(user.name + "Der Geldbetrag, den Sie haben" + user.money + "Kreis");
}
}
Ausführungsergebnis
Taro Suzukis Geld beträgt 100 Yen
Der Geldbetrag, den Sie haben-1000 Yen
Machen Sie die Zugriffsmodifikatoren von Feldern und Methoden privat, damit andere Klassen für die Kapselung nicht geändert werden.
Dadurch wird verhindert, dass es von anderen Klassen geändert wird.
Es ist Standard, das Feld privat und die Methode öffentlich zu machen.
//Beispiel: Benutzerklasse einkapseln
public class User {
private String name;
private int money;
public User(String name, int money) {
this.name = name;
this.money = money;
}
}
Wenn Sie ein Feld privat machen, können Sie den Wert des Felds nicht von anderen Klassen abrufen oder ändern.
public class User {
//Bei dieser Rate der Name der Instanz,Geld kann nicht geändert werden
private String name;
private int money;
public User(String name, int money) {
this.name = name;
this.money = money;
}
}
In einem solchen Fall können Sie den Feldwert sicher von außerhalb der Klasse abrufen und ändern, indem Sie eine Methode definieren, um den Feldwert in der Klasse abzurufen und zu ändern.
Die Methode zum Abrufen des Feldwerts wird als Getter bezeichnet, und die Methode zum Ändern des Felds wird als Setter bezeichnet.
Der Name der Getter-Methode ist im Allgemeinen so etwas wie "Feldname abrufen". Gibt den Wert des Feldes als Rückgabewert zurück.
//Beispiel: Fügen Sie der Benutzerklasse Namen und Geld hinzu
public class User {
private String name;
private int money;
public User(String name, int money) {
this.name = name;
this.money = money;
}
//Name Getter
public String getName() {
return this.name;
}
//Geldbeschaffer
public int getMoney() {
return this.money;
}
}
//Holen Sie sich Namen und Geld mit Getter
public class Main {
public static void main(String[] args) {
User user = new User("Taro Suzuki", 100);
System.out.println(user.getName() + "Der Geldbetrag, den Sie haben" + user.getMoney() + "Kreis");
}
}
Ausführungsergebnis
Taro Suzukis Geld beträgt 100 Yen
Der Name der Setter-Methode ist im Allgemeinen so etwas wie "Set-Feldname". Weisen Sie den als Argument empfangenen Wert dem Wert des Feldes zu.
//Beispiel: Fügen Sie der Benutzerklasse Namens- und Geldsetzer hinzu
public class User {
private String name;
private int money;
public User(String name, int money) {
this.name = name;
this.money = money;
}
//Name Getter
public String getName() {
return this.name;
}
//Namensgeber
public void setName(String name) {
this.name = name;
}
//Geldbeschaffer
public int getMoney() {
return this.money;
}
//Geldsetzer
public void setMoney(int money) {
this.money = money;
}
}
public class Main {
public static void main(String[] args) {
User user = new User("Taro Suzuki", 100);
System.out.println(user.getName() + "Der Geldbetrag, den Sie haben" + user.getMoney() + "Kreis");
user.setName("Taro Sato");
user.setMoney(500);
System.out.println(user.getName() + "Der Geldbetrag, den Sie haben" + user.getMoney() + "Kreis");
}
}
Ausführungsergebnis
Taro Suzukis Geld beträgt 100 Yen
Taro Satos Geld beträgt 500 Yen
Wenn Sie Getter und Setter verwenden, können Sie auch private Felder abrufen und ändern. Ist dies also nicht dasselbe wie öffentliche? Sie mögen denken, aber die Verwendung von Gettern und Setzern hat die folgenden Vorteile.
Sie können nur Getter für ein Feld definieren, andernfalls ist das Feld schreibgeschützt und Sie können den Wert des Felds verwenden, ohne zu verhindern, dass es von anderen Klassen geändert wird.
Wenn nur der Setter für das Feld definiert ist und der Getter nicht definiert ist, ist das Feld schreibgeschützt. (Es gibt nicht viel Verwendung wie diese)
//Beispiel: Deaktivieren Sie den Geldsetzer in der Benutzerklasse, um schreibgeschütztes Geld zu verdienen
public class User {
private String name;
private int money;
public User(String name, int money) {
this.name = name;
this.money = money;
}
//Name Getter
public String getName() {
return this.name;
}
//Namensgeber
public void setName(String name) {
this.name = name;
}
//Geldbeschaffer
public int getMoney() {
return this.money;
}
//Ohne Geldsetzer
//Verhindert, dass Geld aus anderen Klassen gewechselt wird
//
// public void setMoney(int money) {
// this.money = money;
// }
}
Wenn Sie ein Feld später umbenennen und keine Getter oder Setter verwenden, müssen Sie den Code für alle Klassen ändern, die das Feld verwenden.
Wenn Sie jedoch Getter und Setter verwenden, müssen Sie nur den Code in den Getter- und Setter-Methoden ändern.
//Beispiel: Auch wenn der Name der Benutzerklasse in Benutzername geändert wird, muss die Hauptmethode nicht geändert werden.
public class Main {
public static void main(String[] args) {
User user = new User("Taro Suzuki", 100);
System.out.println(user.getName() + "Der Geldbetrag, den Sie haben" + user.getMoney() + "Kreis");
user.setName("Taro Sato");
System.out.println(user.getName() + "Der Geldbetrag, den Sie haben" + user.getMoney() + "Kreis");
}
}
public class User {
private String userName; //name ->Wechseln Sie zu Benutzername
private int money;
public User(String userName, int money) {
this.userName = userName;
this.money = money;
}
//userName getter
public String getName() {
return this.userName;
}
//Benutzername Setter
public void setName(String userName) {
this.userName = userName;
}
//Es sind keine Codeänderungen erforderlich, da die Variable userName in der Hauptmethode nicht angezeigt wird
public class Main {
public static void main(String[] args) {
User user = new User("Taro Suzuki", 100);
System.out.println(user.getName() + "Der Geldbetrag, den Sie haben" + user.getMoney() + "Kreis");
user.setName("Taro Sato");
System.out.println(user.getName() + "Der Geldbetrag, den Sie haben" + user.getMoney() + "Kreis");
}
}
Ausführungsergebnis
Taro Suzukis Geld beträgt 100 Yen
Taro Satos Geld beträgt 100 Yen
Sie können verhindern, dass der Feldwert in einen unerwarteten Wert geändert wird, indem Sie Code hinzufügen, der den Wert des Arguments in der Setter-Methode überprüft.
Beispiel: Überprüfen Sie die korrekte Anzahl von Zeichen, bevor Sie den Benutzernamen der Benutzerklasse ändern
//Benutzername Setter
//Ändern Sie den Benutzernamen, wenn die Argumentzeichenfolge 3 bis 10 Zeichen umfasst
public void setName(String userName) {
if (userName.length() < 3) {
System.out.println("Der Name ist zu kurz");
} else if (userName.length() > 11) {
System.out.println("Der Name ist zu lang");
} else {
this.userName = userName;
System.out.println("Name"" + this.userName + "Gewechselt zu");
}
}
public class Main {
public static void main(String[] args) {
User user = new User("Taro Suzuki", 100);
System.out.println(user.getName() + "Der Geldbetrag, den Sie haben" + user.getMoney() + "Kreis");
user.setName("Suzuki");
user.setName("Ich heiße Taro Suzuki! !!");
user.setName("Taro Sato");
System.out.println(user.getName() + "Der Geldbetrag, den Sie haben" + user.getMoney() + "Kreis");
}
}
Ausführungsergebnis
Taro Suzukis Geld beträgt 100 Yen
Der Name ist zu kurz
Der Name ist zu lang
Der Name wurde in "Taro Sato" geändert.
Taro Satos Geld beträgt 100 Yen
Recommended Posts