java 静态内部类初始化_java – 为什么内部类不能使用静态初始化器?

我认为这是因为Inner类本身不是静态的.从Java的角度来看,它是一个实例变量,我认为(1)类加载器不是设计为爬入内部非静态类来查找和初始化potentiel静态对象.

但它不是不可能的问题,请看下面的例子:

public class Outer {

public static class Inner {

Outer owner;

static String constant;

{

constant = "foo";

}

private Inner(Outer owner) {

if (owner == null) {

throw new NullPointerException();

}

this.owner = owner;

}

}

public Inner newInner() {

return new Inner(this);

}

}

甚至没有警告,因为Inner声明为静态.

但乍一看,它有一个指向封闭外部实例的指针,只能通过Outer创建,因为它只有一个私有构造函数,并且它的所有者不能为null.从程序员的角度来看,它具有非静态内部类的所有约束,并且可以像一个一样使用(除了像Outer.this这样的特殊习语),但从编译器的角度来看它是静态的,静态字段将是静态的在第一次外部初始化时正确初始化.

(1):Pacerier在下面解释了为什么这是不正确的.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值