java学习笔记2020.1.1
变量声明不是语句
class test{
public static void main(String in[]){
if(true)
int b;
}
}
为什么这种写法是错误的?解释如下:
if语句的定义
if ( Expression ) Statement
而Statement的定义如下:
Statement包括:
没有跟随子语句的语句
Labeled语句
If语句
If-Else语句
While语句
For语句
再来看 没有跟随子语句的语句 的定义:
StatementWithoutTrailingSubstatement:
块
空语句
Expression语句
Assert语句
Switch语句
Do语句
Break语句
Continue语句
Return语句
Synchronized语句
Throw语句
Try语句
由此看来,局部变量的声明不包括在statement的定义中,因此不是一个statement(仅仅一个单独的声明毫无意义),但一个块却是一个statement。
同时,在C/C++语言中,如果在case语句后紧跟一个变量声明,如下:
switch(a)
{
case 1:
int a; //定义性声明
a = 10; //赋值
break;
case 2:
break;
default:
break;
}
此时编译会报错:
a label can only be part of a statement and a declaration is not a statement(标签只能是语句的一部分,声明不是语句。)
这也印证了前述观点。