我正在尝试理解以下有效的Java代码。我有两个问题,在代码中有注释。
class C {
C x; //1.) why is something like x = new C(); not required here? Does this
//mean x refers to this current class of C?
int f;
void run(boolean b, int x) {
C y;
y = new C();
if (b) { this.bump(y,x); } //2.) Is "this" in this.bump necessary? Likewise,
//this.bump(this.y,x) would be equivalent right?
else { f = this.x.f + 1; }
}
void bump(C z, int j) {
z.f=j;
}
}
谢谢,抱歉这些基本问题
答案 0 :(得分:10)
1.) why is something like x = new C(); not required here?
x只是未初始化的参考。如果你想使用它,你确实需要为它分配一些东西。
2.) Is "this" in this.bump necessary?
没有。 this
引用当前对象,因为x
是当前对象的成员,在这种情况下您不需要它。
2a) Likewise, this.bump(this.y,x) would be equivalent right?
没有。 y
是一个局部变量,您无法使用this.y
访问它。
答案 1 :(得分:3)
这一个:
C x;
在类型x
的类C
中声明一个名为C
的字段。该语句未设置字段x
的任何初始值。它与C x = null
;
那一个:
this.bump(y,x);
this
在这里过分了。仅使用bump(y,x);
this.y
无法编译,因为y
是一个局部变量(在方法中),而不是一个字段。
答案 2 :(得分:0)
C x;
表示您已声明了一个名为x的C类变量。您尚未通过调用x = new C();
在同一个类中调用成员方法时,不需要使用this关键字。
this.bump(this.y,x)
不是你想象的那样,因为y是局部变量(run方法的本地变量)而不是类成员,所以你实际上得到了一个编译错误。
答案 3 :(得分:0)
1)。
C x
此处未提及任何内容。但是如果你指定它,它将引用某些类型C
的类。这可能是当前的类,但也可能引用另一个类。
例如,如果C
是一个类Person
,x可以引用这些人妈妈,爸爸,朋友等......
2.)
不,它不需要那里因为没有以相同方式命名的局部变量。它的等价物。
答案 4 :(得分:0)
1)new
在堆上而不是堆栈上分配内存
2)this
中的this.bump
不是必需的。 this.bump(this.y,x)
不等同,因为class C
没有名为y
的成员变量
答案 5 :(得分:0)
1。)为什么这里不需要
x = new C();
这样的东西?
默认情况下,引用为null
。由程序员决定是否需要初始化引用以指向某个对象。
这是否意味着x指的是当前的C类?
此处,x
是对类C
的某个实例的引用。引用可以是(并且是)null
。
2。)
this
中this.bump
是否必要?
没有
同样,
this.bump(this.y,x)
是对的吗?
是