`
mabusyao
  • 浏览: 254641 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

静态内部类

    博客分类:
  • java
JVM 
阅读更多
今天看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的实现机制不了解,所以暂存疑惑,有高人懂的,帮忙解释下。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics