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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑马_许芸 中级黑马   /  2012-8-20 09:16  /  1500 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

今天发现一个好玩的现象。先帖代码
String[] names = file.list(new FilenameFilter()
{
   
   public boolean accept(File dir, String name)
   {
    if(name.endsWith(".java"))
    {
     return true;
    }
    return false;
   };
});
在这个匿名内部类中,那个被我标成红色的分号,不管加不加这个分号,程序都是正确的。执行结果也一样。这是什么原因?

评分

参与人数 1技术分 +1 收起 理由
田建 + 1 鼓励一下!!

查看全部评分

4 个回复

倒序浏览
  1. String[] names = file.list(new FilenameFilter()        {   
  2.                    public boolean accept(File dir, String name) {
  3.                            if(name.endsWith(".java")) {
  4.                                    return true;
  5.                                   }
  6.                            return false;
  7.                    }//这个位置的分号,前面对应的是accept方法的{},最好不加
  8.                    });
  9.                 }
复制代码
java中你可以在任何一个一个后面没东西的{或}后面加;
  1. public class test {;

  2.         public test() {//只有这里不能加,因为下面的语句变成第二行,而super()要求在构造器的第一行
  3.                 super();               
  4.         };

  5.         public test(int i) {;
  6.                 System.out.println(i);
  7.         };

  8.         public static void main(String[] args) {;
  9.                 // TODO Auto-generated constructor stub
  10.                 System.out.println(1);
  11.                 new test(5);
  12.                 };
  13. };
复制代码
回复 使用道具 举报
姐姐,这个问题直接可以忽略不计的{:soso_e127:}
语句后面加个;不会影响全局的。
回复 使用道具 举报
java中{}和;都可以作为语句的结束标志,一个分号就相当于一条语句,如果分号前面没有具体代码,就相当于空语句,也是可以的,而除了在一些特殊的地方,比如构造函数的super()前面,甚至可以放好几个;
回复 使用道具 举报
明白了{:soso_e106:}。谢谢大家,问题已解决。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马