当前位置: 首页 > 知识库问答 >
问题:

匿名类中的匿名代码块Java[副本]

冯澄邈
2023-03-14

可能重复:
什么是双大括号初始化在Java?

在查看一些遗留代码时,我遇到了一些非常令人困惑的问题:

 public class A{
      public A(){ 
          //constructor
      }
      public void foo(){
            //implementation ommitted
      }
 }

 public class B{
      public void bar(){
           A a = new A(){ 
                { foo(); }
           }
      }
 }

在调试模式下运行代码后,我发现匿名块{foo()}是在调用构造函数A()之后调用的。上面的功能和做的有什么不同:

 public void bar(){
       A a = new A();
       a.foo();
 }

?我会认为它们在功能上是等价的,并且会认为后一种方式是更好/更干净的编写代码的方式。

共有1个答案

阎彬炳
2023-03-14
 { foo(); }

称为实例初始值设定项。

为什么?

按照Java教程

Java编译器将初始化器块复制到每个构造函数中。因此,可以使用这种方法在多个构造函数之间共享代码块。

 类似资料:
  • 问题内容: Java中是否有匿名代码块的实际用途? 请注意,这与命名块无关,即 。 问题答案: 它们限制变量范围。 但是,实际上,如果你发现自己使用了这样的代码块,则可能是你要将其重构为方法的信号。

  • 问题内容: 在Groovy中是否可以使用匿名代码块?例如,我正在尝试将以下Java代码转换为Groovy: 我能想到的最接近的翻译如下: 我知道匿名代码块通常是一种反模式。但是具有类似“ inputStream0”和“ inputStream1”之类的变量的变量也是一种反模式,因此对于我正在处理的这段代码,匿名代码块会有所帮助。 问题答案: 您可以在Groovy中使用匿名代码块,但这些代码和闭包之

  • 匿名类是指没有类名的内部类,必须在创建时使用 new 语句来声明类。其语法形式如下: 这种形式的 new 语句声明一个新的匿名类,它对一个给定的类进行扩展,或者实现一个给定的接口。使用匿名类可使代码更加简洁、紧凑,模块化程度更高。 匿名类有两种实现方式: 继承一个类,重写其方法。 实现一个接口(可以是多个),实现其方法。 下面通过代码来说明。 程序的输出结果如下: 从输出结果可以看出,匿名内部类有

  • 输出:类名:包。名称在这里B 有人能告诉我为什么匿名类类型在getClass()方法中给出封闭类吗?这导致了问题的出现。对象C上的equals()始终失败。我的理解是,由于getClass提供了封闭类名,所以永远不会调用重写的equals?

  • 本文向大家介绍Java匿名类,匿名内部类实例分析,包括了Java匿名类,匿名内部类实例分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Java匿名类,匿名内部类。分享给大家供大家参考,具体如下: 内部类 匿名类  首发日期 :2018-03-25 内部类: 在一个类中定义另一个类,这样定义的类称为内部类。【包含内部类的类可以称为内部类的外部类】 如果想要通过一个类来使用另一个类,可以定

  • 问题内容: 是否可以在Java中对匿名类进行Seaalal / Deearialize? 例: 我的问题是我想执行一些自定义管理任务,因此我不需要为每个任务发布版本。所以我想做的是- 通过Groovy脚本引擎通过HTTP端点发布自定义任务,并将它们序列化为db以及时运行它们。 问题答案: 可能是危险的。匿名类的名称/数量由编译器生成,并基于它们在文件中出现的顺序。例如,如果您交换两个类的顺序,它们