在很多程序中,都喜欢定义一个privata变量,然后为这个私有变量加上get(),set()方法。那为什么不直接定义一个public变量呢?这样做到底有什么好处和意义呢?难道真的仅仅只是为了代码规范?别逗了,不管你信不信,反正我是不信!带着这个问题我在网上寻找答案,真是众说纷纭啊,每个人都能说出一点点道理,但是却都不足以说服我!(所以在这里做一些总结,和大家分享,我们共同学习,共同进步。如果有什么想法和意见,也欢迎大家提出来,我们一起交流。)其中看到有这样一种说法:

  “get()和set()方法起到对外界封闭的作用,举个例子:假如你的裤兜里有很多钱,你肯定不会让别人都来掏,肯定只有自己能拿到,或者你拿出来给他,set和get就相当与你的手  而你类里的变量就相当与你兜里的钱,对于外面的人来说不知道你类里有什么他就知道调用这个get会给他一个什么东西”

  哇!貌似回答得很专业,很形象,很生动,很有道理啊,差一点我就要膜拜了,但是就在千钧一发的时刻,我冷静了下来。TNN的,差点就被你给忽悠了,这个举例完全没有回答实质性的问题嘛,会举例子的人伤不起啊~~~~(>_<)~~~~ 。如果一定要把get()和set()比喻成手的话,也不能比喻成你自己的手,因为get()和set()方法也是public属性的,谁都可以调用,也就是说任何人的手都还是可以拿到你的钱,那和直接把变量设成public有什么区别吗?至于对外面的人来说知不知道你类里有什么,这个只是变量命名规范问题而已,和属性不存在半毛钱关系吧?想让人看见和更改的变量就设成public,不想让人看见和更改的就设成privtata,已经很天衣无缝了,为什么还要get(),set()方法呢?

  我又迷茫了,带着依依不舍的心情,我离开了这位大神,继续寻找答案。其实每个人都知道get()和set()方法肯定是有好处的,但是有什么好处呢却又说不清楚,只能乖乖照做了(但是没有糖吃 哈哈!),而且工具可以帮你自动生成get()和set()方法,一点都不麻烦。但是不能因为不麻烦就傻傻的去做,而不去考虑为什么要这么做,那我们也沦落为了工具!⊙﹏⊙b汗!又偏题了,继续研究。。。

  其实大多数人讲的是这关系到安全性的问题,貌似有点道理,但是却好象没什么依据,请问我使用public变量有什么不安全?   使用get(),set()安全在哪里?
  有些人说封装性,但是变量本身就是封装在类里面的啊!

  其实大部分人都是人云亦云,说什么安全性,封装性,只要学java的人都会说,没有一本java的书不提及这些名词,   其实真正理解的人不多。

  我只知道用get()和set()有一个好处,当输入.get(.set)   时就能显示所有的属性。把所有设置都归纳起来,对于外部的使用都方便而已。假如你开发一个类给别人用,人家只要输入.get就能知道所有的属性。(天啊!就只有这么一丢丢的好处?我都不好意思跟别人说!)  

  难道get()和set()真的只是一种规范做法而已,完全等效于public变量?

  不!我这种人是绝对不甘心找不到答案就把问题归结于代码规范的!

  那我想现在唯一可以让我信服的答案暂时就是:用get()与set()可以控制变量。

  如果get()和set()方法里面只放一个赋值语句的话,和public变量应该没什么区别。
  但是设想,如果你的变量score代表的是一个学生的数学成绩,理论上,分数只可能是0-100的整数,如果你把将score设为public,不用get()和set(),那么用户很可能会输入1-100以外的数字,如果你把将score设为privata,再用setScore()来设置分数,你就完全可以控制这种行为了。

   哈哈 其实几句话可以把这个问题搞定,但是为了把文章写得生动一点,废话多了一点点,请大家见谅!如果大家还知道get()和set()有什么其他的好处的话,指教小弟一下,感激不尽!

  注:本人很厚道,引用网上各位大神的话已用红色字体标出,如有雷同,纯属缘分!

转载于:https://www.cnblogs.com/cpm320/archive/2012/09/14/2684600.html

