一、前言
在程序的設計中,我們普遍的定義一個private變量,然后為這個變量加上get() 、set()方法,那為何不直接定義一個public變量呢?
很多人是這樣回答的:
1、關系到安全性的問題,貌似具有說服力,使用pubilc變量有何不安全呢?使用get()和set()安全在哪里呢?(假如你開發一個類給別人用,人家只要輸入.get就能知道所有的屬性。)
2、有些人說封裝性,但是變量本身就是封裝在類里面的呀!
其實大部分人都是人雲亦雲,說什么安全性和封裝性,只要學java的人都知道這些名詞。
我的理解它的更多的作用是數據輸入輸出的控制。
二、get()和set()作用
(1)、安全性
程者可以選擇只讀或者只寫 或者讀寫都行。
public class Circle { private double radius; private double pai = 3.14; public double getPai() { return pai; } public void setRadius(double radius) { this.radius = radius; } /** * 計算周長 */ public double getC() { return 2*pai*radius; } }
定義了一個圓類,定義了屬性半徑和pai,半徑只提供寫的方法,但不提供讀,而pai只提供讀,但不能寫,並提供了一個計算周長的方法getC。在實際項目中,對一些類的設計時,嚴謹的設計是要考慮哪些類是只讀或是只寫的。
(2)、靈活性
如在定義一個Person類時,設置一個屬性name,當取名字的時候,不只是顯示名字,代碼如下:
public class Person { private String name; public String getName() { return "我的名字叫" + name; } public void setName(String name) { this.name = name; } }
(3)、封裝性
(4)、健壯性
其實java中對外提供訪問方式,就是因為可以在訪問方式中加入邏輯判斷等語句,對訪問的數據進行操作。提高代碼的健壯性。
簡單小栗子:
class Person
{
private int age;
public void setAge(int a)
{
if(a>0 && a<130)
{
age = a;
speak();
}
else
System.out.println("feifa age");
}
public int getAge()
{
return age;
}
private void speak()
{
System.out.println("age="+age);
}
}
class PersonDemo
{
public static void main(String[] args)
{
Person p = new Person();
//p.age = -20;
p.setAge(-40);
//p.speak();
}
}
總結
更多的用法只能在使用中多體會了。
