静态内部类

今天看Java中的linkedList的实现,发现有这么一段:

private static class Entry<E> {
E element;
Entry<E> next;
Entry<E> previous;

Entry(E element, Entry<E> next, Entry<E> previous) {
this.element = element;
this.next = next;
this.previous = previous;
}
}


这个类是LinkedList类的一个inner class。让我不明白是的,为什么它要是static类型的?

上网查了一下,大多只是建议这么用,却没有明确的说明为什么这样用比较好。

我觉得这样用的好处有三点:
1. 只为该内部类型产生一份类型定义。
据我估计,如果你的代码中有一个非静态内部类, 当你每次实例化它的外部类时,这个内部类都会被重新定义一份,放在堆中。
而如果使用了static的话,这个内部类就只有一份定义包含在外部类的class中,而不会随着新的实例的产生而产生。

2. 无须实例化外部类,也可以使用内部类,比方说,如果这个内部类是public的,那么我们就可以在其他地方使用它,而无需初始化它的外部类型。

3. 内部类无法访问外部类的绝大多数实例变量。虽然说静态变量还是会被访问到,但是实例变量不再会被内部类访问到,保证了一定的数据封装。

第二条和第三条经测试确实是这样的,但是第一条,因为对JVM的实现机制不了解,所以暂存疑惑,有高人懂的,帮忙解释下。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值