黑马程序员技术交流社区

标题: 匿名内部类生不生成.class文件 [打印本页]

作者: lzw123451    时间: 2013-3-3 13:37
标题: 匿名内部类生不生成.class文件
匿名内部类生不生成.class文件
匿名内部类要不要加载
作者: wahaha    时间: 2013-3-3 15:08
匿名类会生成.class
应该也要加载的

生成的.class文件中,匿名类会生成OuterClass$1.class文件,数字根据是第几个匿名类而类推
作者: 杨玉辉    时间: 2013-3-3 15:08
我觉得只要你调用,就加载吧 这个被包涵在它所在的外部类中了  是个 钻牛角尖 的人啊 ,哈哈
作者: 孙传磊    时间: 2013-3-3 18:47
本帖最后由 孙传磊 于 2013-3-3 18:57 编辑

至此 一楼 夏添
  其实这也是检查有没有内部类的一个客观的方法。就是要看一个类里有没有内部类,将它编译一下,看生成的文件(如使用的是eclipse 的话该文件在bin文件夹下测试类所对应的包中) 是否有内部类生成的.class文件,名称是“包装类名$内部类名.class”
可以通过下面的测试类证明一下:
package qq;

interface Test{
        void func();
}
class Demo{
        public static void main(String[] args){
                new Demo().show(new Test(){
                        public void func(){System.out.println("匿名内部类1");}                });
                new Demo().show(new Test(){
                        public void func(){System.out.print("匿名内部类2");}                });
        }

        private void show(Test t) {
                t.func();
               
        }
}
我们可以在bin文件夹下找到测试类所对应的qq包中看到新生成的
file:///D:/1.jpg
就是Demo$1.class 和Demo$2.class ,匿名内部类,主要是用到一个类只想使用一次的时才使用的,当程序运行到此就会把它们加载。
作者: 谢冬    时间: 2013-3-7 22:03
肯定会生成class文件 匿名内部类的class文件格式是:外部类名$1.class。因为匿名内部类没有名字 所以在数字后面直接跟着.class 既然生成了class文件当然会加载
作者: 张鹏    时间: 2013-3-8 16:39
会生成,只不过是系统自动命名




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