A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 郑彬 中级黑马   /  2012-8-22 11:29  /  2231 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

if(file.isDirectory()){
File[] files = file.listFiles();
}为什么这样写编译正确
if(file.isDirectory())
File[] files = file.listFiles();
这样写就编译错误呢?不就是少了大括号吗?也是条件语句啊。

10 个回复

倒序浏览
把你的代码贴全了,才看的清楚啊
回复 使用道具 举报
估计你的if判断语句中并不是只有这一句吧,所以了,楼主这是故意的吗,再考我们?
回复 使用道具 举报
Java Language Specification 明确指出局部变量声明的作用范围是在一个块内,也可以理解为在{ }内。当你用if()后面不加大括号时,即意味着没有块而是一个单个语句,所以发生冲突。也就是说if后面不用大括号的话,就不能声明局部变量。
回复 使用道具 举报
我认识是这样的
if(file.isDirectory())
         File[] files = file.listFiles();
jvm识别的才是if里面的语句
你要是这样写
if(file.isDirectory())
File[] files = file.listFiles();
jvm认为你这两平起平坐的,执行if这条语句发现后面没有语句体了也没有结束符;就提示错误了
你在书写规范上犯错;
为了不发生这样的错误,建议不管if体内有几条语句都有{}括起来,看着也好看。
回复 使用道具 举报

jvm认为你这两平起平坐的,执行if这条语句发现后面没有语句体了也没有结束符;就提示错误了

看了楼上的,我不知道怎么说了,简单说
  1.         public static void main(String[] args) {
  2.                 //就差一个制表符的位置,就不运行了吗?不是这样的,如果不加大括号的话,if就会自动识别并只识别且执行第一句,跟制表符无关,希望楼上把这个搞明白
  3.                 if(true)
  4.                 System.out.println("a");
  5.                 if(false)
  6.                 System.out.println("aa");
  7.                 if(true)
  8.                 System.out.println("b");
  9.                 if(false)
  10.                 System.out.println("bb");
  11.         }
复制代码
回复 使用道具 举报

为了不发生这样的错误,建议不管if体内有几条语句都有{}括起来,看着也好看。

不过楼上说的这句是没错的
回复 使用道具 举报
黄敏 中级黑马 2012-8-22 12:33:05
8#
黑马王建伟 发表于 2012-8-22 12:20
看了楼上的,我不知道怎么说了,简单说

你的if判断有意义吗?
回复 使用道具 举报
黄敏 中级黑马 2012-8-22 12:33:55
9#
黑马王建伟 发表于 2012-8-22 12:20
看了楼上的,我不知道怎么说了,简单说

可能是我说错了吧
回复 使用道具 举报
问题应该出在如果不加大括号,编译器分不清File[] files的所属

可以改为提前定义File[] files = null;,这样你下面怎么写都没关系了
回复 使用道具 举报
问题已经解决
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马