关于Java语法的基本问题

时间:2012-12-11 20:52:09

标签: java

我正在尝试理解以下有效的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;
  }
  }

谢谢,抱歉这些基本问题

6 个答案:

答案 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。)thisthis.bump是否必要?

没有

  

同样,this.bump(this.y,x)是对的吗?