class Myclass{
int x;
Myclass (int i){
x = i;
}
}
这是我书中的代码。我想知道这段代码是否有效?
class Myclass{
int x;
Myclass (x)
}
我也可以试试
class Myclass{
int x;
Myclass (int x)
}
回应我的第一个回答......这会有效吗?
答案 0 :(得分:1)
后面的代码不起作用,因为在Java中你必须明确说明类型。 (没有隐式类型声明)
答案 1 :(得分:0)
您可以使用与实例变量同名的参数或局部变量,是。在这种情况下,参数或局部变量将遮蔽实例变量。要在这种情况下引用实例变量,请使用:
this.x
例如,看到这种模式很常见:
class MyClass {
private int x;
public MyClass(int x) {
this.x = x;
}
}
请注意,正如Josh M指出的那样,不可能省略该类型。如果这就是你的问题,那么不,你可能没有。
答案 2 :(得分:0)
这将编译:
class Myclass {
int x;
Myclass (int x) {
}
}
但是,执行此操作时,最终会得到两个具有相同名称的变量,实例变量x
,它们可以在构造函数(或任何其他类方法)中显式引用为{{1} },以及构造函数本地的局部参数变量this.x
。如果您只是在构造函数中引用x
,那么您将获得本地的x
。这被称为变量阴影。
即使你决定在源代码中给这两个变量赋予相同的名称,但在编译器生成的代码中它们完全不相关。您也可以将参数命名为y。
尝试这样做的实验可能有助于理解这一点,即为变量提供不同的类型。例如,将实例变量设为boolean
。然后你可以尝试不同的东西,看看它们确实是完全不同的变量,恰好具有相同的名称。
答案 3 :(得分:0)
@Chris Hayes'和@Samuel Edwin Ward的答案,这是一招。
class MyClass {
private int x;
public MyClass(final int x) {
this.x = x;
}
}
final
修饰符告诉编译器无法修改 x
。如果你不小心写了
class MyClass {
private int x;
public MyClass(final int x) {
x = x; // Oopsie!
}
}
编译器会抱怨。