社区
Java SE
帖子详情
讨论,为什么很多人都不定义public变量? 而要另外写get,set函数来设置private变量的值
highscore2
2007-01-08 12:25:10
我发现很多程序,都喜欢在class中定义private变量,但又另外提供get,set,函数.
我认为这样写太麻烦,还不用直接定义public变量. 访问的时候直接 class实例.变量名, 请问这样做好吗?
...全文
2585
74
打赏
收藏
讨论,为什么很多人都不定义public变量? 而要另外写get,set函数来设置private变量的值
我发现很多程序,都喜欢在class中定义private变量,但又另外提供get,set,函数. 我认为这样写太麻烦,还不用直接定义public变量. 访问的时候直接 class实例.变量名, 请问这样做好吗?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
74 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
icyblood198999
2012-02-21
打赏
举报
回复
感谢Schemer,受益匪浅!
ya654277yo
2012-01-14
打赏
举报
回复
有些加get set 有些不必要的不加,看实际代码逻辑,就这样,
一明惊人-
2011-12-09
打赏
举报
回复
如果是在Android开发,或者在内存、性能敏感的嵌入式设备上,哪个更好呢?
denbes
2007-01-11
打赏
举报
回复
受益匪浅
hyqryq
2007-01-09
打赏
举报
回复
cxzhq2002(清风) ( ) 信誉:100 Blog 2007-1-8 19:00:36 得分: 0
数据与行为相分离
=====================================================================
没错,这个是OO的基本概念。顺便说一句,在一些对面向对象支持更好的语言中,例如Ruby,数据天生就是私有的,只能通过接口方法去访问。
另外,很多IDE都支持对变量自动产生getter和setter方法,你只需要点几下鼠标,例如Eclipse.
luyang1016
2007-01-09
打赏
举报
回复
jf
shine333
2007-01-09
打赏
举报
回复
?
!
IMHO,对这种不会提升任何速度(编码get/set都自动生成、编译复杂度提升、运行速度不会有大的帮助)的东西不用也罢
hyqryq
2007-01-09
打赏
举报
回复
DarknessTM(我的缘分在哪里?) ( ) 信誉:100 Blog 2007-01-09 11:42:27 得分: 0
如果只是把这个class当作一种组合的数据类型,完全可以直接使用public变量,使用get/set说明了这个class不止是储存数据这么简单,还可能进行一些操作,而这些操作会影响或使用到这个变量。
一概否定public形式的变量访问方式就和一概否定goto在程序编写中的出现一样可笑
===========================================================================
可笑吗? 许多对面向对象支持更好的语言就是这样做的.例如Ruby,实例变量都是私有的,只能通过接口方法访问。
rehte
2007-01-09
打赏
举报
回复
告诉大家一个好消息:Java 7准备支持property了,比如:
public property String name;
public readonly property String name;
等等。
看看javalobby上的讨论:
http://www.javalobby.org/java/forums/t88090.html
这是java 7 feature预览稿:
http://blogs.sun.com/dannycoward/resource/Java7Overview_Prague_JUG.pdf
DarknessTM
2007-01-09
打赏
举报
回复
如果只是把这个class当作一种组合的数据类型,完全可以直接使用public变量,使用get/set说明了这个class不止是储存数据这么简单,还可能进行一些操作,而这些操作会影响或使用到这个变量。
一概否定public形式的变量访问方式就和一概否定goto在程序编写中的出现一样可笑
shine333
2007-01-09
打赏
举报
回复
还有,如果以“学院派”的角度,去思考问题,我们都应该用obj.foo()而不是obj.x = ...这样的方式,x是obj自己的属性,就应当由其自身维护,而不是我们来负责维护,
此外,如果从代码维护的角度obj.foo()也比obj.x好,考虑一下,假如需要对这部分功能进行改进,或者重写,写foo()调用的方式,你只需要维护一处代码或者使用override,而obj.x的方式,就需要维护N处
z_lping
2007-01-09
打赏
举报
回复
vitren兄弟,俺的例子是Integer Division而已。
shine333
2007-01-09
打赏
举报
回复
z_lping(Schemer)纠正一点.现在的java中,0可以作分母.
java 5.0中
java.lang.Double:
line:38:
public static final double POSITIVE_INFINITY = 1.0 / 0.0;
line:45:
public static final double NEGATIVE_INFINITY = -1.0 / 0.0;
line:52:
public static final double NaN = 0.0d / 0.0;
你也可以在5.0的环境下试试sysout(10 / 0)看看输出的是什么.
=======================
since jdk 1.0,所以任何JDK版本都可以
ww_goddess
2007-01-09
打赏
举报
回复
其实是对于某些private型的数据,不能让随便什么类都能修改,如果某些类想修改,只有通过set方法来实现.如果程序是你一个人写的话,你不会有什么失误,但是如果是一个团队共同开发的程序,你定义了一个public,可能被别人误用,造成损失.
highscore2
2007-01-09
打赏
举报
回复
(其实我也不能完全弄清.但我已经看到了这么作的必要性.)
=======================================================
谢谢了,我也似乎到这个必要性了. 我希望不是一味的跟着别人做,我希望知道这样做的好处,不求全懂,至少知道部分也好,所以才问这些问题.
vitren
2007-01-09
打赏
举报
回复
z_lping(Schemer)纠正一点.现在的java中,0可以作分母.
java 5.0中
java.lang.Double:
line:38:
public static final double POSITIVE_INFINITY = 1.0 / 0.0;
line:45:
public static final double NEGATIVE_INFINITY = -1.0 / 0.0;
line:52:
public static final double NaN = 0.0d / 0.0;
你也可以在5.0的环境下试试sysout(10 / 0)看看输出的是什么.
以上是细节问题.
回lz.set/get方法看似只是一个规范.但规范有规范的目的.你这里没有用.但是对实力化你的类,调用你的方法/属性的类很可能是必要的.set/get方法做规范的目的其实不是那么简单.上面很多人已经说了.但是可能你现在还没有体验到.面向对象的基本思想,封装性,安全性,稳定性,可扩展性,是否便于维护等等等等.需要完全弄清楚这些不是一天的事情.也不会一个帖子的问题.(其实我也不能完全弄清.但我已经看到了这么作的必要性.)其实很多时候不需要马上弄清楚问题的根源.不然等到你能用java开发出东西的时候大概已经很多年过去了.电脑上的任何问题如果一定要追到根源,只能用机器码解释.这完全没有必要.你想要的答案在将来你的应用中会慢慢了解.
一个朋友的话:"程序员是熟练工种,不是技术工种."有一定道理.
shine333
2007-01-09
打赏
举报
回复
TO lz,JavaBean的规范看过了没有,我们平时用到的90%的framework/library都会用到javabean。比如JSP中用到的useBean,TagLib,Struts中用到的ActionForm、Beanutils、Degister。这些基于JavaBean的,只认get/set/isXxx(即使class里面根本就没有xxx)
highscore2
2007-01-09
打赏
举报
回复
有网友提出了 "数据与行为相分离" 观点,很好! 其实这观点是前人的总结, 我们跟着做不会有错,但要你说了同具体这样做有什么好处? 我想没多少人能说出来.
highscore2
2007-01-09
打赏
举报
回复
特别谢谢 IFindit 及 Dan1980!
规范做法其实我懂,所有写java程序的人都懂,但我们应该要思考为什么要这样做? 这样做的好处是什么? 你不去思考就成了机器人吧, 都老是跟着别人去做,那别指望能有创新思想了.
IFindit
2007-01-09
打赏
举报
回复
z_lping(Schemer) ,Dan1980() 两位用鲜明的实例证明了封装性的好处所在
加载更多回复(54)
关于java中
很多
人用get()和
set
()方法,而不用
public
的一点总结
在
很多
程序中,都喜欢
定义
一个privata
变量
,然后为这个私有
变量
加上get(),
set
()方法。那为什么不直接
定义
一个
public
变量
呢?这样做到底有什么好处和意义呢?难道真的仅仅只是为了代码规范?别逗了,不管你信不信,反正我是不信!带着这个问题我在网上寻找答案,真是众说纷纭啊,每个人都能说出一点点道理,但是却都不足以说服我!(所以在这里做一些总结,和大家分享,我们共同学习,共同进步。如果有什么
[Unity&对象]怎么理解
变量
public
还是
private
,还是使用get
set
方法
定义
怎么理解
变量
public
还是
private
,还是使用get
set
方法
定义
private
变量
只能被自己的 类 调用。
public
变量
可以被其他 类调用。 get
set
方法的本质是,为了让 操作代码 的设计师 、程序员明白 这个
变量
的使用 条件,和应用的 环境。便于工作 ,优化代码。 在参考资料1中 第30个技巧,提到 可以 使
Java里的get()方法和
set
()方法-获取和
设置
私有成员
变量
值
-保护数据安全性
一、get()方法和
set
()方法的作用 get()方法是用来获取指定的私有成员
变量
的
值
set
()方法是用来
设置
指定的私有成员
变量
的
值
为什么要使用这样的方法来获取和
设置
私有成员
变量
的
值
???而不是使用:对象.成员
变量
=新
值
的方法。 因为当成员
变量
使用了
private
修饰后,该数据成为了私有的,那么其他类是不能调用该私有成员
变量
的,也就不能获取和
设置
该私有成员
变量
的
值
了。——该机制隐藏了代码实现细节,体现了数据的封装性,保证了代码的安全,同时也提升了数据的安全性。 二、get()方法和...
C++获取类中的
变量
的方法(
变量
公有化【
public
变量
】&&使用
set
和get
函数
)
问题:C++获取类中的
变量
的方法(
变量
公有化【
public
变量
】&&使用
set
和get
函数
)本程序通过VC++ 6.0编译与测试,程序中Point类中的x,y均为私有化
变量
,对应主
函数
中的
set
与get
函数
,z
变量
为共有
变量
和直接访问,具体代码如下:#include <iostream> using namespace std; class Point { pri...
Get/
Set
函数
和
public
成员
变量
Get/
Set
函数
和
public
成员
变量
在我们设计类的时候,对于类的数据成员,我们可以有三种方法来让类外的
函数
或者其他类来访问,他们分别是: 把它
设置
成
public
数据成员 把要访问它的
函数
或者类
设置
为当前类的友元 创建一个
set
函数
来修改该成员数据和一个get
函数
来读取这个成员。 三种方法各有优缺点。本文试图根据自己经验对三种方式进行分析。公共
Java SE
62,617
社区成员
307,307
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章