A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 王军行 于 2014-3-30 21:02 编辑
  1.    class Demo{
  2.         
  3.         public static void main(String[] args){
  4.                 int num = 4;
  5.                 if( num > 0 ){
  6.                     int x = 10;
  7.                 }

  8.                 if( num > 0 )
  9.                    int x = 10;
  10.         
  11.         }
  12.    
  13.    }
复制代码

报错,应该咋么解释,希望有人能给出准确答案..
别纠结书写习惯问题了,我自己是写不出这样的代码的,这时网络上来的一道面试题

评分

参与人数 1技术分 +1 收起 理由
朱神必 + 1

查看全部评分

12 个回复

倒序浏览
这个程序想实现什么
回复 使用道具 举报
C语言里面,if后面直接跟一句话就是if的执行语句,但java里最好还是加上“{   }”

评分

参与人数 1技术分 +1 收起 理由
朱神必 + 1

查看全部评分

回复 使用道具 举报
是的,如果在if表达式后,只有一个语句,可以不使用花括号将其括起来!你这报错的原因是有两个x吧。。。

评分

参与人数 1技术分 +1 收起 理由
朱神必 + 1

查看全部评分

回复 使用道具 举报
if语句没有错误,你定义了两次x变量。
回复 使用道具 举报
wuyuecns 发表于 2014-3-28 21:54
这个程序想实现什么

为了找出加{}和不加{}的区别;
回复 使用道具 举报
haixian 发表于 2014-3-29 10:50
if语句没有错误,你定义了两次x变量。

没有定义两次,第一次定义在除了{}后就失效了
回复 使用道具 举报
水蓝 中级黑马 2014-3-29 11:17:24
8#
王军行 发表于 2014-3-29 10:58
没有定义两次,第一次定义在除了{}后就失效了

请问楼主,if后面,直接定义一个int x,这个int x有意义吗?能在其它地方被调用吗?显然是不可以的。
所以从语言设计的角度来说,你这种局部变量定义是无意义的,因为它在if的作用域中,啥都没干,就结束了。
所以,你只能在if之前定义变量,在if中去赋值。
如果你不确定,可以吧上面一个if去掉(上面if对你的问题判断产生了干扰)
如下代码:
  1. public static void main(String[] args){
  2.                 int num = 4;
  3.                 if( num > 0 )
  4.                    int x = 10;   //依然报错
  5.         }
复制代码

这边,if内依然是报错的。与之前定义的x无关。
回复 使用道具 举报
看上去很简单的一个问题,但我也解释不清楚,第二个x放在括号里面就不会报错,我已自己的角度来看,第二个x的声明是没有意义 的
回复 使用道具 举报
不加{}默认是只有一句的,我认为是编译器认为声明变量没有意义,但查了下百度才知道

你声明变量的时候,应该确认你这个变量的作用域,很显示这行语句的作用域取决于上边的IF语句,但是你却没有规定IF语句的作用域,也就是{},你把IF语句删掉了,很显然,他的作用域变成了TRY{},所以你是删还是加都是对的,不过这种错还是你写作习惯不好,你要是IF语句作用域范围内不管有几行代码,你都加上{}就不会出现这种问题了



Java Language Specification 明确指出局部变量声明的作用范围是在一个
块内,也可以理解为在“{  }”内。for 循环可以不使用“{ }”的,但仅限于
执行语句(其中并不包括变量声明语句)
回复 使用道具 举报
if后不加{}时,不能申明变量,如果可以申明变量又不用就浪费资源了,所以它就禁止了。但对已申明变量进行相关操作时等,不会报错。(个人理解)
回复 使用道具 举报
形成一个良好的书写习惯是减少纠结的必经之路。。
回复 使用道具 举报
弄明白了,int x = 10; 在eclipse中调试时发现是按照int x; x = 10; ;两句来解读的,也就是int x 定义算一句,归属到if语句之中,x = 10 在外面,这样x就是未定义的变量报错
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马