2

在浏览其中一个库时,我在 java 中发现了以下结构,这对我来说真的很新。假设中有一个类Pointjava

class Point {
    int x;
    int y;
    public Point() {}
    public Point(int x, int y) {
    this.x = x;
    this.y = y;
    }
}

在创建实例时Point,它们初始化变量xy在实例创建本身中如下所示:

Point inst = new Point() {
            {
                this.x = 10;
                this.y = 20;
            }
        };

这与instance blockjava有关还是不同的东西?

4

1 回答 1

6

你的第二个例子:

  1. 创建一个派生自 Point的匿名类
  2. 使用初始化程序块来初始化值

语法:

new Object() { ... }

看起来像一个Object,但实际上是创建一个派生自 的新对象Object。然后内部大括号声明初始化程序块。

这是一种偶尔用于初始化集合的做法,例如

new ArrayList<String>(){{
   add("1");
   add("2");
}};

等等。要注意的一件事是它是一个内部类,因此有一个对外部(周围)类的隐式引用。通常不是问题,除非(比如说)你来序列化这个。

于 2012-08-24T13:34:08.907 回答