簡體   English   中英

可以在java中理解setter和getter

[英]Can understand setters and getters in java

我是java的新手,但我喜歡這種語言,我希望自己變得盡可能好,但我對“課堂”的事情仍然有些困難。 我理解一個類是什么,什么是對象,但我仍然無法理解好的getter和setter

我知道上課了

  • 實例變量
  • 構造函數
  • 方法
  • 塞特犬和吸氣劑?

我無法理解為什么我需要它們,如果我應該在構造函數中編寫它們。

還要指出我已經閱讀了幾篇互聯網文章但是

  1. 那些是“技術性的”
  2. 他們只是編寫一個沒有實例變量的代碼,構造函數讓我無法理解

即使您是像我這樣的初學者,也非常感謝您的幫助^^

編輯:

例如,我應該如何在這里使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM