JAVA类里的属性为什么要求是私有的 一个学生类Student,有属性:学号no,名字:name还有对应的get,set方法。我想问下为什么 属性要求是私有的,或者说当属性是私有属性时,通过get,set方法修改属性值 与当属性是共有属性时,直接修改属性值有什么区别吗? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 设成私有的话,那访问这个成员的入口只有一个,那对这个成员的访问是处于可控状态下的。如果设成公有的话,那对这个属性就是无法控制的。好比,有一根水管上面有一个洞的话,那我们很快地把它堵上,如果有无数个洞,那后果就可想而知了。再者,想问题能想得再深入一层,比如:什么时间给这个成员设了个什么值,我们需要输出一段日志供以后进行分析用。用 set 方法的话,我们能很方便地做到这一点。如果把这个成员设为 public 的话,你该如何做? 单独的一个string name;不能叫属性(property),通常我们把这个叫做域(Field)或成员变量(member variable)。一个域和他的setter/getter加在一起才是一个属性string name;string getName() {...}void setName(string name) {...}有了这样的属性的类,才叫做bean至于通过getter/setter访问属性,和直接访问public的域之间的区别。我想同“我请你付钱”和“我直接从你的钱包里拿钱”之间的区别是一样的。 你这个困惑我以前也有过,后来弄明白了,在这里跟你分享一下如果是public类型的话,就可以在其它的类中这样student.age = -100;要是通过setter方法再进行赋值的话,就可以对传入的数据进行筛选public void setAge(int age) { if(0<age<150){ this.age = age;//加入逻辑,使得数据符合我们的要求 } } 1大家都这么用(以面向对象的封装性为由)2涉及到多线程的时候非常有用解释一下2,如果将变量设为public 我们就不能用synchronized去修饰一个变量,这样就不能保证的安全性,而通过synchronized去修饰它的gettter和setter的话,就能保证数据的安全,还有5楼所说的一些变量不能办的,而方法却可以办到的事 java的三大特点 封装 多态 继承 你所说的就是封装 不是私有的也行呀,只是java的风格就是 get set 更好展现面向对象,封装的特性,不允许用户直接修改其值。 时间格式转换 HttpURLConnection怎么在上传文件的同时把文件的信息也提交到服务器? java内部类问题,请求帮忙谢谢先 java错误 这个jar怎么生成? 恳请各位高手帮我看看 急,急,急呀,怎么把金额大写转换成小写的呀,有那位高手在呀,在线等,高分求助。。。 请教!Java 访问Ladp修改AD用户密码( 不是直接替换) 请教JScrollPane 不自动滚动的问题 Defaut Modifier和protected modifer 是否相同? 大佬们,请教一个问题! log4j配置中的属性值,求解?
string getName() {...}
void setName(string name) {...}有了这样的属性的类,才叫做bean至于通过getter/setter访问属性,和直接访问public的域之间的区别。
我想同“我请你付钱”和“我直接从你的钱包里拿钱”之间的区别是一样的。
要是通过setter方法再进行赋值的话,就可以对传入的数据进行筛选
public void setAge(int age) {
if(0<age<150){
this.age = age;//加入逻辑,使得数据符合我们的要求
}
}
2涉及到多线程的时候非常有用
解释一下2,如果将变量设为public 我们就不能用synchronized去修饰一个变量,这样就不能保证的安全性,
而通过synchronized去修饰它的gettter和setter的话,就能保证数据的安全,还有5楼所说的一些变量不能办的,而方法却可以办到的事