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

时间:2012-08-24 13:33:03

标签: java

在浏览其中一个库时,我在java中找到了以下构造,这对我来说真的很新。假设Point中有一个班级java

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;
            }
        };

这与java中的instance block或其他内容有关吗?

1 个答案:

答案 0 :(得分:6)

你的第二个例子:

  1. 创建一个派生自Point
  2. 匿名
  3. 使用初始化程序块初始化值
  4. 语法:

    new Object() { ... }
    

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

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

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

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