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

为什么要在Java的构造函数方法中更改类实例的名称?,java,Java,我目前正在学习面向对象java,我很好奇为什么需要在构造函数方法中更改类实例的名称。例如,如果我正在为一辆汽车建模,并且我声明了一个名为isRunning的布尔值,那么为什么要将构造函数方法中的名称更改为isRunning=carRunning 对不起,如果这是一个愚蠢的问题,但提前感谢! 另外,我是这个网站的新成员,所以如果有任何建议,请随时告诉我 为什么要将构造函数方法中的名称更改为isRunning=carRunning 你。。。不要。除非你愿意,否则java不在乎。选择您想要的任何标识符

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

对不起,如果这是一个愚蠢的问题,但提前感谢! 另外,我是这个网站的新成员,所以如果有任何建议,请随时告诉我

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

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

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

public void foo(String bar) {
}
bar
是一个参数,它的作用域是方法:该变量在方法期间存在,然后立即消失。与之相比:

public class Foo {
   String bar;
}
这里的
bar
是一个字段,它将在创建
new Foo()
时存在,并且在该Foo最终被垃圾回收之前永远不会消失。这两个“生命周期”将相交;总有一天两者都会存在,而且它们是完全分离的。完全无关。所以,当你写
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=fooThis.x
)实际上是惯用的:这是大多数java程序员所做的,因此,可能是您应该做的。我可以看到教java的人是如何避免这种复杂化,避免解释
这个。
现在做了什么,从而告诉您选择一个不同的名称。然而,从教学角度讲,这是一个非常可疑的举动。i、 e.糟糕的课程/老师/书本。

您指的是参数名还是实例变量名?你能举一个简短的例子来说明你在这里指的是什么吗?所有的java都是面向对象的。@NomadMaker不,java主要是面向对象的,但不完全是面向对象的。
static
和primitive value都不是面向对象的。请编辑您的问题以使其清晰,以便可以重新打开,这样您就可以接受似乎对您有用的答案。回答第一条评论。这个网站是一个知识库,而不是一个随意的聊天论坛。我正在学习的课程是Codecademy的一部分,这是一个有用的课程,直到那时我才理解。谢谢你的解释!