问题:实例类中定义一个privata变量,然后为这个私有变量加上get/set方法。那为什么不直接定义一个public变量呢?

类中的属性使用set/get方法的作用,我理解的如下:
**

关键:在于public和private的区别,在类外部通过new 类的方法没法访问private变量,这才是关键。

**
下面的好处都是定义一个public get/set(读/写) ,方便外部访问的好处,不是抛出问题的关键。

1、灵活性
例1:比如我们有一个Person类,我们给它设置一个属性name,但是我们希望在取名字的时候,不是只显示名字,而是把名字按我们的要求输出,比如”我的名字叫XX”,代码如下:

public class Person {private String name;public String getName() {return "我的名字叫" + name;}public void setName(String name) {this.name = name;}
}

如上代码,以后我们只要定义一个person对象,并给他setName(xx),再getName的时候,就会显示我的名字叫XX。在实际业务中还可以有更灵活的运用,这里就不举例了。

例2:有人说如果你的变量score代表的是一个学生的数学成绩,理论上,分数只可能是0-100的整数,如果你把将score设为public,不用get()和set(),那么用户很可能会输入1-100以外的数字,如果你把将score设为privata,再用setScore()来设置分数,你就完全可以控制这种行为了。

2、安全性
比如我们的操作系统在新建用户或在共享文件的时候,经常会提示对针对某个用户的权限是什么,是只读还是只写还是可读写,这里的读写就好比get/set。对于类来说,如果不使用set/get方法,直接用public定义某个属性,那么这个属性是可读可写的,如果你希望一个类的某个属性是只能读取,不能写入的时候,上面用public定义某个属性就不能满足了,但是我们可以使用private定义属性,再定义一个get方法,但是不定义set方法来实现。反之,只定义set,不定义get则表示该属性是只写不能读的。举个简单的例子,如下代码。

public class Circle {private double radius;private double pai = 3.14;public double getPai() {return pai;}public void setRadius(double radius) {this.radius = radius;}/*** 计算周长*/public double getC() {return 2*pai*radius;}
}

我们定义了一个圆类,定义了属性半径和pai,半径我只提供写的方法,但是不提供读,而pai只提供读,但不能写,并提供了一个计算周长的方法getC。在实际项目中,对一些类的设计时,严谨的设计是要考虑哪些类是只读或是只写的。

这作用表面上可以,但是有些牵强,可以说引偏了。原因是引入Circle实例后还是可以直接操作变量啊

java get/set方法好处相关推荐

  1. 46栈内存溢出、内存区域(程序计数器、Java 虚拟机栈、本地方法栈、Java 堆、方法区、直接内存、内存溢出)与内存溢出(对象实例化分析)

    46.什么情况下会发生栈内存溢出 46.1.Java 内存区域与内存溢出 46.1.1.内存区域 46.1.1.1.程序计数器 46.1.1.2.Java 虚拟机栈 46.1.1.3.本地方法栈 46 ...

  2. java 可变参数方法_Java方法中的参数太多,第7部分:可变状态

    java 可变参数方法 在我的系列文章的第七篇中,有关解决Java方法或构造函数中过多参数的问题 ,我着眼于使用状态来减少传递参数的需要. 我等到本系列的第七篇文章来解决这个问题的原因之一是,它是我最 ...

  3. Java Collections.emptyList() 方法的使用及注意事项

    Java Collections.emptyList方法的使用及注意事项 一.emptyList() 作用:返回一个空的List(使用前提是不会再对返回的list进行增加和删除操作): 好处: 1. ...

  4. 【Linux】shell调用Java程序main方法通过crontab定时执行

    来源:https://blog.csdn.net/coolcooldool/article/details/51775105 最近一个项目需要写一个batch定时读取文件往数据库里插入记录,第一次写, ...

  5. java云端开发_云端编写Java代码的方法

    云端编写Java代码的方法 通常情况下,正如云厂商和虚拟计算提供商所宣传的转移到云端是一个无缝的流程,经验却告诉我们过于猛烈地脱离内部数据中心,部署到云端是一种复杂的方式.从部署流程到方式的所有事情, ...

  6. Java 接口作为方法参数

    一'Java 接口作为方法参数好处: 1 可以很方便封装起来,供调用者使用: 2 参数为接口类型可以实现代码解耦: 3 对调用者而言, 无需关心内部构造逻辑 , 只要实现调用相关方法 实现自己的下部逻 ...

  7. Java基础学习——方法

    Java基础学习--方法 前言 本文将介绍有关Java面向对象编程的知识之一:方法:其中包括方法的概念,三类方法的格式.方法的重载以及方法的内存 方法的概念 方法是程序中最小的执行单元 方法定义:将一 ...

  8. java学习心得---方法

    java学习心得-方法 一.概念 方法是实现特定功能的一段代码,可以重复使用. 二.定义 一些列代码指令的合集(就是将一些代码整合再一起). 三.作用 提高代码的重复性. 四.定义的格式 访问修饰符+ ...

  9. Java 5种方法实现生产者消费者问题与2种方法实现读者写者问题

    摘要: Java实现生产者消费者问题与读者写者问题 1.生产者消费者问题 生产者消费者问题是研究多线程程序时绕不开的经典问题之一,它描述是有一块缓冲区作为仓库,生产者可以将产品放入仓库,消费者则可以从 ...

最新文章

  1. Servlet的初始化参数
  2. cloud-init 工作原理 - 每天5分钟玩转 OpenStack(171)
  3. 列表生成式、生成器、迭代器
  4. Mysql(13)——left join和right join的用法
  5. docker 出现 Error response from daemon
  6. VS.Net 2003/VC6.0常用快捷键集合
  7. 《完美软件》笔记8:如何应对防卫反应
  8. centos安装中文支持(转)
  9. 休闲策略游戏源码荒野总动员H5+安卓+IOS三端源码
  10. 2018年度最佳网页设计与开发教程
  11. php 限定字符长度,php-限制字符串长度
  12. 听写英语单词的小程序
  13. php电子面单打印快递100,使用快递100软件打印电子面单设置操作教程
  14. 二进制的转换(二进制、八进制、十进制、十六进制)
  15. 语音信号处理-概念(三):FBank特征、MFCC特征(梅尔频率倒谱系数)【由于二者蕴含信息较少,已不适合这个大数据时代。但有些任务由于其本身的特殊性质,还是会使用到MFCC谱。如情感语音转换任务】
  16. C语言蜗牛爬墙(个人练习)
  17. 可调整计算机软硬件配置的应用程序,在Windows中,可以调整计算机软硬件配置的应用程序是()...
  18. 看到“java单例模式”脑壳疼,学会这几招分分钟搞定
  19. 德勤咨询:2021年制造业+人工智能创新应用发展报告
  20. arduino uno电压_了解Arduino UNO电路

热门文章

  1. Window10 系统休眠或睡眠状态恢复-占用磁盘空间 100% 问题以及解决方法
  2. IP和局域网 简单了解
  3. 小米WatchS2和小米WatchS1 区别 哪个值得入手
  4. 在IE禁用的情况下,如何用Microsoft Edge以兼容模式打开网页?
  5. Android 小米应用角标
  6. 无所不能的深度学习?
  7. 【开箱】B.FRIEND MK3机械式键盘!可换轴换灯,绝美双色金属底座!
  8. 如何根据vin码查询_汽车VIN码是什么,怎么查询Vin码?
  9. 计算车号Java,汽车VIN码校验算法 java版
  10. PAT A1066 Root of AVL Tree ——春水碧于天,画船听雨眠