我对象有一个非常基本的问题。
我在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
答案 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)
了解变量和块的范围;问题是你在一个块中声明了你的变量,并尝试在该块之外引用它,使其超出范围,因此无法识别。