当前位置: 首页 > 面试题库 >

设置和获取方法相对于公共变量的优势

柴昆杰
2023-03-14
问题内容

使方法访问类中的私有变量而不是使变量成为公共变量有什么好处吗?

例如,第二种情况比第一种情况好吗?

//Case 1
public class Shoe{
    public int size;
}

//Case 2
public class Shoe{
    private int size;
    public int getSize(){
        return size;
    }

    public void setSize(int sz){
        size = sz;
    }

}

问题答案:

我有一天在SO上看到的答案(由@ ChssPly76编写)为什么使用getter和setter

因为从现在开始的2周(月,年),当您意识到设置者需要做的不仅仅是设置值时,您还将意识到该属性已直接在238个其他类中使用:-)

还有很多优点:

  1. getter和setter 可以 在其中 进行验证 ,而字段则不能
  2. 使用getter可以 获取 想要的类的 类。
  3. getter和setter 是多态的 ,字段不是
  4. 调试 可以简单得多,因为可以将断点放置在一个方法内,而不是该给定字段的许多引用附近。
  5. 他们可以 隐藏实现更改

之前:

private boolean alive = true;

public boolean isAlive() { return alive; }
public void setAlive(boolean alive) { this.alive = alive; }

后:

private int hp; // change!

public boolean isAlive() { return hp > 0; } // old signature 
 //method looks the same, no change in client code
public void setAlive(boolean alive) { this.hp = alive ? 100 : 0; }

编辑 :当您使用Eclipse时,另一个新的优点-您可以在现场创建观察点,但是如果您有setter,则只需要一个断点,并且…
断点(例如,在setter方法中)可以是有条件的观察点(在现场)不能
。因此,如果仅在x=10只能使用setter中的断点才能停止调试器的情况下才停止。



 类似资料:
  • 可能重复: 为什么使用 getter 和 setter? 在你的类中创建访问私有变量的方法比创建公共变量有什么好处吗? 例如,第二种情况是否优于第一种情况?

  • 问题内容: 我当时正在上课,我想到了几个问题。 我注意到,其他类将使用的公共方法调用了一些私有方法来完成所有工作。现在,我知道OOD的原则之一就是尽可能多地私有化并隐藏所有实现细节。我不确定我是否完全理解其背后的逻辑。 我知道将字段设为私有很重要,以防止将无效值存储在字段中(这只是许多原因之一)。但是,对于私有方法,我不确定为什么它们如此重要。 例如,对于类,我们是否不能将所有实现代码都放入公共方

  • 问题内容: 我纯粹是出于问题的速度方面而问这个问题。 在对象是私有或公共(Java)时从对象获取值之间在速度上有什么区别? 我知道我可以测试它,但是如果任何人都知道,它就不会受伤:)预先感谢! 问题答案: 公共和私有访问无非就是在编译时确定您是否有权访问变量。在运行时,它们完全相同。这意味着,如果您可以诱使JVM认为您具有访问权限(通过反射,不安全或修改字节码),则可以。公共和私人只是编译时间信息

  • 本文向大家介绍C#设置与获取环境变量的方法详解,包括了C#设置与获取环境变量的方法详解的使用技巧和注意事项,需要的朋友参考一下 1.前言 本来想拿学校机房的Android编辑器直接粘到自己电脑上用,发现它的eclipse是32位的,而我的JDK是64位的,于是想到干脆装两个JDK,用C#做一个能够更改环境变量的程序 环境变量是包含关于系统及当前登录用户的环境信息的字符串,一些软件程序使用此信息确定

  • 我有一个接一个的类来测试模拟对象。 我的测试: Test01工作正常,但在Test02中我有问题。在Test02方法中,需要调用进程路径。它使用mockNetwork公共最终变量。我不知道在哪里设置它们。它导致了空异常。在上面的代码中,我试图更改此字段的可访问性并设置它们,但现在我在消息“sinkIndex”中出现错误。 如何在mockNetwork中模拟公共最终变量?我正在使用Easymock。

  • 问题内容: 我正在使用以下maven pom.xml代码片段从文件jenkins / version.properties中读取名为BUILD_NUMBER的属性。 Jenkins还有一个名为$ BUILD_NUMBER的环境变量。我有尝试使用$ BUILD_NUMBER的子pom.xmls,它一直在为$ BUILD_NUMBER选取Jenkins环境变量值,而不是从jenkins / versi