为什么要在Java的构造函数方法中更改类实例的名称

  • 本文关键字:实例 构造函数 Java 方法 java
  • 更新时间 :
  • 英文 :


我目前正在学习面向对象的java,我很好奇为什么需要在构造函数方法中更改类实例的名称。例如,如果我正在为一辆汽车建模,并且我声明了一个名为isRunning的布尔值,为什么要将构造函数方法中的名称更改为isRunning=carRunning;

如果这是一个愚蠢的问题,很抱歉,但提前谢谢!此外,我是这个网站的新手,所以如果有任何建议,请随时告诉我!

为什么要将构造函数方法中的名称更改为isRunning=carRunning;

您。。。不要。除非你愿意,否则java不在乎。选择您想要的任何标识符。样式指南建议您选择一个使签名有意义的名称(从源文件外部可见的内容:类本身的名称,以及其中所有公共方法的名称、参数类型、返回类型和参数名称(。

一个小原因是出现了阴影。如果你写:

public void foo(String bar) {
}

bar是一个参数,它是方法的"作用域":该变量在方法的持续时间内存在,然后立即消失。对比:

public class Foo {
String bar;
}

这里bar是一个字段,它将在创建new Foo()的那一刻存在,并且在Foo最终被垃圾收集之前永远不会消失。这两个"生命"将相交;总有一天,两者都存在,而且它们是完全分离的。完全无关。Sooo,当你写bar时,这意味着什么?"最接近"的定义"获胜",这就是它的含义。因此:

public class Example {
private String foo;
public Example(String foo) {
}
}

这里有两个不同的东西,完全不相关的东西,巧合的是,它们都被命名为foo。Java对此完全满意,但在该构造函数中,如果您键入foo,它指的是参数,而不是字段,因为它"更近",从某种意义上说,如果您查找{}并向外,它会更近(换句话说,不是字符距离(。

您仍然可以使用this引用名为foo的字段。所以,你可以写:

public class Example {
private String foo;
public Example(String foo) {
this.foo = foo;
}
}

这很好;如果你写了foo = foo;,显然,它没有任何作用。这种风格(使用this.x(实际上是惯用的:这是大多数java程序员所做的,因此,这可能是你应该做的。我可以看到教你java的人希望避免这种复杂情况,避免解释this.目前所做的事情,因此告诉你选择一个不同的名称。然而,从教训上讲,这是一个非常可疑的举动。即糟糕的课程/老师/书本。

最新更新