今天终于明白了为什么有get和set方法。使用get和set方法是为了程序的封装,为了其它的类可以使用(设置和获取)该类的私有方法。虽然明白了,但是还是不知道到底有什么好处。为什么要封装?使用get和set方法,把简单的事情搞的很复杂了。直接把变量定义为public不就可以了吗?为啥要封装呢?
解决方案 »
- 问大家一个用apache poi读取excel文件的问题
- jsp中树状结构如何写?
- 一道算法题
- js 报没有权限错误
- 使用ireport导出excel时的怪问题:提示文件丢失或损坏
- 我跳过service层直接调用dao层,hibernatedaotemplate能自动关闭session么?
- struts2 数字格式化问题
- 提到javaEE就会提到MVC,谈到MVC就会说SSH,但是很多高手又说SSH性能有争议
- hibernate联合查询问题
- 急!急!急!!!我用URLConnection获取ftp服务器的信息时,可以获取资源类型,但不能获取资源的大小.请各位高手帮忙
- HTTP Status 500 - Cannot create a session after the response has been committed
- JPA控制数据库里面字段顺序问题
通过get set方法,你可以让把变量私有化,只暴露方法。
比如你想外部类只能get,只允许类内部赋值,那么只开放get方法就ok了,封装性考虑
比如你想限制成员变量的可访问范围,用get set方法更加方便,编译时虚拟机还能自检禁止直接对成员变量赋值 还有一个重要原因 想不起来了
做开发时,这也成为一种定律了,很多时候javabean就需要这么严格定义的
8楼的解释有点问题啊,你不管哪种方式,改变的的都是对象的值,除非你的变量是静态的
那你邻居岂不是想拿就拿
用get的话,你可以在里面做逻辑判断,如果不是你家人就不让拿
懂?
①成员变量声明为private是封装性的体现,你可以通过对象的公开方法改变对象的属性,但是拒绝直接改变对象的属性。
②比如说有个类要实现实现线程安全,他的某个成员变量可能不允许并发修改,使用set方法可以给set上锁,保证只有一个线程可以修改该成员变量,使用set方法方便以后进行线程安全的扩展。当让扩展采用get set方法的扩展是体现在很多方面的,以上只是一例。
③Achilles_Dynasty兄台所言方便反射调用,这个不敢苟同,反射是可以直接访问私有变量的。
任何new出来的对象都有一个作用域,里面成员变量的值改变了,只是影响到该作用域,除非是类静态变量。
1、数据封装,避免直接访问属性,可以在set、get方法中增加逻辑,比如在set方法中进行数据校验,防止设置非法数据。
2、java bean与反射结合,是框架中常用的技术,比如hibernate中将表中的数据映射成pojo bean对象、struts将表单数据封装到form bean对象、Spring中将数据注入到bean对象中。
3、jdk中提供了工具类BeanUtils,该工具类提供了很多操作bean对象的接口,使用它操作bean对象很简单。
你举的例子并不能说明问题,如果用public来修饰,new 一个类的对象,再去修改这个值,并不会影响这个类的其他实例对象的这个值,因为public 修饰的并不是static,并不会产生共享,与你所说的用get,set是完全一样,get ,set确实有做封装作用,但是并不是每一个字段都需要为其加上get,set方法,有时可能只加get,有时也只加set,具体看情况而定,比如一个用户登录,可能在密码字段上,只有set方法,并不为其添加get方法
你举的例子并不能说明问题,如果用public来修饰,new 一个类的对象,再去修改这个值,并不会影响这个类的其他实例对象的这个值,因为public 修饰的并不是static,并不会产生共享,与你所说的用get,set是完全一样,get ,set确实有做封装作用,但是并不是每一个字段都需要为其加上get,set方法,有时可能只加get,有时也只加set,具体看情况而定,比如一个用户登录,可能在密码字段上,只有set方法,并不为其添加get方法
+1