黑马程序员技术交流社区

标题: 【知识普及】为什么if()后不能直接跟变量声明? [打印本页]

作者: 布德鸟    时间: 2016-4-30 21:01
标题: 【知识普及】为什么if()后不能直接跟变量声明?
本帖最后由 布德鸟 于 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








欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2