Java - 指出我正确的方向

时间:2014-12-09 16:03:43

标签: java

我正在做一些关于Java的工作,作为我课程的一部分,我坚持的问题是:

考虑以下代码,说明类MyClass,它的实例变量i和j,以及它的单个方法foo:

class MyClass
{
 int i = 0; 
 int j = 10; 

 public void foo() 
 { 
    j = 20;
    {
       int j = 11;
       i = 10;
       j = 10;
    }
    System.out.println("i, j = " + i + ", " + j); 
 } 
}

假设我们构造了这个类的对象并调用它的方法foo,方法foo的输出是什么?

我一直在苦苦挣扎一段时间。起初我认为它与增量运算符或/ while循环有关,但我不确定。

我不是在找人给我答案,但我真的可以在正确的方向上轻推。

2 个答案:

答案 0 :(得分:2)

我已经注释了代码以便更好地理解:

class MyClass
{
 int i = 0; 
 int j = 10; 

 public void foo() 
 { 
    j = 20;
    { // code block 
       int j = 11; // new J only lives till the curly brace ends (local scope)
       i = 10; // i updated 
       j = 10; // the new scoped j variable updated
    } // new scoped j not available now
    // original j (20) and old i with updated value available
    System.out.println("i, j = " + i + ", " + j); 
 } 
}

答案 1 :(得分:0)

您的代码是Shadowing的一个很好的例子。在花括号{...}中,因为你声明/初始化 int j = 11 ;

所以在花括号中,无论你赋予它什么值,它都会在你的代码离开大括号时丢失。

但是,因为'i'仅被声明为实例变量,然后在花括号中初始化,所以它维持在花括号内分配给它的值10并保持在外面花括号。

因此,您的输出将是 i,j = 10,20

阅读Java中的Shadowing。 希望它能回答你的问题..