为什么要setter和getter? 以前面向对象没学好....最近老是在想,既然要设为private为什么还要写个setter来改变它的值呢?为什么不直接把它直接设成public倒省事?呵呵,谢啦 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 用setter来改变数据成员的值时,操作必须由这个对象自己来触发用public来改变数据成员的值时,操作可以由任何对象来触发这是面向对象的封装,总之就是自己的数据成员,只对自己可见,也只有自己才能改变其值,慢慢体会吧! 为了修改访问本类中的private修饰的成员变量。 不对,用个以后你能学到的,MVV 你要从form里面或者可持久化类里面取出来值和你的界面的值对比 你界面的值肯定是改动过的 所以就是要用 form.setusername(可持久化对象.getusername); 对象的封装性,private的只有对象自己才可以访问,其他任何对象不行,包括它的子类和父类。安全性高,其他对象只能通过它的public方法,set,get来获取或设置原对象的private属性。public其他对象可以访问,安全性就不高了。 很简单的道理,别人向你借东西,是你自己去拿给他,还是他自己随便就去拿呢?用setter主要是体现类的封装性,保证了类的安全性 将成员变量用 private 修饰 实现了数据成员的隐藏 也就是面向对象中的简单的封装其他的类不可以随便的修改 private 的值 达到了保护数据完整性的需要 也就增加了代码的可维护性 get和set相对,,一般在一起用 其实怎么说呢,如果你get 和 set 一起用,那个人觉得就没啥意义了。有的时候,定义的变量,只允许读,不允许写,那么就写一个get就可以了,呵呵。 一般set都定义为私有,意思就是只有自己才有权利去修改,而get多为public,含义就在于,获取,得到的方法可以是公共的 开始的时候:private int a;public void setA(int a) { this.a = a;}万一有哪一天,要记录A的改变,那么只需要改为:public void setA(int a) { logBefore(); this.a = a; logAfter();}所有用到setA的地方都不需要改了!!!但试想一下用public int a;的情况? 即使是private也没什么用,有了反射一切皆有可能. 为什么大家对“封装”这么在乎,其实就是个概念而已。最主要的增加getter setter方法的原因有两点:1 统一规范,外界大量使用了apache的commonbean控件,都是直接调用get方法获取属性的,set方法设置的。2 便于修改,必要时可以在get的时候进行trim操作等等,将来修改容易。也可以在get set的时候记记日志之类。 其实如果你不想别人来修改你的值,那么可以只用geter不用seter 这样的话更加安全 JavaBean中就是这样要求的如果你不这样设也可以,但不符合JavaBean在很多要用到JavaBean的地方,你的类就不能用也就是说做不到通用化 个人感觉有两点:1、可以控制读写权限,比如只写getter不写setter,可以做到对外只读,而public不可以。2、便于扩展,当变量被修改时,如果用setter,你可以在变量被修改的同时做一些操作,而如果用public就无法做到。 不仅仅是变量的原因,更多的是一种规范,比如有个属性name,有些开源框架会自动给你调setName方法或getName方法。。 简单的说就是为了面向对象的封装性更好。这是一套javaBean的规范 当你在进行j2ee开发的时候就可以感觉到当用到struts时,他的Form类就是要遵守javaBean规范。只有setter与getter方法才可以把页面的值传给后天进行处理 get,set方法里面是可以封装其他操作的比如void setA(int a){ if(a>10)this.a=10; else this.a=a;} 利用反射机制,一样可以修改private 的属性 这个get set确实很不爽,C#就把它改了 两个简单的GUI小问题 请问:当一类出现异常时,如何只中断该类运行,而不中断整个程序运行? 请问java中的那个类库是用于把查询结果输出到打印机? 如何获取JTable的数据 求做一个矩阵输入的对话框 jar命令如何用,我想把com/ora/jsp/sql下的所有class弄成jar文件 请问在JAVA中我用BigDecimal来计算百分比,百分比之和不等于100% 一个关于循环的问题 安装了java2 sdk后,运行applet程序总是有问题 请教一个session的问题??? (求助)Java Socket通信Read函数阻塞问题 JAVA的发展潜力
用public来改变数据成员的值时,操作可以由任何对象来触发这是面向对象的封装,总之就是自己的数据成员,只对自己可见,也只有自己才能改变其值,慢慢体会吧!
form.setusername(可持久化对象.getusername);
private的只有对象自己才可以访问,其他任何对象不行,包括它的子类和父类。安全性高,其他对象只能通过它的public方法,set,get来获取或设置原对象的private属性。
public其他对象可以访问,安全性就不高了。
实现了数据成员的隐藏 也就是面向对象中的简单的封装
其他的类不可以随便的修改 private 的值 达到了保护数据完整性的需要 也就增加了代码的可维护性
一般在一起用
private int a;public void setA(int a) {
this.a = a;
}万一有哪一天,要记录A的改变,那么只需要改为:
public void setA(int a) {
logBefore();
this.a = a;
logAfter();
}所有用到setA的地方都不需要改了!!!但试想一下用public int a;的情况?
最主要的增加getter setter方法的原因有两点:
1 统一规范,外界大量使用了apache的commonbean控件,都是直接调用get方法获取属性的,set方法设置的。
2 便于修改,必要时可以在get的时候进行trim操作等等,将来修改容易。也可以在get set的时候记记日志之类。
这样的话更加安全
如果你不这样设也可以,但不符合JavaBean
在很多要用到JavaBean的地方,你的类就不能用
也就是说做不到通用化
1、可以控制读写权限,比如只写getter不写setter,可以做到对外只读,而public不可以。
2、便于扩展,当变量被修改时,如果用setter,你可以在变量被修改的同时做一些操作,而如果用public就无法做到。
void setA(int a)
{
if(a>10)this.a=10;
else this.a=a;
}