在java中创建实例时为成员变量赋值

sun*_*dar 2 java

在浏览一个库时,我在java中找到了以下构造,这对我来说真的很新.假设有一类Pointjava.

class Point {
    int x;
    int y;
    public Point() {}
    public Point(int x, int y) {
    this.x = x;
    this.y = y;
    }
}
Run Code Online (Sandbox Code Playgroud)

在创建实例时Point,它们初始化变量xy在实例创建中自动如下:

Point inst = new Point() {
            {
                this.x = 10;
                this.y = 20;
            }
        };
Run Code Online (Sandbox Code Playgroud)

这与instance blockjava或其他东西有关吗?

Bri*_*new 6

你的第二个例子:

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

语法:

new Object() { ... }
Run Code Online (Sandbox Code Playgroud)

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

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

new ArrayList<String>(){{
   add("1");
   add("2");
}};
Run Code Online (Sandbox Code Playgroud)

有一点需要注意的是,它是一个内部类,因此有一个对外部(周围)类的隐含引用.通常不是问题,除非(比方说)你来串行化这个.

  • 3.要求变量可以直接访问,4.通常是滥用匿名内部类.:) (2认同)