黑马程序员技术交流社区

标题: 匿名内部类 [打印本页]

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

作者: 李知伦    时间: 2012-8-20 09:38
  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. };
复制代码

作者: 高薇    时间: 2012-8-20 11:01
姐姐,这个问题直接可以忽略不计的{:soso_e127:}
语句后面加个;不会影响全局的。
作者: 广驰    时间: 2012-8-20 11:29
java中{}和;都可以作为语句的结束标志,一个分号就相当于一条语句,如果分号前面没有具体代码,就相当于空语句,也是可以的,而除了在一些特殊的地方,比如构造函数的super()前面,甚至可以放好几个;

作者: 黑马_许芸    时间: 2012-8-20 15:14
明白了{:soso_e106:}。谢谢大家,问题已解决。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2