`

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

 
阅读更多

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

 

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

 

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

 

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

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

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

分享到:
评论

相关推荐

    java成员变量覆盖问题

    在Java编程语言中,成员变量是指定义在类中的变量,它们可以在类的方法、构造器或类的其他成员方法中访问和操作。成员变量的覆盖(有时会被误认为是“重写”)是理解Java继承机制的关键之一。本文将详细解释成员变量...

    VC++结构体成员变量和方法

    本篇文章将深入探讨VC++中结构体的成员变量和方法,以及如何实现结构体成员的调用。 1. **结构体与类的区别** - 默认访问修饰符:在C++中,类的成员默认是私有的(private),而结构体的成员默认是公有的(public...

    java 使用类作为成员变量

    在Java中,成员变量是定义在类的主体部分(非方法内)的变量,它们可以是基本类型或引用类型。当成员变量是类的实例(即对象)时,我们就说它是类作为成员变量。这样做可以将相关数据和行为组合在一起,形成更复杂的...

    c++访问私有private成员变量的常用方法

    c++访问私有private成员变量的常用方法 在 C++ 编程中,private 成员变量是类的内部实现细节,不能被外部直接访问,这是为了保护类的封装性和安全性。然而,在某些情况下,我们需要访问私有成员变量,例如在测试、...

    C++ 包含类两个类互相调用彼此的类成员变量和方法

    成员对象可以直接访问所属类的所有公有(public)和保护(protected)成员,包括方法和变量。 当我们有两个类A和B,且它们需要互相调用对方的成员时,通常会遇到两个主要问题:前置声明(Forward Declaration)和...

    java 利用反射获取内部类静态成员变量的值操作.docx

    3. **访问静态字段**:最后,通过`Field`对象的`get`方法来获取静态成员变量的值。 ##### 代码示例 ```java import java.lang.reflect.Field; public class ReflectionExample { public static void main(String...

    定义一个Document类,包含成员变量name,从Document派生出Book类,增加PageCount变量。编写主函数

    - 可以通过对象调用类的方法和访问成员变量。 - **示例**: ```java Book book = new Book("Harry Potter", 123); System.out.println("Book " + book.getName() + " has " + book.getPageCount() + " pages."); ...

    Java中方法的重写与成员变量的隐藏

    "Java中方法的重写与成员变量的隐藏" Java 中方法的重写和成员变量的隐藏是面向对象编程中两个重要的概念。...然而,需要注意的是,成员变量的隐藏不同于方法的重写,我们需要注意访问正确的成员变量,以避免错误。

    android NDK访问实例成员变量

    4. **运行**:在Android设备或模拟器上运行应用,此时`setMyIntFromNative`方法会调用到C++代码,从而实现对Java实例成员变量的访问。 需要注意的是,访问Java对象的成员变量时,要确保对象的有效性,避免并发问题...

    静态成员变量和静态成员函数

    它们可以访问类的静态成员变量,但不能访问非静态成员,因为它们在没有对象的情况下调用。静态成员函数通常用于提供与类相关的操作,而不是与特定对象有关的操作。例如: ```cpp class MyClass { public: static ...

    关于C++静态成员函数访问非静态成员变量的问题

    当我们讨论"关于C++静态成员函数访问非静态成员变量的问题"时,我们需要深入理解这两种类型的成员函数的工作原理。 首先,静态成员函数是属于类的,而不是类的实例或对象。这意味着它们可以在没有创建任何对象的...

    Java反射机制修改私有成员变量的实现_Reflection

    3. **设置访问权限**:由于私有成员变量默认不允许外部访问,因此我们需要使用Field对象的`setAccessible(true)`方法,将其可访问性设置为true,这样就可以绕过访问控制检查。 4. **修改成员变量值**:最后,通过...

    PHP程序设计-3期(KC016) 3.8.1创建和使用类常见问题:成员变量和成员方法.docx

    成员方法可以访问类的成员变量,并且可以通过`$this`关键字来调用其他方法或访问其他成员变量。 在PHP中,类的构造函数(`__construct`)是一个特殊的方法,它会在创建类的新实例时自动调用。在示例1中,`__...

    成员变量1

    如果需要在方法内部访问成员变量,可以使用`this`关键字(对于实例变量)或类名(对于类变量)来明确指定调用的是成员变量,例如: ```java public void someMethod() { int localVar = 5; // 局部变量 this....

    C++静态成员函数与静态成员变量小结

    "C++静态成员函数与静态成员变量小结" 静态成员在C++中扮演着重要的角色,包括静态数据成员和静态函数成员两部分。静态成员是指在类体中使用static修饰符声明的成员,可以直接使用类名+静态成员名访问该静态成员。...

    浅谈静态变量、成员变量、局部变量三者的区别

    值得注意的一点是,如果局部变量和成员变量同名,那么在方法内部,局部变量会覆盖成员变量的引用,遵循“就近原则”。因此,当在方法内使用变量时,应确保清楚地知道正在访问哪个变量。 总之,理解这三种变量类型...

    数据结构 C++ 详细注释 结构变量成员访问4例子.rar

    C++提供了两种访问结构体成员的方法:点运算符(.)和箭头运算符(->)。点运算符用于访问普通结构体变量的成员,而箭头运算符用于访问指向结构体的指针的成员。 ```cpp s1.name; // 使用点运算符访问s1的name...

    静态成员与静态方法

    需要注意的是,静态方法不能访问非静态成员变量,例如: public class AB{ int a; static void setA(int aa){ System.out.println(a); //错误,不能访问非静态成员变量 } public static void main(String args...

    java使用反射访问成员变量的值示例

    在实例中,先获取了名为"name"的成员变量,并通过setAccessible(true)方法,关闭了Java的访问权限检查,这使得即便是私有成员变量也可以被访问。 然后,使用Field对象的set()方法,可以将任意的对象作为参数传递...

    详解c++ 静态成员变量

    然而,需要注意的是,静态成员变量打破了面向对象的封装原则,因为它们是类级别的,而不是对象级别的,可能导致类之间的耦合增加。过度使用静态成员变量可能会使代码更难测试和维护,因此应谨慎使用,并尽可能限制其...

Global site tag (gtag.js) - Google Analytics