转载:java 中对类中的属性使用set/get方法的意义和用法

摘要:
我经常看到朋友提到这样的事情:在类中为属性使用set/get方法的作用?让我们介绍一下为什么应该使用set/get方法而不是直接访问属性。当然,set/get方法的功能不限于这些。在实际项目中有许多用途。例如,当类升级时,属性的类型会更改。只要set/get的类型保持不变,以前的代码就不会受到影响。

经常看到有朋友提到类似:对类中的属性使用set/get方法的作用?理论的回答当然是封闭性之类的,但是这样对我们有什么作用呢?为什么要这样设计?我直接使用属性名来访问不是更直接,代码更简洁明了吗?下面我们就来介绍下为什么要使用set/get方法来代替直接访问属性。

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.安全性。 比如我们的操作系统在新建用户或在共享文件的时候,经常会提示对针对某个用户的权限是什么,是只读还是只写还是可读写,这里的读写就好比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。在实际项目中,对一些类的设计时,严谨的设计是要考虑哪些类是只读或是只写的。

set/get的方法作用当然不只这些,实际项目中的用法有很多,比如对某个类升级,有一个属性的Type变化了,只要set/get的Type不变就不会影响到以前的代码。更多的用法只能在使用中多体会了。

免责声明:文章转载自《转载:java 中对类中的属性使用set/get方法的意义和用法》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Android 中 Environment.getExternalStorageDirectory()无效TCP与虚连接下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

linux性能评估-磁盘io概念实战篇

看起来python是个可疑进程。avgqu-sz:平均I/O队列长度。%util:一秒中有百分之多少的时间用于I/O操作,即被io消耗的cpu百分比备注:如果%util接近100%,说明产生的I/O请求太多,I/O系统已经满负荷,该磁盘可能存在瓶颈。如果avgqu-sz比较大,也表示有当量io在等待。观察iostat的最后一列,你会看到,磁盘vda的I/O使...

浪潮各机型管理芯片BMC IP(智能平台管理接口)设置

NF5240m3/NF5140m3/NF5280m3/SA5212H2/NP5540M3NF5270M3/NF5170M3/NF8420m3IPMI主板集成管理芯片BMCIP设置开机按DEL键进入BIOS设置选择"ServerMgmt"---"BMCNetworkConfiguration"---"lanchannel1/2"---"staticipaddr...

com.aliyun.openservices.shade.com.alibaba.fastjson.JSONException: exepct '[', but {, pos 1, line 1, column 2

错误报告的原因:您放置了一个非List对象,但希望从packagetest中取出List对象;导入java.text。SimpleDateFormat;导入java.util。阵列列表;导入java.util。日期导入java.util。列表importcom.alibaba.fastjson。JSON;导入com.alibaba.fastj...

【NS-3学习】ns3-模拟基础:关键概念,日志,命令行参数

前言本博客首先介绍了模拟过程中使用的一些关键概念,然后介绍了有助于调试模拟脚本的常见技术:日志、命令行参数。Ns-3不是一个特殊的互联网模拟器,而是一个网络模拟器。在ns-3的仿真环境中,节点可以连接到表示数据交换通道的对象。这里,基本通信子网的抽象概念被称为信道,由C++中的channel类描述。在ns-3中,网络设备的抽象概念相当于硬件设备和软件驱动程序...

浅谈 SQL 注入(注入篇)

1、 SQL注入1.1简介什么是SQL注入?它不过滤用户可以严格控制或没有限制的参数,以便用户可以将传入的参数和SQL语句组合成SQL语句,然后将其传输到web服务器。最后,它被传输到数据库以执行添加、删除、修改和查询等操作。基于此,用户可以获取数据库数据或提高其销毁数据库数据的权限。...

H3C 12508 收集诊断信息

案例:H3C12508单板卡出现remove状态,需要配合研发收集诊断信息。)总体:12500交换机返回三种文件----故障时诊断信息,主备单板的日志文件,主备单板的诊断日志操作步骤:一、故障时诊断信息:disdiagnostic-informationdiag收集必须在问题出现的时候,单板重起之前执行。在save时请选择Y保存到CF卡方式。一般情况下,此命...