黑马程序员技术交流社区

标题: 编译程序时为什么会出现两个.class文件<已解决> [打印本页]

作者: 孟浩然    时间: 2012-6-3 22:22
标题: 编译程序时为什么会出现两个.class文件<已解决>
本帖最后由 孟浩然 于 2012-6-3 22:54 编辑

写了一个很简单的程序,编译以后出现了两个字节码文件,我的源文件是AcceptDemo.java ,编译以后出现AcceptDemo$1.class和AcceptDemo.class ,就是一个简单的过滤指定目录下的文件的程序。

作者: 唐辉辉    时间: 2012-6-3 22:27
造成这个的原因在于,定义了内部类!
请楼主把代码贴出来看下。
作者: 孟浩然    时间: 2012-6-3 22:33
代码就是这:
  1. /*
  2. *练习:过滤某个路径下的指定文件  使用FilenameFilter
  3. *
  4. **/
  5. import java.io.*;

  6. class AcceptDemo{
  7.        
  8.         public static void main(String args[]){
  9.                
  10.                 File f=new File("d:\\");
  11.             FilenameFilter ff=new FilenameFilter(){
  12.             public boolean accept(File dir,String name){
  13.                
  14.                 return name.endsWith(".bmp");
  15.         }
  16.                    
  17.         };
  18.                 String[] arr=f.list(ff);
  19.                 for(String name:arr){
  20.                        
  21.                         System.out.println(name);
  22.                 }
  23.         }
  24.        
  25.        
  26. }
复制代码

作者: cro    时间: 2012-6-3 22:40
FilenameFilter ff=new FilenameFilter(){   //这里有个匿名内部类,所以会生成带$的class文件!

13.            public boolean accept(File dir,String name){

14.               

15.                return name.endsWith(".bmp");





作者: 唐辉辉    时间: 2012-6-3 22:42
本帖最后由 唐辉辉 于 2012-6-3 22:46 编辑

import java.io.*;


class AcceptDemo{

        
        public static void main(String args[]){

               
                File f=new File("d:\\");

            FilenameFilter ff=new FilenameFilter(){

            public boolean accept(File dir,String name){

               
                return name.endsWith(".bmp");

                        }

                    
                };

                String[] arr=f.list(ff);

                for(String name:arr){

                        
                        System.out.println(name);

                }

        }      
        
}

标红的地方为一个匿名内部类。所以才会生产那个AcceptDemo$1.class文件。楼主不用担心,没有什么异常的。
作者: 孟浩然    时间: 2012-6-3 22:45
cro 发表于 2012-6-3 22:40
FilenameFilter ff=new FilenameFilter(){   //这里有个匿名内部类,所以会生成带$的class文件!

13.     ...

嗯! 原来如此,目录里面有好几个
作者: 何拴绪    时间: 2012-6-3 22:46
java文件中一个类中有内部类时编译后就会生成两个字节码文件,AcceptDemo$1.class这是内部类的字节码文件。
作者: 朝哥    时间: 2012-6-3 22:52
小总结:一个源文件如果能通过编译,那么里面有多少个类,就有产生多少class文件!
作者: 梁小波    时间: 2012-6-3 22:53
话说我是看到楼主的名字进来的。{:soso__3943448463613330755_3:}




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