在方法里的声明变量与代码块

在方法里的声明变量与代码块

先上一小段视频里的代码:

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;会报错,为什么不能声明和代码块里名字相同的变量,代码块里的变量生命周期不是很短吗?代码块结束之时?那这时代码块外面的变量与代码块里面的变量互不干扰吧,只是名字相同却是不同的变量吧?

正在回答

登陆购买课程后可参与讨论,去登陆

3回答

1、首先,我们要弄清作用域范围:

第一个代码块儿中temp的作用范围就是第一个代码块儿。

这个没有疑问。

第二个temp的作用范围是在这个整个方法中,它声明以后整个的方法中。

第三个temp的作用范围是在第二个代码块儿中。

http://img1.sycdn.imooc.com//climg/5cbd6c8800018c3f06450352.jpg

那么问题来了,为什么代码块中声明周期短,不能在代码块儿中声明同名变量呢?

答案是可以:

比如你看第二个temp它就没报错。因为它第一个的作用范围就只是在第一个代码块儿中,执行完第一个它就消失了。就没有叫temp的变量了,那我在外边定义一个,当然没问题。

划重点啦! 那为啥第二个代码块儿中声明第三个同名变量不可以呢?

你可以想啊,第二个作用域是声明后整个的方法区域,这个方法没执行完,它就“死”不了。

那执行第二个代码块儿的时候,这个在外边声明的第二个同名变量temp它还活着啊,它在下边的代码中也能用。这个时候,你再在第二个代码块儿中声明一个同名变量temp,代码它就蒙了,你们说的temp是指上边那个还是里边这个啊。所以它就不允许你这样定义。

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!



提问者 鱼儿0001 2019-04-22 14:38:18

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

我这是抄写视频的代码有的地方抄错了,老师的之前回答把重心放在这上面了。

现在把正确的放上去,别去计较别的部分了。我的问题是在既然代码块里的变量声明周期短,为什么不能在代码块外面声明同名变量?

而且两个普通代码块里面还不都声明了相同数据同名的变量吗?为什么在外面声明就不行

好帮手慕小班 2019-04-22 10:59:17

同学,你好  复制运行提问中的代码有如下的一些问题:

http://img1.sycdn.imooc.com//climg/5cbd2763000183a007580347.jpg

1、代码中最后一个大括号是中文形式的,建议改成英文的大括号。

2、在执行普通代码块1的时候,并没有看到在代码块1的之前有temp这个变量,而int  temp=14;并没有在执行代码块1并没有初始化,普通代码块1运行会报错。

3、代码块中的变量即使生命周期很短,但也是存在的,而int  temp=14;被定义后,作用于整个run方法的范围,而普通代码块2也在run方法的范围内,所以同名变量会冲突。

如果我的回答解决了你的疑惑,请采纳!祝学习愉快

  • 提问者 鱼儿0001 #1
    老师,订正后的代码写在回答区,请重新看一下我的问题,谢谢!
    2019-04-22 14:39:12
  • 提问者 鱼儿0001 #2
    因为之前的代码没有打好,老师把回答重心放在了不必要的部分了,所以我重新写了
    2019-04-22 14:41:14
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师