业界动态
Java中set/get方法与直接定义public变量问题
2024-11-12 00:37

最近在纠结这个问题,想了一大段时间,进行了各种搜索,网上也众说纷纭!发现这篇还不错/转载

Java中set/get方法与直接定义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)有什么其他的好处的话,指教小弟一下,感激不尽

————感谢各位牛人的指点,以下整理自各位的回复和点评,持续更新—————— 使用get()和set()而不使用public的成员变量,是因为我们设计类的时候要遵循这样的原则: 提供类的人要尽量将类中有什么隐藏起来,只告诉使用者你能做什么 使用类的人不关心你的类中有什么,只关心类提供了什么功能 所以设计类的时候要尽量不提供public的成员变量,最好一个都没有,只提供接口 这条原则其实不仅是代码规范的问题,放到工作中,这就是多项目组或多部门之间合作的准则 这条原则也绝对不是某个独自编码的程序狼一拍脑袋就想出来,这是经历过有组织开发过工作的程序猿才能设计出来的。 ———————————————————————————————————————————————————————————— 这个问题其实很简单,比如 setAge(int age){ if(age<1||age>120) throw new Exception(" 你输入的年龄不合法"); }else{ this.age=age; }

这个是public变量做不到的,安全是其中一个原因,另外楼主你要是学过Hiberante和Spring的话,就会知道 一些类的变量,即使是public的,也必须写上set方法,否则就出错,框架设计的时候就这么要求的

所以别人都这么做的时候,你这么做只会有好处而不会有坏处,这就是标准、

    以上就是本篇文章【Java中set/get方法与直接定义public变量问题】的全部内容了,欢迎阅览 ! 文章地址:http://sicmodule.glev.cn/news/9466.html 
     资讯      企业新闻      行情      企业黄页      同类资讯      首页      网站地图      返回首页 歌乐夫资讯移动站 http://sicmodule.glev.cn/mobile/ , 查看更多   
最新新闻
AI助手入驻APP 手机应用变好用了吗?
AI自然语言大模型(LLM)在全球卷出天际时,移动互联网时代超车的中国“大厂”们则快速将LLM的能力植入到端应用场景中,手机APP
有什么软件可以免费写作?推荐5个AI写作生成器
写作成为了一项不可或缺的技能。并非每个人都有时间和精力进行写作。幸运的是,近年来人工智能技术的发展,为我们提供了一些极具
2024年京东自营入驻条件及费用有哪些?
2019年06月12日田蓬勃300万人民币京东自营及pop入驻,京东入驻,京东国际入驻,pop入驻计算机软件、教育软件的技术服务、技术咨询
旅游时除父母老婆孩子谁也别带,尤其是兄弟妯娌,除非你们想绝交
旅游时除父母老婆孩子谁也别带,尤其是兄弟妯娌,除非你们想绝交和大家分享我的这个经历吧。 前年夏天,我们打算去江南公路旅行
免费AI在线写作工具—提高写作效率的免费AI助手
随着科技的不断发展,人工智能(AI)正逐渐渗透到我们日常生活的方方面面,其中之一就是在线写作。免费AI在线写作工具如今已成为
上海中小幼学生开学:“用DeepSeek赶作业”受关注,他们怎么看?
上海市虹口区体育幼儿园开学迎新。校方 供图2月17日,上海约225万名中小学生和幼儿迎来了春季新学期第一天。为了迎接新年后的首
AI写作助手:永久免费全功能版,满足各种写作需求
AI写作助手:永久免费全功能版,满足各种写作需求在这个信息爆炸的时代,写作已成为多人日常生活和工作的必不可少组成部分。面对
《哪吒2》票房破98亿,非科班出身的导演引发热议
这个春节档,让全世界的人都认识了一个有着黑眼圈的哪吒。截止到现在,《哪吒之魔童闹海》票房已经超过了97亿,全民都在见证破百
奶茶妹妹章泽天狂删微博的背后也许并非心大,苦不苦唯有心知道!
继刘强东免于被起诉向奶茶妹妹道歉之后,当当李国庆为其“开解”的论调被炮轰的硝烟还未散尽,奶茶妹妹章泽天今天就登上了热搜榜
岩山科技:公司今年的研发费用主要用于人工智能领域的研发
(002195.SZ)12月18日在投资者互动平台表示, 公司今年的研发费用主要用于人工智能领域的研发,将为公司未来在人工智能领域所布