在study android programming的过程中,俺遇见了一个问题

public static class {

   …

}

听说过声明variable为static的,也听说过声明method为static的,但就是没有听说过声明class为static的。

一定要弄清楚这个问题,google了一番,答案就出来了。

http://www.javaworld.com/javaworld/javaqa/1999-08/01-qa-static2.html

在这片paper里,作者clarify了几个concept

top-level class:理解为和文件同名的那个class

inner class:理解为在top-level class里头的那些class

top-level class是不允许被static修饰的,所以本文开篇的public static class一定是在某个top-level class里头的,否则编译器会报错。

inner class分为4种:

  1. anonymous
  2. local
  3. member
  4. Nested top-level

只有第四种能被static修饰,或者说第四种就是俺们说的static class

问题是,Nested top-level class什么情况下被使用是合理的?

答案:

通常俺们会在top-level class里定义helper class,如果helper class不在外头(top-level class外头)使用,那么不需要定义static;

如果该helper class可以在外头被使用,且仅会与该top-level class一起使用,那么定义该help class为static是非常合理的。

Advertisements