我目前正在学习面向对象的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.
目前所做的事情,因此告诉你选择一个不同的名称。然而,从教训上讲,这是一个非常可疑的举动。即糟糕的课程/老师/书本。