關於java中很多人用get()和set()方法,而不用public的一點總結


  在很多程序中,都喜歡定義一個privata變量,然后為這個私有變量加上get(),set()方法。那為什么不直接定義一個public變量呢?這樣做到底有什么好處和意義呢?難道真的僅僅只是為了代碼規范?別逗了,不管你信不信,反正我是不信!帶着這個問題我在網上尋找答案,真是眾說紛紜啊,每個人都能說出一點點道理,但是卻都不足以說服我!(所以在這里做一些總結,和大家分享,我們共同學習,共同進步。如果有什么想法和意見,也歡迎大家提出來,我們一起交流。)其中看到有這樣一種說法:

  “get()和set()方法起到對外界封閉的作用,舉個例子:假如你的褲兜里有很多錢,你肯定不會讓別人都來掏,肯定只有自己能拿到,或者你拿出來給他,set和get就相當與你的手  而你類里的變量就相當與你兜里的錢,對於外面的人來說不知道你類里有什么他就知道調用這個get會給他一個什么東西”

  哇!貌似回答得很專業,很形象,很生動,很有道理啊,差一點我就要膜拜了,但是就在千鈞一發的時刻,我冷靜了下來。TNN的,差點就被你給忽悠了,這個舉例完全沒有回答實質性的問題嘛,會舉例子的人傷不起啊~~~~(>_<)~~~~ 。如果一定要把get()和set()比喻成手的話,也不能比喻成你自己的手,因為get()和set()方法也是public屬性的,誰都可以調用,也就是說任何人的手都還是可以拿到你的錢,那和直接把變量設成public有什么區別嗎?至於對外面的人來說知不知道你類里有什么,這個只是變量命名規范問題而已,和屬性不存在半毛錢關系吧?想讓人看見和更改的變量就設成public,不想讓人看見和更改的就設成privtata,已經很天衣無縫了,為什么還要get(),set()方法呢?

  我又迷茫了,帶着依依不舍的心情,我離開了這位大神,繼續尋找答案。其實每個人都知道get()和set()方法肯定是有好處的,但是有什么好處呢卻又說不清楚,只能乖乖照做了(但是沒有糖吃 哈哈!),而且工具可以幫你自動生成get()和set()方法,一點都不麻煩。但是不能因為不麻煩就傻傻的去做,而不去考慮為什么要這么做,那我們也淪落為了工具!⊙﹏⊙b汗!又偏題了,繼續研究。。。

  其實大多數人講的是這關系到安全性的問題,貌似有點道理,但是卻好象沒什么依據,請問我使用public變量有什么不安全?   使用get(),set()安全在哪里?
  有些人說封裝性,但是變量本身就是封裝在類里面的啊!

  其實大部分人都是人雲亦雲,說什么安全性,封裝性,只要學java的人都會說,沒有一本java的書不提及這些名詞,   其實真正理解的人不多。

  我只知道用get()和set()有一個好處,當輸入.get(.set)   時就能顯示所有的屬性。把所有設置都歸納起來,對於外部的使用都方便而已。假如你開發一個類給別人用,人家只要輸入.get就能知道所有的屬性(天啊!就只有這么一丟丟的好處?我都不好意思跟別人說!)  

  難道get()和set()真的只是一種規范做法而已,完全等效於public變量?

  不!我這種人是絕對不甘心找不到答案就把問題歸結於代碼規范的!

  那我想現在唯一可以讓我信服的答案暫時就是:用get()與set()可以控制變量。

  如果get()和set()方法里面只放一個賦值語句的話,和public變量應該沒什么區別。
  但是設想,如果你的變量score代表的是一個學生的數學成績,理論上,分數只可能是0-100的整數,如果你把將score設為public,不用get()和set(),那么用戶很可能會輸入1-100以外的數字,如果你把將score設為privata,再用setScore()來設置分數,你就完全可以控制這種行為了。

   哈哈 其實幾句話可以把這個問題搞定,但是為了把文章寫得生動一點,廢話多了一點點,請大家見諒!如果大家還知道get()和set()有什么其他的好處的話,指教小弟一下,感激不盡!

  注:本人很厚道,引用網上各位大神的話已用紅色字體標出,如有雷同,純屬緣分!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM