2013-05-13 140 views
1

我一直在研究关于java中的静态内部类。但我不清楚什么是使用静态内部类或内部类的点。为什么以及何时使用静态内部类或实例内部类?

class A{ 

    static class B{ 

    } 

    public static void main(String[] args) { 

     B b=new B(); 

    } 

} 

class B{} 
class A{ 
    public static void main(String[] args) { 

     B b=new B(); 

    } 

} 
+0

欢迎来到Stack Overflow!为了让网站尽可能地有用,我们尽量避免多次发布相同的问题。下一次你有一个问题时,如果你想搜索Stack Overflow来确认其他人还没有问过相同的事情,我们将不胜感激=)另外,如果你还没有阅读,你应该找到FAQ: http://stackoverflow.com/faq – Kevin 2013-05-13 14:33:30

回答

2

非静态内部类具有自动参照它们的封闭类。与它的封闭类相关的静态内部类唯一关系是您必须通过封闭类的名称引用它:EnclosingClass.StaticInnerClass

当您想要引用父类的某些数据时,非静态内部类很适用。

当您只想将内部类与封闭类关联而不拖动它时,静态内部类就很好。

换句话说,非静态内部类可以防止封闭类被垃圾收集,因为它具有该引用,而静态内部类永远不会这样做。

0

的结果是一样的,但如果B是A使用它只是更有意义,把它变成A.有点类

1

有技术的区别:

class A { 
    private static int x = 42; //the answer 
    public static class B { 
     int showX() { 
      return x; // only static class can it 
     } 
    } 

} 

但它不是主要观点。如果B类仅被A类使用,则可以将其作为内部函数,因为某个包中的某些类可能需要具有相同名称的实用程序类。

0

当你的内部类被认为是你的“对象”的一部分时,使用内部类。 事实上,您将可以从包装类访问私人,包装,受保护和公共领域。

“缺点”是:如果没有实例化包装类,那么内部类就不能存在,这在逻辑上归因于第一句。

否则,如果你考虑:

  • 您的嵌套(也称静态内部)类的行为,因为可能太具体不被视为由外部类重用。
  • 一类的某些相关领域是如此相关以至于你想让 包装它们。这会让你的代码更容易理解和更清晰。

然后选择制作一个静态类。

此外,由于static(意思是在任何对象的生命周期之外),嵌套类可以实例化而不考虑它的包装类/对象。

0

通过使嵌套类可以是静态的,可以使用嵌套类而不需要外部类的实例。

嵌套类是其封闭类的成员。非静态嵌套类(内部类)可以访问封闭类的其他成员,即使它们被声明为私有。静态嵌套类不能访问封闭类的其他成员。 ...

注意:静态嵌套类与其外部类(和其他类)的实例成员交互,就像任何其他顶级类一样。实际上,为了方便打包,静态嵌套类在行为上是嵌套在另一个顶级类中的顶级类。

参见教程here

+0

感谢您的评论。 – Krishna 2014-04-26 07:18:58

相关问题