创建类的实例问题

zclih2 2012-10-18 09:13:03
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个类的实例不都重名了么?
...全文
77 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhaoming262350 2012-10-18
  • 打赏
  • 举报
回复
Java作用域在方法中是不能嵌套的。
在Java中,方法内的一个变量的作用域(包括方法参数)是从它定义的地方开始,直到它所在的作用域的结束位置。
比如,在方法开始定义了变量i,那么直到方法结束都不能再定义另一个i了。再比如在一个for语句中定义了变量i,那么在这个for循环内不能再有同名变量,但出了for循环之后,是可以再次定义的。这就是作用域不能嵌套的意思。
在c/c++中,作用域可以嵌套,比如:
int i;
{
int i;
{
......可以无限制地嵌套下去,这里每对大括号之间就是一个独立的作用域
}
}

再深入一点,在Java中,类与方法之间作用域是可以嵌套的,把类看做一个大的作用域,它定义的字段(或叫域)可以被方法中的同名字段所屏蔽,其行为类似于上面将的c/c++的作用域嵌套。
龙四 2012-10-18
  • 打赏
  • 举报
回复
每次在堆中会创建一个对象,但栈中的引用只有一个,它会被重用。java声明一个变量并不会一直去分配,在编译的时候,要分配多少个变量就已经确定了

http://www.ticmy.com/?p=151看 局部变量区 那个循环例子的解说

[Quote=引用 5 楼 的回复:]

引用 3 楼 的回复:

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

引用 2 楼 的回复:

引用 1 楼 的回复:

注意作用域

什么意思啊?今晚看书看的头有点晕

那不还是每次都在栈内存中创建一个cat对象指向堆内存么?10个cat对象在内存中是怎么存储的
[/Quote]
zclih2 2012-10-18
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

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

引用 2 楼 的回复:

引用 1 楼 的回复:

注意作用域

什么意思啊?今晚看书看的头有点晕
[/Quote]
那不还是每次都在栈内存中创建一个cat对象指向堆内存么?10个cat对象在内存中是怎么存储的
LogicTeamLeader 2012-10-18
  • 打赏
  • 举报
回复
你创建的这10个对象,出了循环都进了垃圾堆,一个也用不上了。

[Quote=引用楼主 的回复:]
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个类的实例不都重名了么?……
[/Quote]
龙四 2012-10-18
  • 打赏
  • 举报
回复
cat的作用域就在那个花括号内,循环一次就出了作用域

[Quote=引用 2 楼 的回复:]

引用 1 楼 的回复:

注意作用域

什么意思啊?今晚看书看的头有点晕
[/Quote]
zclih2 2012-10-18
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

注意作用域
[/Quote]
什么意思啊?今晚看书看的头有点晕
龙四 2012-10-18
  • 打赏
  • 举报
回复
注意作用域

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