关于java中很多人用get()和set()方法,而不用public的一点总结相关推荐

  1. java 销毁线程_线程 学习教程(一): Java中终止(销毁)线程的方法

    结束线程有以下三种方法: (1)设置退出标志,使线程正常退出,也就是当run()方法完成后线程终止 (2)使用interrupt()方法中断线程 (3)使用stop方法强行终止线程(不推荐使用,Thr ...

  2. Java中Date和Calender类的使用方法

    查看文章     Java中Date和Calender类的使用方法 2009-10-04 20:49 Date和Calendar是Java类库里提供对时间进行处理的类,由于日期在商业逻辑的应用中占据着 ...

  3. Java中动态加载字节码的方法 (持续补充)

    文章目录 Java中动态加载字节码的方法 1.利用 URLClassLoader 加载远程class文件 2.利用 ClassLoader#defineClass 直接加载字节码 2.1 类加载 - ...

  4. JAVA中线程同步的几种实现方法

    JAVA中线程同步的几种实现方法 一.synchronized同步的方法: 1.synchronized同步方法 即有synchronized关键字修饰的方法. 由于java的每个对象都有一个内置锁, ...

  5. java怎么设置卡片布局_在Java中使用卡片布局管理器的方法

    在Java中使用卡片布局管理器的方法 发布时间:2020-12-03 16:05:18 来源:亿速云 阅读:85 作者:Leah 在Java中使用卡片布局管理器的方法?针对这个问题,这篇文章详细介绍了 ...

  6. java 中lock,java中lock获取锁的四种方法

    在java接口中会存放着许多方法,方便线程使用时的直接调用.对于lock接口大家都不陌生,我们已经初步对概念进行了理解.那么在获取锁的方法上想必还不是很清楚.下面我们就lock获取锁的四种方法分别进行 ...

  7. Java中的string定义的两种方法和区别

    java中的String定义的两种方法和区别 第一种:new方式 String s1 = new String("hello world"); String s2 = new St ...

  8. Java 中使用反射来创建对象、调用方法

    Java 中使用反射来创建对象.调用方法 反射创建对象 反射调用方法 反射调用私有方法 反射调用可变参私有方法 反射调用的方法自身可以抛出异常的情形   假设已有下面的类: import java.l ...

  9. java面试题27 java中下面哪些是Object类的方法()

    java面试题27 java中下面哪些是Object类的方法() A notify() B notifyAll() C sleep() D wait() 蒙蔽树上蒙蔽果,蒙蔽树下你和我.遇到这种题,我 ...

最新文章

  1. 构件图(Component Diagram)
  2. 这个回答让我错失offer!offer拿到手软
  3. 基本数据类型____字典
  4. 珀尔:数据非常愚蠢,领会因果关系才是理解世界的关键
  5. 15M安装包就能玩《原神》,带你了解云游戏背后的技术秘密
  6. 6-4 链表拼接 (20分)_数据结构之链表
  7. 计算机组成原理第三章ppt,计算机组成原理第三章幻灯片(白中英版).ppt
  8. NYOJ 取石子总结
  9. 专利学习笔记7:说明书附图尺寸
  10. CPU内部原理,一文解析
  11. 自制typora主题
  12. ubuntu找不到拼音输入,找不到中文拼音输入源
  13. Unity3D 法线转换切线空间
  14. qnx 镜像文件_QNX开发最完整图文教程(官方文档,非官方翻译)
  15. matlab 读取dbf文件
  16. laravel5实现第三方登录(微信)
  17. css背景视差_具有JavaScript和CSS转换的廉价视差
  18. 笔记|数据分析:指标体系中的标准化方法
  19. nrf24l01无线通信模块与51单片机工作原理
  20. 视频剪辑教程自学如何剪辑视频,混剪视频怎么做

热门文章

  1. 我的docker随笔15:MySQL启动时自动创建数据库
  2. iptables学习笔记:端口转发命令优化
  3. 【Flink】Flink SQL 架构 以及 执行逻辑
  4. 【Redis】redis 主从复制
  5. 60-150-046-使用-Sink-Flink落HDFS数据按事件时间分区解决方案
  6. Spring: Bean 注册 - BeanDefinitionRegistry
  7. docker-compose基础
  8. 在 TableLayoutPanel 控件中对齐和拉伸控件
  9. 仿百度,豆瓣读书文库阅读器
  10. fetch oracle 12c下载,十二、Oracle Fetch子句