我什么时候想让我的私人类是静态的?

一般来说,将私有类声明为静态是否有任何好处?

在哪些情况下,我想使用其中一个以下的其中一个?

private static class Foo { ... } 

VS

 private class Foo { ... } 

我认为这是一个很好的起点: http : //java67.blogspot.fi/2012/10/nested-class-java-static-vs-non-static-inner.html

1)嵌套静态类不需要外部类的引用,但非静态嵌套类或内部类需要外部类引用。 如果不创buildOuter类的实例,则不能创buildInner类的实例。 这是在制作嵌套类静态或非静态时要考虑的最重要的事情。

2)静态类实际上是类的静态成员,可以在静态上下文中使用,例如静态方法或者外部类的静态块。

3)静态和非静态嵌套类的另一个区别是,你不能直接访问非静态成员,如方法和字段embedded静态类。 如果你这样做,你会得到像“非静态成员不能在静态上下文中使用”的错误。 而Inner类可以访问外部类的静态和非静态成员。

如果您需要访问封闭类的成员variables/方法,请使用非静态表单。 如果你不这样做,请使用静态表单。

静态类与普通类的区别仅在于它们可以在不创build实例的情况下被访问。 所以如果你每次需要一些类可访问,使用静态

这是一个很棒的阅读: Java中的静态类

概要:

…所以如果你不想让任何人实例化这个类,通常如果你有某种types的helper / utils类,那么我使用我所说的静态类,一个带有私有构造函数的类,只包含静态方法没有任何variables。

我会假设你指的是内部类。

我认为动机将来自于你想如何联想你的内心阶层。 如果你想让你的内部类被关联到它的外部类的特定实例,你可以使用private class ,否则使用private static class

我发现它在通用抽象类中有一个特定的exception是很有用的。 即:

 public abstract class AbstractClass <T> { private void doSomethingOrThrowException() throws SpecificException { .... if ( ! successful) { throw new SpecificException(); } } private static class SpecificException extends Exception {} } 

如果我省略了静态,编译器会给我一个错误,指出: The generic class AbstractClass<T>.SpecificException may not subclass java.lang.Throwable