Java中的get和set方法究竟是什么意思?

chaoyong918 2010-11-01 07:37:56
今天终于明白了为什么有get和set方法。

使用get和set方法是为了程序的封装,为了其它的类可以使用(设置和获取)该类的私有方法。

虽然明白了,但是还是不知道到底有什么好处。为什么要封装?使用get和set方法,把简单的事情搞的很复杂了。直接把变量定义为public不就可以了吗?为啥要封装呢?
...全文
66980 43 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
43 条回复
切换为时间正序
请发表友善的回复…
发表回复
o沐有鱼丸 2013-05-07
  • 打赏
  • 举报
回复
Java面向对象特性之一就是封装,一个类的字段应该只能被这个类本身所识别,所以要用private修饰字段,而用了private修饰的字段,就需要提供set()、get()方法外部才能访问,如果使用public修饰字段,java中包的访问权限就没有意义了,封装特性也太不体现了。
oh_Maxy 2013-05-07
  • 打赏
  • 举报
回复
引用 41 楼 anshaoyuan1 的回复:
[quote=引用 8 楼 bijanen19861113 的回复:] 封装的一个最主要的用途就在于:数据的安全性。如果像你所说的,所有的属性都用public来修饰,在操作性上是可行的。但是这样的数据时非常不安全的。比如:你在定义浏览器中的默认的每一页中显示的数据为10行数据,你用public去修饰了,我就可以通过new一个类的对象去修改你的这个默认值。但是你用private去修饰时(也就是对其进行了封装),你要setter和getter去改变,改变的只是你new出来的对象,原先的数据时没有变的,这样才是安全的。
你举的例子并不能说明问题,如果用public来修饰,new 一个类的对象,再去修改这个值,并不会影响这个类的其他实例对象的这个值,因为public 修饰的并不是static,并不会产生共享,与你所说的用get,set是完全一样,get ,set确实有做封装作用,但是并不是每一个字段都需要为其加上get,set方法,有时可能只加get,有时也只加set,具体看情况而定,比如一个用户登录,可能在密码字段上,只有set方法,并不为其添加get方法[/quote] +1
anshaoyuan1 2013-05-05
  • 打赏
  • 举报
回复
引用 8 楼 bijanen19861113 的回复:
封装的一个最主要的用途就在于:数据的安全性。如果像你所说的,所有的属性都用public来修饰,在操作性上是可行的。但是这样的数据时非常不安全的。比如:你在定义浏览器中的默认的每一页中显示的数据为10行数据,你用public去修饰了,我就可以通过new一个类的对象去修改你的这个默认值。但是你用private去修饰时(也就是对其进行了封装),你要setter和getter去改变,改变的只是你new出来的对象,原先的数据时没有变的,这样才是安全的。
你举的例子并不能说明问题,如果用public来修饰,new 一个类的对象,再去修改这个值,并不会影响这个类的其他实例对象的这个值,因为public 修饰的并不是static,并不会产生共享,与你所说的用get,set是完全一样,get ,set确实有做封装作用,但是并不是每一个字段都需要为其加上get,set方法,有时可能只加get,有时也只加set,具体看情况而定,比如一个用户登录,可能在密码字段上,只有set方法,并不为其添加get方法
lascala 2013-02-05
  • 打赏
  • 举报
回复
在类中为属性增加set、get方法后,该类就成为一个java bean,这样做好处有很多: 1、数据封装,避免直接访问属性,可以在set、get方法中增加逻辑,比如在set方法中进行数据校验,防止设置非法数据。 2、java bean与反射结合,是框架中常用的技术,比如hibernate中将表中的数据映射成pojo bean对象、struts将表单数据封装到form bean对象、Spring中将数据注入到bean对象中。 3、jdk中提供了工具类BeanUtils,该工具类提供了很多操作bean对象的接口,使用它操作bean对象很简单。
a_king 2013-02-04
  • 打赏
  • 举报
回复
OOP,面向对象
General-M 2013-02-04
  • 打赏
  • 举报
回复
面向对象的语言
王奕然 2013-02-02
  • 打赏
  • 举报
