Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么使用setter和getter方法_Java_Utility Method - Fatal编程技术网

Java 为什么使用setter和getter方法

Java 为什么使用setter和getter方法,java,utility-method,Java,Utility Method,可能重复: 我知道这很琐碎。但是为什么我们定义private,然后使用getter和setter呢。这更像是为了防止程序员在使用私有变量或方法时出错吗?或者是出于安全原因。如果出于安全原因,那么使用getter或setter有什么意义?我知道我们可以在getter和setter中设置限制,但是那些if条款主要是为了防止错误,而不是隐私限制。例如,我们通常不会说,对于这些成员,使用if子句限制对该方法的访问 谢谢。我们使用私有字段,并且有getter和setter,以便其他类可以访问这些私有字段

可能重复:

我知道这很琐碎。但是为什么我们定义private,然后使用getter和setter呢。这更像是为了防止程序员在使用私有变量或方法时出错吗?或者是出于安全原因。如果出于安全原因,那么使用getter或setter有什么意义?我知道我们可以在getter和setter中设置限制,但是那些if条款主要是为了防止错误,而不是隐私限制。例如,我们通常不会说,对于这些成员,使用if子句限制对该方法的访问


谢谢。

我们使用私有字段,并且有getter和setter,以便其他类可以访问这些私有字段。如果我在一个项目中有两个类,比如Car.java和Driver.java,我们希望Driver对象能够访问Car.java中的私有字段“wheel”(否则,驾驶员不能驾驶汽车)。但是,如果字段是私有的,则只能使用返回字段值的getter方法访问它。setter允许外部类更改字段的值。通过将字段设置为公共字段(或受保护字段,如果合适),而不是私有字段,可以避免使用getter和setter。

它允许您控制对内容的访问。。。。。通过封装对一段数据的访问,您可以自由地更改该数据所在的位置,甚至可以使其可计算。也就是说,不返回字段的值,而是进行一些计算


但是,与getter和setter一样好的是,如果你使用它们太多,那么这表明你没有得到一个对象来完成你需要的工作。

如果允许任何人编辑类中的变量,那么很糟糕的事情就会发生。(例如,如果一个不小心的用户将分母更改为零,我们可能会破坏整个宇宙[或者得到一个零除错误])。通过定义
get()
set()
方法,您(程序员)可以准确地定义其他人如何与您的变量交互。

自动、不经思考地为每个变量创建
getX()
setX()
方法的做法是不好的。正如你所观察到的,这基本上是毫无意义的

但这是不好的,没有思考的部分。方法比公开的变量要好得多,因为正如您所观察到的,您可以控制底层数据的访问方式。如果您考虑一下自己在做什么,并在适当的情况下应用变体和访问器,它们将是一个极好的工具:

  • 您可以将客户端限制为只读取变量,而不写入变量
  • 可以将整数值限制为仅为正值(例如)
  • 您可以确保一个变量始终等于另一个变量值的一半(例如)
  • 您可以确保,变量的值在任何时候更改,都会发送一个事件来通知其他客户端
  • 您可以更改基础变量的数据类型,在公共方法中执行转换,并且不中断任何客户端
  • 您可以将同一对象的服务器端版本的对象转换为远程客户端,客户端代码同样不会更改
  • 通过使用
    synchronized
    访问器,可以确保线程之间的内存顺序严格

这些只是您可以使用变异器和访问器进行的一些操作。通过使用它们,您可以使您的软件易于更改和维护。

还有一个好处,如果您使用getter和setter,它允许子类使用更灵活的方法覆盖如何访问信息。

通过一个示例,让我来解释这一点。假设我们有以下类:

class User {
    private String username;
    private String password;
}
现在在一个团队项目中,有多个程序员在工作。程序员A开发了
User
类,程序员B必须在GUI界面上工作。决定的策略是
密码
字段不能少于5个字符。但是除非您没有将数据字段
设置为私有
AB都必须始终检查分配给
密码
字段的新密码的有效性

现在假设在将它们设置为私有后,您实现了以下setter方法:

public boolean setPassword( String temp ) {
    if( temp.length() >= 5 ) {
        this.password = temp;
        return true;
    }
    else {
        return false;
    }
}

这样一来,A只需对其编码一次,B只需使用它,而不用担心策略。这总是鼓励你遵循“干”(不要重复你自己)的规则

Setter和Getter方法基本上用于限制其他人进行任何更改。在Java语言中,我们提供了数据隐藏的概念。这是通过get和set方法实现的。

如果您可以使用getter和setter访问它们,为什么要将它们设置为私有呢。为什么不仅仅是公共的。如果你想阻止特定的类能够获取/设置它们,那么你就把它们设为私有的。如果它们有getter和setter,所有的类都可以通过它们访问它们。这时你就可以保护字段
<代码>受保护的变量只能由该类的子类访问,也就是说,不是每个类都可以访问它们。我知道我的观点是为什么私有。。我最初认为隐私是为了隐私。但事实并非如此。谢谢。正如我所说,它主要是一个编程工具。我的意思是你可以在这上面加上一些限制或其他东西。但是没有隐私保护…非常感谢。这就是我要找的。但总的来说,我看到很多大型项目使用了私有变量,然后添加了非常简单的getter和setter方法,没有任何限制,等等。所以我想知道你是否不想返回一个特定的变量,例如,为什么他们会一次又一次地使用它们。。我知道这些都是旧的惯例,但也许我们应该在某个时候改变这些旧的标准。很多时候,人们做事都不知道为什么,这绝对是其中之一!当y