本帖最后由 布德鸟 于 2016-4-30 21:04 编辑
先花30秒思考一个问题 为什么 第一段代码 编译成功,第二段会报错?
①
if(ture){
int x;
}
②
if(ture)
int x;
好了,不用多想,来看看答案吧。
首先,Java语言规范(JLS)规定:
if语句的定义:if ( Expression ) Statement
是不是意识到了什么? 没错!正如你所想的,局部变量的声明不属于statemen。那我们来看看statement的定义。
Statement包括:
1. Labeled语句
2. If语句
3. If-Else语句
4. While语句
5. For语句
6. 没有跟随子语句的语句:
6.1 块(即{})
6.2 空语句
6.3 Expression语句
6.4 Assert语句
6.5 Switch语句
6.6 Do语句
6.7 Break语句
6.8 Continue语句
6.9 Return语句
6.10 Synchronized语句
6.11 Throw语句
6.12 Try语句
证据确凿,局部变量声明不是一个statement,弄清楚了也就不觉得是什么问题了,不过我们在心里要有一个确切的答案,不能理所当然好像是那样。
*给黑马的建议:黑马java基础教程day03.13里的说明不够准确,希望说明。
参考资料:
为何声明语句不能放在if()的后面?
http://bbs.csdn.net/topics/320093437
|
|