我什么时候想让我的私人课程保持静态?

2022-08-31 14:49:38

通常,将私有类声明为静态有什么好处吗?

在什么情况下,我想使用以下一种而不是另一种?

private static class Foo
{
    ...
}

private class Foo
{
    ...
}

答案 1

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

1) 嵌套静态类不需要引用 Outer 类,但非静态嵌套类或 Internal 类需要外部类引用。如果不创建 Outer 类的实例,则无法创建 Inner 类的实例。这是在使嵌套类为静态或非静态时要考虑的最重要的事情。

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

3)静态和非静态嵌套类之间的另一个区别是,您无法直接访问非静态成员,例如方法和字段到嵌套的静态类中。如果这样做,您将收到类似“非静态成员不能在静态上下文中使用”的错误。而内部类可以访问外部类的静态和非静态成员。


答案 2

如果我理解正确,问题是私有类私有静态类。所有回答通常都是关于内部类的,这些类不是100%适用于这个问题。所以首先要做的事情是:

来自 geeksforgeeks

  • 嵌套类 - >另一个类中的一个类
  • 静态嵌套类 -> 声明为静态的嵌套类称为静态嵌套类
  • 内部类 -> 内部类是非静态嵌套类。

正如接受的响应所说,静态和非静态嵌套类在访问外部类之外的方法/字段的方式和可能性上有所不同。但是,如果类 A 中的私有类 B,则不会有此问题,因为 B 无论如何都无法在 A 外部访问。

现在,从类A内部,对于非静态字段/方法,您始终可以通过说或只是来引用类B,并且B是私有类还是私有静态类并不重要(没有编译/运行时错误)。对于静态字段/方法,您需要使用私有静态类new A.B()new B()

此外,如果你想从B内部访问A的非静态字段,那么你就不能将B作为私有静态类

我通常更喜欢私有静态类,除非我不能像前一种情况那样使用它,否则intellij会给出警告。


推荐