日期:2014-05-20 浏览次数:20820 次
//理解有误区,ConcurrentHashMap发布访问时并不是发布静态内部类HashEntry,反而是封装了HashEntry的非 //静态final内部类KeySet Values EntrySet, 这3个类分别封装了KeyIterator ValueIterator // EntryIterator //你可以看一看源代码, HashEntry 其实很简单。ConcurrentHashMap并不会直接发布它 他也不是一个 //实现了Map.Entry接口的类什么的。 因为它只是一个工具类辅助ConcurrentHashMap里的final非静态内部类 //KeyIterator ValueIterator EntryIterator,这几个类才是真正被发布的要访问ConcurrentHashMap的非静 //态属性和方法的的内部类。 //所以得出结论,为了更高的内部聚合,访问最严格性,HashEntry既然是一个工具类不需要访问 //ConcurrentHashMap的一些信息,使它的访问域最小就可以用上静态内不类 /** * ConcurrentHashMap list entry. Note that this is never exported * out as a user-visible Map.Entry. * * Because the value field is volatile, not final, it is legal wrt * the Java Memory Model for an unsynchronized reader to see null * instead of initial value when read via a data race. Although a * reordering leading to this is not likely to ever actually * occur, the Segment.readValueUnderLock method is used as a * backup in case a null (pre-initialized) value is ever seen in * an unsynchronized access method. */ static final class HashEntry<K,V> { final K key; final int hash; volatile V value; final HashEntry<K,V> next; HashEntry(K key, int hash, HashEntry<K,V> next, V value) { this.key = key; this.hash = hash; this.next = next; this.value = value; } @SuppressWarnings("unchecked") static final <K,V> HashEntry<K,V>[] newArray(int i) { return new HashEntry[i]; } }
------解决方案--------------------
静态内部类的作用,除了楼主说的“实例化无需外部类实例”以外,还有:静态内部类可以在外部类的静态上下文(如 static 方法、static 块或静态成员定义)中使用。
------解决方案--------------------
除了楼上所说的,还有静态内部类只能访问外部类的静态属性和方法,(封装带来的安全)这是与一般内部类的区别,而且静态内部类还可以有静态数据,静态方法或者又一个静态内部类,这些是非静态内部类所没有的。
------解决方案--------------------
因为静态内部类独立存在,为外部类提供一种处理方法。
ConcurrentHashMap中HashEntry又是多线程共享的,static更合适。
------解决方案--------------------
这个应该结合内部类和静态类一起考虑吧。
静态类的特点就是,所有的属性和方法都是静态的。
------解决方案--------------------
以上说的差不多了!
------解决方案--------------------
下班咯。。为美女顶上一刷子。。。我没有什么说的。。。观望。。。。
------解决方案--------------------
美女程序员!
------解决方案--------------------
如果内部类不会引用到外部类东西的话,强烈建议使用静态内部类,因为这样更节省资源,减少内部类其中的一个指向外部类的引用,详见 effective java
------解决方案--------------------
这个静态内部类,不需要在外部引用,只为当前类提供服务。 封装的完整性。
------解决方案--------------------
写的都很好
------解决方案--------------------
这些内部的东西不是具体涉及到了,过短时间来看还真有点忘记了。 看来要多巩固啊、