黑马程序员技术交流社区
标题:
编译程序时为什么会出现两个.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
代码就是这:
/*
*练习:过滤某个路径下的指定文件 使用FilenameFilter
*
**/
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);
}
}
}
复制代码
作者:
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