回复
说白了,你传进和传出的参数都是需要相关的方法的接收和发出的,其实用什么方法都可以,但是这样会造成方法不统一,比如你以后用几个框架有的规定用set有的规定用st那不就乱了吗!所以j2ee规范了它,必须用set 和get,
KingSen_Yale 2013-01-16
  • 打赏
  • 举报
回复
保存数据,安全性。
rome_wu 2013-01-16
  • 打赏
  • 举报
回复
封装的功能不单是安全性的问题,还有设计的问题,例如单立设计离不开封装,还有封装不一定是封装变量,也可以封装方法,不允许该类以外的方法调用该类的私有成员,包括私有变量,常量,方法等...这个方面保证了安全性
likj_sh_qq 2013-01-16
  • 打赏
  • 举报
回复
现在的问题越来越没有深度了
msflwl 2012-12-29
  • 打赏
  • 举报
回复
引用 8 楼 bijanen19861113 的回复:
封装的一个最主要的用途就在于:数据的安全性。如果像你所说的,所有的属性都用public来修饰,在操作性上是可行的。但是这样的数据时非常不安全的。比如:你在定义浏览器中的默认的每一页中显示的数据为10行数据,你用public去修饰了,我就可以通过new一个类的对象去修改你的这个默认值。但是你用private去修饰时(也就是对其进行了封装),你要setter和getter去改……
这个很有说服力
  • 打赏
  • 举报
回复
最简单来说,假如你只想让别人读属性,只用public,那么任何人都可以更改变量,如果用set封装,别人就没办法改了。
wents3921 2012-12-28
  • 打赏
  • 举报
回复
8楼的解释不完全同意。 任何new出来的对象都有一个作用域,里面成员变量的值改变了,只是影响到该作用域,除非是类静态变量。
zhf1123 2012-12-27
  • 打赏
  • 举报
回复
如果都是public了别人就可以用了么?我只是发布在我的服务器上啊?别人怎么用啊?
mzule 2012-12-27
  • 打赏
  • 举报
回复
楼上说的都不错,我再说说自己的看法: ①成员变量声明为private是封装性的体现,你可以通过对象的公开方法改变对象的属性,但是拒绝直接改变对象的属性。 ②比如说有个类要实现实现线程安全,他的某个成员变量可能不允许并发修改,使用set方法可以给set上锁,保证只有一个线程可以修改该成员变量,使用set方法方便以后进行线程安全的扩展。当让扩展采用get set方法的扩展是体现在很多方面的,以上只是一例。 ③Achilles_Dynasty兄台所言方便反射调用,这个不敢苟同,反射是可以直接访问私有变量的。
dxqrr 2012-12-27
  • 打赏
  • 举报
回复
你家的钱能设为public? 那你邻居岂不是想拿就拿 用get的话,你可以在里面做逻辑判断,如果不是你家人就不让拿 懂?
-tomcat- 2012-12-27
  • 打赏
  • 举报
回复
封装才能体现面向对象的编程思想,如果你把每个属性都使用public进行获取和设置,那样的话属性一旦多的话,看上去也会很乱,如果封装起来的话可以抽象出一个类来表示,所有的属性get和set方法写出来,在用到的地方直接用get方法获取,而且在逻辑层的判断也会很清晰。面向对象编程思想!
RuanJianBuLiuLei 2012-12-27
  • 打赏
  • 举报
回复
一个是赋值一个是取值
Intboy 2012-12-27
  • 打赏
  • 举报
回复
引用 8 楼 bijanen19861113 的回复:
封装的一个最主要的用途就在于:数据的安全性。如果像你所说的,所有的属性都用public来修饰,在操作性上是可行的。但是这样的数据时非常不安全的。比如:你在定义浏览器中的默认的每一页中显示的数据为10行数据,你用public去修饰了,我就可以通过new一个类的对象去修改你的这个默认值。但是你用private去修饰时(也就是对其进行了封装),你要setter和getter去改……
这里很完善……
gushi274650130 2012-12-26
  • 打赏
  • 举报
回复
封装和继承。。。。面向对象的精华啊~~~ 封装一方面安全
加载更多回复(23)

67,549

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