public class Cat {

int age;
int weight;
public Cat() {

}


public static void main(String[] args) {
for(int i=0; i<10; i++) {
Cat cat = new Cat();
}
}
}这个有问题么?  循环创建了10个类的实例不都重名了么?

解决方案 »

  1.   

    cat的作用域就在那个花括号内,循环一次就出了作用域
      

  2.   

    那不还是每次都在栈内存中创建一个cat对象指向堆内存么?10个cat对象在内存中是怎么存储的
      

  3.   

    每次在堆中会创建一个对象,但栈中的引用只有一个,它会被重用。java声明一个变量并不会一直去分配,在编译的时候,要分配多少个变量就已经确定了http://www.ticmy.com/?p=151看  局部变量区  那个循环例子的解说
      

  4.   

    Java作用域在方法中是不能嵌套的。
    在Java中,方法内的一个变量的作用域(包括方法参数)是从它定义的地方开始,直到它所在的作用域的结束位置。
    比如,在方法开始定义了变量i,那么直到方法结束都不能再定义另一个i了。再比如在一个for语句中定义了变量i,那么在这个for循环内不能再有同名变量,但出了for循环之后,是可以再次定义的。这就是作用域不能嵌套的意思。
    在c/c++中,作用域可以嵌套,比如:
    int i;
    {
    int i;
    {
    ......可以无限制地嵌套下去,这里每对大括号之间就是一个独立的作用域
    }
    }再深入一点,在Java中,类与方法之间作用域是可以嵌套的,把类看做一个大的作用域,它定义的字段(或叫域)可以被方法中的同名字段所屏蔽,其行为类似于上面将的c/c++的作用域嵌套。