在方法里的声明变量与代码块
先上一小段视频里的代码:
public void run(String name) {
{
System.out.println("我是普通代码块1,temp="+temp);
}//普通代码块
int temp=14;
System.out.println(name+"快跑");
{
int temp=13;
System.out.println("我是普通代码块2,temp="+temp);
}//普通代码块2
}
我不理解,为什么在方法里声明初始化的 int temp=14;会报错,为什么不能声明和代码块里名字相同的变量,代码块里的变量生命周期不是很短吗?代码块结束之时?那这时代码块外面的变量与代码块里面的变量互不干扰吧,只是名字相同却是不同的变量吧?
正在回答
1、首先,我们要弄清作用域范围:
第一个代码块儿中temp的作用范围就是第一个代码块儿。
这个没有疑问。
第二个temp的作用范围是在这个整个方法中,它声明以后整个的方法中。
第三个temp的作用范围是在第二个代码块儿中。
那么问题来了,为什么代码块中声明周期短,不能在代码块儿中声明同名变量呢?
答案是可以:
比如你看第二个temp它就没报错。因为它第一个的作用范围就只是在第一个代码块儿中,执行完第一个它就消失了。就没有叫temp的变量了,那我在外边定义一个,当然没问题。
划重点啦! 那为啥第二个代码块儿中声明第三个同名变量不可以呢?
你可以想啊,第二个作用域是声明后整个的方法区域,这个方法没执行完,它就“死”不了。
那执行第二个代码块儿的时候,这个在外边声明的第二个同名变量temp它还活着啊,它在下边的代码中也能用。这个时候,你再在第二个代码块儿中声明一个同名变量temp,代码它就蒙了,你们说的temp是指上边那个还是里边这个啊。所以它就不允许你这样定义。
如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
public void run(String name) {
{
int temp=12;
System.out.println("我是普通代码块1,temp="+temp);
}//普通代码块
int temp=14;
System.out.println(name+"快跑");
{
int temp=13;
System.out.println("我是普通代码块2,temp="+temp);
}//普通代码块2
}
我这是抄写视频的代码有的地方抄错了,老师的之前回答把重心放在这上面了。
现在把正确的放上去,别去计较别的部分了。我的问题是在既然代码块里的变量声明周期短,为什么不能在代码块外面声明同名变量?
而且两个普通代码块里面还不都声明了相同数据同名的变量吗?为什么在外面声明就不行
- 参与学习 人
- 提交作业 3802 份
- 解答问题 11489 个
本阶段带你迈入Java世界,学习Java必备基础知识,基础语法、面向对象思想以及常用工具类的使用。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星