java为啥要用静态内部类_为什么java非静态内部类可以有static final的数据成员?...

补充一下, 实际上非static内部类里, static数据成员不是加了final的变量就可以了

比如:

import java.util.Date;

public class Outter {

class Inner{

int x;

final static int i=1;

final static Date t=new Date();

}

}

用jdk1.7的javac, 可以看到这个:

Outter.java:7: 错误: 内部类Outter.Inner中的静态声明非法

final static Date t=new Date();;

^

修饰符 'static' 仅允许在常量变量声明中使用

明显是不对的.

java在这上面有bug:

https://bugs.eclipse.org/bugs/show_bug.cgi?id=343480

如果在新版的eclipse上, 可以看到:

The field t cannot be declared static in a non-static inner type, unless initialized with a constant expression

不仅需要final, 还需要初始化为一个常量表达式.

最后补充一下我的理解, 为什么限制 非静态内部类不可以有静态成员的声明

如果我们不从抽象的语义方面去理解, 可以这么想:

public class Outter {

class Inner{

static Inner a1=new Inner();

}

}

如果上面的代码编译无误, 我们可以直接 Outter.Inner.a来拿到Inner类的实例, 而内部类的实例是一定要绑定到一个外部类的实例的. 然后java里试图用final来为上述限制松绑, 以提供更多的灵活性.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值