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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 严旭晟 高级黑马   /  2015-9-29 22:13  /  7004 人查看  /  29 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

5黑马币
关于if语句不加语句块而直接跟【声明语句】或【定义语句】。
  1. int a = 10;
  2. if( a > 5)
  3.   int x;
  4. 编译出错,为什么?
  5. 它的底层的原因是什么?
  6. 不要复制粘贴,Myeclipse的报错信息。
  7. 如果引用了其他资料,请给出该资料的原始链接。
复制代码


29 个回复

正序浏览
因为if结构体不完整,后面少了一对大括号!
回复 使用道具 举报
if语句中,如果没有加{},则默认紧接的后一句为其语句体,在for语句中出现的变量为局部变量,局部变量的出现必须是要有定义和初始化的动作,否则会报错
回复 使用道具 举报
局部变量是运行时调用的,会出现在栈中.编译器为了确保运行时数据类型会不出错,会在编译时确认局部变量是否合法,如果局部变量没有初始化,编译器无法确认会抛出异常.
回复 使用道具 举报
x不用定义初始化值吗?
回复 使用道具 举报
初始化变量x试试
回复 使用道具 举报
如果if语句后面不加语句块,需要在if( a > 5)后面加";"
回复 使用道具 举报
int x;为初始化
回复 使用道具 举报
int x;在if语句块里面,属于局部变量,需要初始化。。。
回复 使用道具 举报
变量x就没定义 怎么使用
回复 使用道具 举报
没有加花括号,int的值没有初始化
回复 使用道具 举报
好吧,在这里又学会了一点呢:”局部变量必须初始化“
回复 使用道具 举报
无论a是否大于5  java是不会进行判断的 它只会去判断后文的X是否有可能没有被定义
回复 使用道具 举报
首先如果只有这个语句是没有编译错误的,你可以不借助编写软件 在doc下直接运行
int a=10;
if(a>5)
int x;
是不会报错了
由于你没有给全代码 我可以做这个判断 你在后面是使用了X的 但是由于是if语句 X可能就没有被定义
而后面又用了X 这样就会导致报错 因为X没有定义
回复 使用道具 举报
再者
  1. if(true)
  2.   new Person().show();
  3. 对于引用型变量,匿名的Person()对象此处即使,调用了show()方法,即该对象已经使用了
  4. 还是会报错。
复制代码
回复 使用道具 举报
即使初始化了还是错误的,只不过两种错误的类型不一样而已。
回复 使用道具 举报
局部变量X需要初始化吧
回复 使用道具 举报
int x=0;要初始化吧
回复 使用道具 举报
显而易见,Java的机制和C语言还是有区别的,C语言允许不初始化变量,可是Java是不行的,要切记啊!
回复 使用道具 举报
if语句后面只有一句执行语句的话,大括号可以省略,这个就不用说了。具体底层其实我也不太懂,我就是靠自己的瞎理解。我的理解是这样的:运行程序的顺序是,定义一个变量a为10,开始判断,如果a大于5的话,我们满足这个条件,那就继续运行,定义一个x。那定义x干嘛?x等于几?根本没有意义呀。这你让虚拟机如何给你搞,把这个x给你存在哪?因为这又是个局部变量,一出if语句,x就没有了,存等于没存。就跟for()语句里一样,如果你是int x而没有赋值的话,那如果你打for(x;x<10;x++)这就肯定是个错的了。
回复 使用道具 举报
0.oo~Heart 发表于 2015-9-29 23:18
编译出错应该是if小括号后边没加分号

if后如果只跟一个语句是不用加{}的
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马