`

方法对成员变量的访问要注意的事

 
阅读更多

 我们在写类的时候,通常会将一些经常访问的对象定义成“成员变量”供方法使用,
使方法在使用这些成员变量的时候可以直接写出变量的值而无须重新定义,而且方法还不用
定义一个参数来接受这个对象。对于成员变量的访问方便了,但在使用的时候我们有时并没
有考虑到我们是要“访问它”还是要“修改它”,从而导致了一些可读性较低的代码,这样
的可读性低的代码增加了维护的难度。

 

 对于成员变量的访问,一个方法中如果要用到成员变量一定要考虑两种情况,即该方
法是否对成员变量进行了“更改”的操作,或仅仅只是单独的“访问”。一个方法如果仅
仅只是对成员变量进行了单独的访问,用来做判断或用了其中的某些值而已,这样,这个
方法中的代码可以直接使用这个成员变量。而如果该方法对成员变量进行了修改,尤其这
个变量是某个大对象(对象中的方法多,功能多),我们千万不能直接引用这个成员变量
并进行修改这样会给代码审查工作带来极大的困难,将代码的可读性降低了。

 

 因为一旦我们定义了一个成员变量,我们要对程序进行维护的时候,可能要对这个变
量进行更改,这时我们往往需要看哪里对这个变量进行了修改操作,一看之下迷迷糊糊,
根本就不清楚哪里修改了这个变量,只知道是有很多地方都引用了这个变量。这样给代码的
维护工作带来了极大的不方便。

 

对于要修改成员变量的方法,我们要将这个成员变量当作一个参数传入这个方法,如
果我们要保留修改的结果,那么这个方法还得有返回值,将修改后的结果当作返回值返回给
调者。而不是直接引用成员变量进行修改。这样一来,这个方法对变量进行修改必须传入成
员变量,那么调用者就必须建立“等号表达式”来接受这个被修改过的成员变量。

 这样一来,代码中对变量进行更改时必须使用“等号表达式”,而对成员变量的访问方
法则可以直接进行访问。维护时,我们想要找到那些更改成员变量值的地方只需要看该成员变
量在何处被重新赋值了(何处使用了“等号表达式”)即可。

 这样一来我们代码的可读性,可维护性就变强了。

分享到:
评论

相关推荐

    Java 理论与实践: 正确使用 volatile 变量 线程同步

     这样当多个线程同时与某个对象交互时,必须要注意到要让线程及时的得到共享成员变量的变化。  而volatile关键字是提示VM:对于这个成员变量不能保存它的私有拷贝,而应直接与共享成员变量交互。  使用建议:...

    JAVA基础知识精华总结 收藏

    不仅第一次创建对象时,类中的所有静态变量都初始化,并且第一次访问某类(注意此时 未创建此类对象)的静态对象时,所有的静态变量也要按它们在类中的顺序初始化。 2、 继承时,对象的初始化过程 (1) 主类的超类...

    21天学会Java之(Java SE第三篇):包、方法、对象和类、类的定义、属性(成员变量)、构造器(构造方法)

    文章目录包包(package)的作用JDK中主要的包包的命名规范导入类(import)方法方法的使用方法的重载(Overload)以及方法的重写(Override)对象(Object...成员变量)构造器(构造方法)构造器的定义构造器的重载构造器的注意事项...

    跟我学Java-day01-java基础语法.pdf

    拟机(JVM)对字节码文件解释执行。所以在不同的操作系统下,只需安装不同的Java虚拟机即可实现java程序的 跨平台。 1.3 JRE和JDK(记忆) JVM(Java Virtual Machine),Java虚拟机 JRE(Java Runtime ...

    Java 语言基础 —— 非常符合中国人习惯的Java基础教程手册

    对象的使用包括引用对象的成员变量和方法,通过运算符·可以实现对变量的访问和方法的调 用,变量和方法可以通过设定一定的访问权限(见下面的例子)来允许或禁止其它对象对它的 访问。 我们先定义一个类 Point。 例子...

    【04-面向对象(上)】

    •成员变量分为类属性和实例属性.对于类属性无论通过类还是对象来访问都是访问同一个对象,只要一个对象改变 了类属性,那么其他对象对应的类属性也改变了.成员变量不用显式初始化,只要定义了一个类属性或实例属性,...

    Java开发者文档,分享日常学习的一些小知识点 .rar

     不仅第一次创建对象时,类中的所有静态变量都初始化,并且第一次访问某类(注意此时  未创建此类对象)的静态对象时,所有的静态变量也要按它们在类中的顺序初始化。  2、继承时,对象的初始化过程  (1) 主类...

    Java代码规范编码规约

    一、命名规范 ...思考:如果是一个private的方法,想删除就删除,可是一个public的service方法,或者一个public的成员变量,删除一下。例外:为了单元测试,有时也可能将访问范围扩大,此时需要加上JavaDoc说明

    Java学习笔记(必看经典)

    利用类型的差异来影响对方法的调用。 吃()可以分为吃肉,吃菜,吃药,在一个类中可以定义多个吃方法。 构造方法也可以实现overloading。例: public void teach(){}; public void teach(int a){}; public void ...

    C语言程序设计标准教程

     在ANSI C中除了允许具有相同类型的结构变量相互赋值以外, 一般对结构变量的使用,包括赋值、输入、输出、 运算等都是通过结构变量的成员来实现的。  表示结构变量成员的一般形式是: 结构变量名.成员名 例如:...

    PL/SQL 基础.doc

    所有的成员变量都要申明; b. 实例化变量; 可以代替RECORD类型. 5. TABLE类型 TYPE tabletype IS TABLE OF type(类型名,要保存成的数据类型) INDEX BY BINARY_INTEGER; 例:DECLARE TYPE t_emp IS TABLE OF ...

    本地资源管理器的设计与实现

    上述代码实现的仅仅是资源管理器的主要功能,只要能够对CListView、CtreeView等类灵活...具体实现时要注意保证不同的视(原来的视以及目的视)能访问相同的成员变量,解决的办法是在app类里面定义一些共用的成员变量。

    PHP 面向对象技术(全面讲解).txt

    要想访问对象中的成员就要使用一个特殊的操 作符“->”来完成对象成员的访问: LAMP 大讲堂PHP 面向对象技术(全面讲解) 网站:http://www.phpchina.com 投稿:phper@phpchina.com 《PHPer》70/104 对象->属性$p1->...

    21天学通Java-由浅入深

    123 7.2.2 默认的访问级别 124 7.3 什么是封装 125 7.4 最终修饰符 127 7.4.1 final修饰对象类型的成员变量 127 7.4.2 final修饰基本类型的成员变量 129 7.4.3 final修饰的局部变量 131 7.4.4 final修饰的方法 132 ...

    Visual C++开发经验技巧宝典(第1章)

    0051 为什么要避免直接存取数据成员 19 0052 避免使用memset初始化对象 19 0053 C++类中成员初始化的顺序 19 0054 基类的析构函数应该是虚方法 20 0055 访问限定符分析 21 0056 访问其他类的私有成员函数...

    CLR.via.C#.(中文第3版)(自制详细书签)Part2

    17.7.3 简化语法3:局部变量不需要手动包装到类中即可传给回调方法 17.8 委托和反射 第18章 定制attribute 18.1 使用定制attribute 18.2 定义自己的attribute类 18.3 attribute的构造器和字段/属性的数据类型 ...

    net学习笔记及其他代码应用

    接口只可以定义static final成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对象...

    Java语言程序设计的课程设计项目——利用Java实现地球系动画完整实现实例(第3部分).pdf

    注意: 1) 数组类是一个空类(自身没有声明任何成员变量、成员方法、构造函数和 Annotation 等),编译器其实是对 Array.length()这样的语句做了特殊的处理,直接编译成 arraylength 指令。 2) 相比 C/C++中的数组...

    Java笔试题大汇总

    注意:子类中重写的方法和父类中被重写的方法要具有相同的名字,相同的参数表和相同的返回类型,只是函数体不同。 由于子类继承了父类所有的属性(私有的除外),所以子类对象可以作为父类对象使用。程序中凡是...

    javaSE代码实例

    6.6.1 调用不存在的方法或成员变量 87 6.6.2 用空引用进行调用 88 6.6.3 数组的空引用问题 89 6.7 局部变量 89 6.7.1 局部变量的作用域 89 6.7.2 局部变量的初始化 90 6.8 this预定义对象引用 92 6.9...

Global site tag (gtag.js) - Google Analytics