出于好奇,为什么有时在编译后为类生成多个Java .class文件?例如,我的应用程序有六个类.对于一个类,总共生成了10个.class文件,从MyClass#1开始到MyClass#10.
我正在分析一个java应用程序,并且分配的最大数量的对象具有名称
com.x.y.ClassName$5
.
netbeans profiler和yourkit都使用相同的命名约定.我很遗憾如何谷歌命名问题.
什么是$5
课后名称?
编辑:似乎5美元是第五个匿名类声明.我在生成的类上使用了javap来查找哪个是第五个匿名类.参考中找到如何编译的类名称相匹配Java中的枚举成员?
这个对另一个问题的回答表明,作为通过反思找到匿名类的一种解决方法,只需尝试所有名称,从开始...$1
计算直到找不到更多.这是保证找到所有内部类,还是有可能从0开始或者某些数字被遗漏(无论出于何种原因)?
就在今天,我需要一种在不同对象之间传递函数的方法.我很快就知道你不能直接用Java做到这一点,但是你可以传递一个显然被称为"匿名内部类"的wht实例,如下所示:
要定义类:
interface MyCallback {
public int execute(int i1, int i2);
}
Run Code Online (Sandbox Code Playgroud)
要创建它的实例:
MyCallback callback = new MyCallback() {
public int execute(int i1, int i2) {
return i1 + i2;
}
};
Run Code Online (Sandbox Code Playgroud)
并称之为:
int sum = callback.execute(1, 2); // Sets sum to 3.
Run Code Online (Sandbox Code Playgroud)
很简单.但我不明白为什么它被称为"匿名".我不是只给它起名字MyCallback吗?一个被命名的东西不能匿名,对吗?请帮助我摆脱对这个术语的困惑.
在成功创建一些applet之后,我将它们嵌入到网页中,并发现必须包含所有类文件.留一个,它将无法正常工作.
在Applet的几次迭代之后,有几个类文件:
filename .class
filename $ 1.class
filename $ 2.class等.
我尝试只使用文件名 .class,尝试了最后一个,尝试了第一个和最后一个...但是,正如我所说,所有类文件必须包含在网页中.
问题:
1)文件名 $ n.class(n =某些数字)文件似乎是在Eclipse的一时兴起创建的 - 有没有对此的解释(我搜索没有成功)?
2)即使类文件只有~4kb,我如何进行清理,如吹走所有文件名 $ n.class文件,仍然能够嵌入网页?
有什么建议?
谢谢