在浏览其中一个库时,我在java中找到了以下构造,这对我来说真的很新。假设Point
中有一个班级java
。
class Point {
int x;
int y;
public Point() {}
public Point(int x, int y) {
this.x = x;
this.y = y;
}
}
在为Point
创建实例时,他们会在实例创建中初始化变量x
和y
,如下所示:
Point inst = new Point() {
{
this.x = 10;
this.y = 20;
}
};
这与java中的instance block
或其他内容有关吗?
答案 0 :(得分:6)
你的第二个例子:
语法:
new Object() { ... }
看起来像Object
,但实际上是在创建一个派生自Object
的新对象。然后内括号声明初始化块。
这种做法偶尔用于初始化集合,例如。
new ArrayList<String>(){{
add("1");
add("2");
}};
等。有一点需要注意的是,它是一个内部类,因此有一个对外部(周围)类的隐含引用。通常不是问题,除非(比方说)你来串行化。