Java Basics:Object和if子句

时间:2012-03-10 14:17:57

标签: java

我对象有一个非常基本的问题。

我在main方法的if()语句中创建对象。 (还有一个,所以它总会被创建。)

Object有一个print()方法,它工作正常,但是当我把myobject.print()放在创建它的if()子句之外时,我得到一个错误:“找不到符号”。

我想我犯了一个愚蠢的初学者错误,但是if()子句中的myobject.print()会正常工作,所以我的问题是,我的对象发生了什么? (主要方法之间没有做任何其他事情......)

  else default to 20, 10, and fill randomly 1/4
  {
    int a = 20;
    int b = 10;
    Table myTable = new Table(a,b);
    myTable.randomfill(Math.round((a*b)/4)); //round in case defaults change later
    System.out.println("Printing Table .... ");
    myTable.print();  <-- here it works
  }

  //always print !!
  System.out.println("Printing Table .... ");
  myTable.print(); <-- won't work

4 个答案:

答案 0 :(得分:2)

其他人说的话。如果您有以下内容:

if (x == y) {
    MyObject obj = new MyObject();
}

一旦您离开obj的{​​{1}},我们就无法定义{}

要使对象可以在“外部”访问,您可以:

if

(请注意,您不要在MyObject obj = null; if (x == y) { obj = new MyObject(); } 内“声明”obj - 您不在领先{}

答案 1 :(得分:1)

myTable仅限于else块。在其他块完成后,它是不可见的。如果要在else块之外访问它,可以在else块之外定义myTable,并在else块内为其分配对象。

Table myTable =null;
else default to 20, 10, and fill randomly 1/4 
  { 
    int a = 20; 
    int b = 10; 
    myTable = new Table(a,b); 
    myTable.randomfill(Math.round((a*b)/4)); //round in case defaults change later 
    System.out.println("Printing Table .... "); 
    myTable.print();  <-- here it works 
  } 

  //always print !! 
  System.out.println("Printing Table .... "); 
if(myTable != null){  //Make sure myTable is not null.
  myTable.print(); <-- won't work 
}

答案 2 :(得分:1)

像myTable这样的局部变量在您声明它的代码块中具有范围(仅可见)。代码块是最内层的花括号,所以myTable只能用到else块的末尾。

如果你想在else块之后看到它,你需要在你的if之前取消它。类似的东西:

Table myTable = new Table(a,b);
if (some condition) {
    // code removed
} else default to 20, 10, and fill randomly 1/4 {
    // code removed
}
// myTable now visible here and until the end of this block

答案 3 :(得分:0)

了解变量和块的范围;问题是你在一个块中声明了你的变量,并尝试在该块之外引用它,使其超出范围,因此无法识别。