当前位置: 首页 > 面试题库 >

Java是“缓存”匿名类吗?

谷梁玺
2023-03-14
问题内容

考虑以下代码:

for(int i = 0;i < 200;i++)
{
  ArrayList<Integer> currentList = new ArrayList<Integer>() {{
    add(i);
  }};
  // do something with currentList
}
  • Java将如何对待类currentList
  • 对于200个对象中的每个对象,是否都将其视为不同的类?
  • 即使在创建第一个对象之后,性能也会受到影响吗?
  • 是否以某种方式对其进行缓存?

我只是好奇 :)


问题答案:
ArrayList<Integer> currentList = new ArrayList<Integer>() {{
    add(i);
  }};

每次通过循环都创建一个匿名类的新 实例 ,这并不是每次都重新定义或重新加载该类。该类定义一次(在编译时),并且一次加载(在运行时)。

使用匿名类不会对性能产生重大影响。



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

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

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

  • 问题内容: 我想知道Python是否具有类似C#匿名类功能的东西。为了澄清,这是一个示例C#代码段: 在Python中,我会想象这样的事情: 特定要求是能够在表达式上下文中创建具有指定字段的对象(例如,可在lambda和不允许使用语句的其他地方使用),而无需其他外部声明,并且能够通过普通成员按名称访问各个组件访问语法。创建的对象还应按 组件名称 (而不是像元组那样按位置)实现结构比较。 特别是:元

  • 可能重复: 什么是双大括号初始化在Java? 在查看一些遗留代码时,我遇到了一些非常令人困惑的问题: 在调试模式下运行代码后,我发现匿名块是在调用构造函数之后调用的。上面的功能和做的有什么不同: ?我会认为它们在功能上是等价的,并且会认为后一种方式是更好/更干净的编写代码的方式。

  • 问题内容: 这听起来像一个愚蠢的问题,但是所有匿名类都必须在现有的类中定义和实例化。因此,它们必须同时是内部类。 问题答案: 这是真的。您的匿名类不能作为单独的类在其他类之外实现,因为它是匿名的,您甚至无法以任何方式引用它。 附加信息:从JLS:匿名类始终是一个内部类(第8.1.3节);该类通常是内部类。它永远不会是静态的(第8.1.1节,第8.5.1节)。