Gee*_*eek 1 java effective-java
以下内容来自《Effective Java》:
非静态成员类实例与其封闭实例之间的关联是在创建前者时建立的;此后无法修改。通常,通过从封闭类的实例方法中调用非静态成员类构造函数来自动建立关联。尽管很少见,但可以使用表达式 enleadingInstance.new MemberClass(args) 手动建立关联。正如您所期望的,关联占用了非静态成员类实例中的空间并增加了其构造时间。
Bloch 在此所说的“虽然很少见,但可以使用表达式 enleadingInstance.new MemberClass(args) 手动建立关联。正如您所期望的,该关联会占用非静态成员类实例中的空间并增加时间它的建设。” ?
他的意思是你至少可以通过两种方式建立联系。给定
public class Outer {
public class Inner {
}
void f() {System.out.println(new Inner());}
}
Outer x = new Outer();
Run Code Online (Sandbox Code Playgroud)
如果你打电话
x.f()
Run Code Online (Sandbox Code Playgroud)
那么您打印的值是链接到的内部对象x。
但也可以调用:
x.new Inner();
Run Code Online (Sandbox Code Playgroud)
创建一个链接到的新内部对象x。
布洛赫说第二种方式很少见。我不知道为什么;我过去用过它。
观看现场演示
class Outer {
String name;
public Outer(String name) {
this.name = name;
}
public class Inner {
public String toString() {
return "I belong to " + Outer.this.name;
}
}
void f() {
System.out.println(new Inner());
}
void g(Outer a) {
System.out.println(a.new Inner());
}
}
class Main {
public static void main(String[] args) {
Outer x = new Outer("x");
Outer y = new Outer("y");
x.f();
x.g(y);
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
I belong to x
I belong to y
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1016 次 |
| 最近记录: |