java作用域以{}来鉴定 java中不能嵌套定义变量如:
这样是错误的 提示已经在main里定义过了
在第一个{}里已经定义了s所以他的作用域在第2个{}也可用的 但是如果第二个定义了s外部不能使用的因为作用域有效范围是在他的{开始定义出到--}处 如:
这样是错误的提示找不到符号s
特别注意
没加{} 编译时候会提示不是语句错误
因为局部变量声明不算语句 如果加上{}成了语句块block就对了.
可以这么理解 从实际出发的,在if(true)后,只做定义一个变量(赋值)的操作,这个变量以后也不能用,这么定义变量没有意义。所以,就直接抛一个compile error。而加上{}后可能以后会在{}里使用他 所以不会提示出错.
所以我们在写if 等即时后面是单语句也都记得加{}.
public class Hello
{
public static void main(String[] args)
{
String s = new String("a");
if(true)
{
String s = new String("b");
}
System.out.println(s);
}
}
这样是错误的 提示已经在main里定义过了
在第一个{}里已经定义了s所以他的作用域在第2个{}也可用的 但是如果第二个定义了s外部不能使用的因为作用域有效范围是在他的{开始定义出到--}处 如:
public class Hello
{
public static void main(String[] args)
{
if(true)
{
String s = new String("a");
}
System.out.println(s);
}
}
这样是错误的提示找不到符号s
特别注意
public class Hello
{
public static void main(String[] args)
{
if(true)
String s = new String("a");
}
}
public class Hello
{
public static void main(String[] args)
{
if(true)
int a = 2;
}
}
没加{} 编译时候会提示不是语句错误
因为局部变量声明不算语句 如果加上{}成了语句块block就对了.
可以这么理解 从实际出发的,在if(true)后,只做定义一个变量(赋值)的操作,这个变量以后也不能用,这么定义变量没有意义。所以,就直接抛一个compile error。而加上{}后可能以后会在{}里使用他 所以不会提示出错.
所以我们在写if 等即时后面是单语句也都记得加{}.