公有字段和属性的疑问 在面向对象中公有字段是不推荐使用了,而改用私有字段和getX(),setX().但一个get,set都提供的属性也是可以任意更改的,这和直接使用公有字段有什么差别?用起来还麻烦.当然这里的get,set都简单地返回一个私有变量的值,其他情况不成立 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 简单的说,当某个似有字段需要变一下,比如变成一个计算结果,这时候修改get方法,可以对这个类的使用者隐藏你的修改,使用者察觉不到你对类进行了修改,他也不需要修改他的代码。set就更好理解了,在必要的时候,你可以验证一下类使用者赋值的有效性,这个共有字段很难做到。一句话解释就是要封装。 建议lz看一下javaBean的规范以及优缺点的相关资料。你就会明白了 http://topic.csdn.net/u/20090927/19/74708b05-cafa-4200-990e-0d2f5fd7f990.html最佳答案别说的那么专业化了,理解都要半天。就这么理解吧,面向对象中,想对类的成员变量设置访问一些权限,于是,就将该字段设置为private的,这样别的类就不能访问了,然后在该内定义两个方法,一个专门用于获取,一个用于修改,这样,在你不想让别人乱动该字段的时候,就在该方法内写一些限制条件。而为了规范起见(团队开发需要嘛),就根据人家老外的习惯,将方法名设置为set+字段名,get+字段名(名字乱改没问题),既然规范了,那就是别人都叫这名了,于是,有些框架给对象赋值就有方法了,方法名称由get或set开始的又有private变量名的,就找出来调用。hibernate1框架就这样弄得,至于后面的版本是不是这样就不大清楚了。JavaBean就是一个JAVA类,既然是JAVA类就不需要什么组件了,这玩意直接深入到虚拟机了的 非常经典的问题。private当然比其他级别的modifier要好,主要是出于encapsulate的考虑。譬如说有个private int[] values;public void setValues(int[] v){ this.values=v;}有一天你要把values改为private List values;那只要改setValues的实现:public void setValues(int[] v){ this.values=Arrays.asList(v);}无论这个类的客户是调用者还是继承者都不必修改代码。但是如果我们一开始把values定义为public int[] values;....那就糟糕了。如果有兴趣看看质量高的代码就会发现这些代码很少有public成员变量,甚至protected也很少。 存储ResultSet 问题 请帮忙一个小小的问题 为什么要用synchronized?不用synchronized你的对象中数据被修改后,无法使其他线程更新。 winrar不带路径的压缩文件 javacsript中如何测试本地文件的存在性 初学者请教连接SQLServer2000数据库问题 外国一家公司的一道超难推理面试题,如果你做对了,直接录取拿5K以上的工资不成问题!!!!!! Java入门者遇到一个小的程序问题 谁能详细讲一下接口? 请教一个关于JSWDK 的问题 SchedulerSession 问一个简单的程序
set就更好理解了,在必要的时候,你可以验证一下类使用者赋值的有效性,这个共有字段很难做到。一句话解释就是要封装。
就这么理解吧,面向对象中,想对类的成员变量设置访问一些权限,于是,就将该字段设置为private的,这样别的类就不能访问了,然后在该内定义两个方法,一个专门用于获取,一个用于修改,这样,在你不想让别人乱动该字段的时候,就在该方法内写一些限制条件。
而为了规范起见(团队开发需要嘛),就根据人家老外的习惯,将方法名设置为set+字段名,get+字段名(名字乱改没问题),既然规范了,那就是别人都叫这名了,于是,有些框架给对象赋值就有方法了,方法名称由get或set开始的又有private变量名的,就找出来调用。hibernate1框架就这样弄得,至于后面的版本是不是这样就不大清楚了。
JavaBean就是一个JAVA类,既然是JAVA类就不需要什么组件了,这玩意直接深入到虚拟机了的
private int[] values;
public void setValues(int[] v){
this.values=v;
}有一天你要把values改为
private List values;
那只要改setValues的实现:
public void setValues(int[] v){
this.values=Arrays.asList(v);
}无论这个类的客户是调用者还是继承者都不必修改代码。
但是如果我们一开始把values定义为public int[] values;....那就糟糕了。如果有兴趣看看质量高的代码就会发现这些代码很少有public成员变量,甚至protected也很少。