Java是一門面向對象的編程語言,具有封裝、繼承、多態等特性。其中封裝是一種重要的特性,它可以將類的內部實現和外部接口進行分離,隱藏對象的具體實現,僅暴露訪問接口。getter和setter是封裝的常用手段。
getter用于獲取一個對象的屬性值,setter用于設置一個對象的屬性值。它們的實現類似,都是通過訪問類的私有變量來進行操作。具體實現如下:
public class Person { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } }
在上述代碼中,getName方法用于獲取name屬性值,setName方法用于設置name屬性值。注意到這里的name屬性是私有變量,外部無法直接訪問,只能通過訪問其getter和setter方法來進行操作。
getter和setter方法的優點是可以保證對象的數據封裝性和安全性。由于屬性是私有變量,外部無法直接訪問,因此可以避免一些不必要的錯誤。同時,如果需要修改屬性的訪問控制方式,只需要修改getter和setter方法即可,不用改變屬性本身。
另外,getter和setter方法可以進行一些附加的操作,例如對屬性進行驗證、計算等,從而實現更精細的控制。例如:
public class Person { private String name; private int age; public String getName() { return name.strip(); } public void setName(String name) { if (name.isBlank()) { throw new IllegalArgumentException("Name cannot be blank"); } this.name = name.strip(); } public int getAge() { return age; } public void setAge(int age) { if (age< 0 || age >200) { throw new IllegalArgumentException("Invalid age value"); } this.age = age; } }
在上述代碼中,getName方法對name屬性進行了修剪操作,去掉前后空格。setName方法對name屬性進行了非空檢查,并且也進行了修剪操作。getAge和setAge方法對age屬性進行了非負數、小于200的檢查。這樣可以進一步確保對象數據的正確性。
總之,getter和setter是Java中封裝特性的常用手段,可以提高對象的封裝性和安全性。同時,它們也可以進行一些有用的附加操作,滿足更精細的控制需求。