Java Inner Class 和 Static Inner Class

阅读更多
1、Java没有static class 概念,static 在修饰 class 的时候,只能修饰 inner class,即所谓的 static inner class(静态内部类)。

2、inner class:为什么需要内部类?主要有3个好处:
  • 为了更好的组织类层次。如果一个类只在某处使用,那么内部类是很好的选择。比如常用的 java.util.HashMap 内部使用了 Entry,这个Entry class 仅仅是为了 HashMap 使用,所以采用内部类的方式。这种例子还有各种helper class。  
  • 更好的封装。非静态内部类可以访问外部类的私有成员,使用内部类可以在实现功能的同时,对外隐藏内部类本身,实现更好的封装。
  • 使用较小的内部类,代码的可读性和可维护性更好。
 
3、非静态内部类可以访问外部类的私有成员,是因为非静态内部类含有外部包装类的一个instance。因为非静态内部类含有外部类的instance,所以不能定义static field 和 static method。(static field 和 static method 的scope是Class,而不是 instance,因此包含外部类的 instance 的内部类不能定义 static member)。

4、static inner class 和  外部类(即 top level class)基本是一致的,不包含 outer class 的 instance reference。所以可以看做一个 top level class。只是为了更好的组织类结构才将这个类所谓内部类。当然instance static inner class 的语法和 top level class 稍有不同。static inner class 可以定义static field和 static method。所以可以再 static inner class 中写main函数,以测试 outer class 的功能。

关于 inner class 和 static inner class 比较权威的文档和说明:

  • java官方 tutorial : http://docs.oracle.com/javase/tutorial/java/javaOO/nested.html
  • stackoverflow : http://stackoverflow.com/questions/253492/static-nested-class-in-java-why 关于 static inner class的本质比较精炼的总结:In effect, a static nested class is behaviorally a top-level class that has been nested in another top-level class for packaging convenience.

 

你可能感兴趣的:(java,static,inner,class,static,nested,class,java静态内部类,java内部类)