黑马程序员技术交流社区
标题: 很难解释的编译错误 [打印本页]
作者: 郑彬 时间: 2012-8-22 11:29
标题: 很难解释的编译错误
if(file.isDirectory()){
File[] files = file.listFiles();
}为什么这样写编译正确
if(file.isDirectory())
File[] files = file.listFiles();
这样写就编译错误呢?不就是少了大括号吗?也是条件语句啊。
作者: 黄敏 时间: 2012-8-22 11:39
把你的代码贴全了,才看的清楚啊
作者: 黑马王建伟 时间: 2012-8-22 11:57
估计你的if判断语句中并不是只有这一句吧,所以了,楼主这是故意的吗,再考我们?
作者: 陈鑫 时间: 2012-8-22 12:03
Java Language Specification 明确指出局部变量声明的作用范围是在一个块内,也可以理解为在{ }内。当你用if()后面不加大括号时,即意味着没有块而是一个单个语句,所以发生冲突。也就是说if后面不用大括号的话,就不能声明局部变量。
作者: 黄敏 时间: 2012-8-22 12:06
我认识是这样的
if(file.isDirectory())
File[] files = file.listFiles();
jvm识别的才是if里面的语句
你要是这样写
if(file.isDirectory())
File[] files = file.listFiles();
jvm认为你这两平起平坐的,执行if这条语句发现后面没有语句体了也没有结束符;就提示错误了
你在书写规范上犯错;
为了不发生这样的错误,建议不管if体内有几条语句都有{}括起来,看着也好看。
作者: 黑马王建伟 时间: 2012-8-22 12:20
jvm认为你这两平起平坐的,执行if这条语句发现后面没有语句体了也没有结束符;就提示错误了
看了楼上的,我不知道怎么说了,简单说- public static void main(String[] args) {
- //就差一个制表符的位置,就不运行了吗?不是这样的,如果不加大括号的话,if就会自动识别并只识别且执行第一句,跟制表符无关,希望楼上把这个搞明白
- if(true)
- System.out.println("a");
- if(false)
- System.out.println("aa");
- if(true)
- System.out.println("b");
- if(false)
- System.out.println("bb");
- }
复制代码
作者: 黑马王建伟 时间: 2012-8-22 12:21
为了不发生这样的错误,建议不管if体内有几条语句都有{}括起来,看着也好看。
不过楼上说的这句是没错的
作者: 黄敏 时间: 2012-8-22 12:33
黑马王建伟 发表于 2012-8-22 12:20
看了楼上的,我不知道怎么说了,简单说
你的if判断有意义吗?
作者: 黄敏 时间: 2012-8-22 12:33
黑马王建伟 发表于 2012-8-22 12:20
看了楼上的,我不知道怎么说了,简单说
可能是我说错了吧
作者: 李知伦 时间: 2012-8-22 12:39
问题应该出在如果不加大括号,编译器分不清File[] files的所属
可以改为提前定义File[] files = null;,这样你下面怎么写都没关系了
作者: 郑彬 时间: 2012-8-25 20:22
问题已经解决
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |