[英]Can understand setters and getters in java
我是java的新手,但我喜歡這種語言,我希望自己變得盡可能好,但我對“課堂”的事情仍然有些困難。 我理解一個類是什么,什么是對象,但我仍然無法理解好的getter和setter
我知道上課了
我無法理解為什么我需要它們,如果我應該在構造函數中編寫它們。
還要指出我已經閱讀了幾篇互聯網文章但是
即使您是像我這樣的初學者,也非常感謝您的幫助^^
編輯:
例如,我應該如何在這里使用setter和getters?
class Demo {
int a=4;
Int b;
public Demo () {
System.println("a is <than b")
};
public int Demo (int b) {
if (a<b)
System.out.println("a is < than b");
else
System.out.println("b is < than a");
}
}
您需要它們以允許您的類的用戶獲取和設置參數。 這允許您的類跟蹤何時設置參數,例如檢查約束,強制一致性,更新其他值,使緩存無效。 封裝還允許您在保持API兼容的同時修改版本之間的類的內部表示。
你問了一個簡單的例子,所以我會給一個。 假設你正在設計一個圓圈類。 圓的特征在於其直徑:
public class Circle {
private double diameter;
public Circle(double diameter) {
this.diameter = diameter;
}
}
調用者可能想知道圓的直徑,因此您添加一個getter:
public class Circle {
private double diameter;
public Circle(double diameter) {
this.diameter = diameter;
}
public double getDiameter() {
return this.diameter;
}
}
您可能還想獲得圓的區域,因此您為該區域添加了一個getter:
public double getArea() {
return Math.PI * (this.diameter / 2) * (this.diameter / 2);
}
然后你意識到使用半徑而不是直徑對於圓的內部方法更容易。 但是你希望保持你班級的所有用戶不變,以避免破壞現有的許多代碼。 因此,您無需更改界面即可更改類的內部:
public class Circle {
private double radius;
public Circle(double diameter) {
this.radius = diameter / 2;
}
public double getArea() {
return Math. PI * radius * radius;
}
public double getDiameter() {
return this.radius * 2;
}
}
最后,您想要更改圓的直徑,因此您添加了一個setter:
public void setDiameter(double diameter) {
this.radius = diameter / 2;
}
但是等一下,直徑為負的圓圈沒有意義,所以你讓方法更安全:
public void setDiameter(double diameter) {
if (diameter <= 0) {
throw new IllegalArgumentException("diameter must be > 0");
}
this.radius = diameter / 2;
}
如果你在施工時預先計算了該區域,setDiameter也必須改變該區域的值:
public class Circle {
private double radius;
private double area;
public Circle(double diameter) {
this.radius = diameter / 2;
this.area = Math. PI * radius * radius;
}
public double getArea() {
return area;
}
public double getDiameter() {
return this.radius / 2;
}
public void setDiameter(double diameter) {
this.radius = diameter / 2;
// the area must also be changed, else the invariants are broken.
this.area = Math. PI * radius * radius;
}
}
吸氣劑和制定者只是方法。 但是它們遵循一種命名約定,使您的代碼易於掌握,並且可以被許多依賴於這些約定的框架使用。
getter或setter只是一個返回類屬性或設置類屬性的函數。 您使用它們的原因是因為通常將類屬性定義為private
,這意味着您只能在類方法中直接引用它們。
getter是一個public
方法(意思是它可以從類本身外部調用),它返回一個私有值。 這允許該屬性保持私有,但仍可在課堂外訪問。
setter是一個設置私有值的public
方法。 正如您可能已經猜到的那樣,這允許該屬性保持私有但仍然被設置在該類之外。
Setter和getter只是用於訪問與類關聯的字段的方法:
class Demo {
int a;
public Demo () { a=4; }
public int getDemo () { return a; }
public void setDemo (int a) { this.a=a; }
}
getter和setter是一種訪問與類關聯的Java Bean屬性的方法。 它只是能夠訪問該類有興趣共享的公共字段的標准方法。 它們由Java Bean規范定義。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.