我想我了解Anonymous类的基础知识,但我想澄清一些内容。当我有这样的语法时
class A
{
class AnonymousClass1 Implements ActionListener{}
}
class A
{
public A()
{
JButton btn = new JButton();
btn.addActionListener( new ActionListener(){} );
}
}
如果匿名类实际上是类A的内部类,如第一个示例所示:理论上,语义正确吗?
到底会发生什么?我认为在编译Java文件时,将为匿名类创建一个.class文件,以便可以对其进行引用(但我找不到它)。当实例化A对象时,它创建一个按钮对象,然后btn调用addActionListener()方法,该方法实际上将类似btn.addActionListener(new AnonymousClassOne())
AnonymousClassOne的内容传递给编译器提供的通用名称。
如果没有发生什么?谢谢。
Anonymous
可以通过美元符号及其后面的数字识别类Class$1.class
。这些类只是为了您自己的方便。想象一下:
class SaveButtonListener implements ActionListener {
...
}
class OpenButtonListener implements ActionListener {
...
}
这是非常乏味的。因此,您可以立即使用匿名类创建实现。编译器会在名称前加上美元符号,并在其后提供一些标识符。
幕后发生的事情是Java
使用自动生成的名称创建了一个新的内部类。
如果您发现我的解释混乱,请随时提出问题。我现在累了。
匿名类是指没有类名的内部类,必须在创建时使用 new 语句来声明类。其语法形式如下: 这种形式的 new 语句声明一个新的匿名类,它对一个给定的类进行扩展,或者实现一个给定的接口。使用匿名类可使代码更加简洁、紧凑,模块化程度更高。 匿名类有两种实现方式: 继承一个类,重写其方法。 实现一个接口(可以是多个),实现其方法。 下面通过代码来说明。 程序的输出结果如下: 从输出结果可以看出,匿名内部类有
本文向大家介绍Java匿名类,匿名内部类实例分析,包括了Java匿名类,匿名内部类实例分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Java匿名类,匿名内部类。分享给大家供大家参考,具体如下: 内部类 匿名类 首发日期 :2018-03-25 内部类: 在一个类中定义另一个类,这样定义的类称为内部类。【包含内部类的类可以称为内部类的外部类】 如果想要通过一个类来使用另一个类,可以定
编译工作正常,但在运行时应用程序崩溃,出现以下错误:。 和缺少了什么?
输出:类名:包。名称在这里B 有人能告诉我为什么匿名类类型在getClass()方法中给出封闭类吗?这导致了问题的出现。对象C上的equals()始终失败。我的理解是,由于getClass提供了封闭类名,所以永远不会调用重写的equals?
问题内容: 我有一个用于过滤项目的界面: 和一个包含type成员的类。 当我尝试使用实现的匿名类来初始化时: 我有一个例外:。 如何使我编写的匿名类可序列化? 问题答案: 约书亚·布洛赫(Joshua Bloch)在他的《有效的Java,第二版》第74项中写道: 内部类 不应实现。它们使用编译器生成的 合成 字段来存储对 封闭实例的 引用,并存储来自封闭范围的局部变量的值。这些字段如何与类定义相对
问题内容: 自从Java8最近发布以来,它的全新lambda表达式看起来真的很酷,我想知道这是否意味着我们曾经习惯的Anonymous类的消亡。 我对此进行了一些研究,发现了一些很酷的示例,这些示例说明Lambda表达式将如何系统地替换这些类,例如Collection的sort方法,该方法用于获取Comparator的Anonymous实例来执行排序: 现在可以使用Lambdas完成: 并且看起来