gpt4 book ai didi

java - 创建对象和保持对象静态之间的区别

转载 作者:行者123 更新时间:2023-11-30 03:47:31 24 4
gpt4 key购买 nike

我有两个关于对象和 Java 中 static 的使用的问题。我发现如果我以相同的背景询问他们,我可以最好地解释我的问题:

我的程序中有一个主类。首先它初始化很多东西,然后启动 run 方法,该方法循环通过 while (true) 循环。

我还有很多其他类,例如我在主类初始化期间创建的一个圆,并按照 myCircle = new Circle(); 的方式保存在局部变量中> .

我还制作了一些类,其中所有变量和方法都是静态的。

我注意到我不必在初始化期间创建此类的对象,因为其中的所有内容都是静态的。每当我需要这些类之一的某些内容时,我可以像 StaticClass.someMethod()StaticClass.someVariable 那样调用它。

这与我所在的圆圈形成对比 myCircle.anotherMethod() 。如果我将该方法设为静态,我就可以使用 Circle.anotherMethod()

现在我的问题是:如果我可以使该类中的所有内容都是静态的(假设我只需要一个这样的对象),为什么要创建一个新对象并保存它?

更重要的是:我的一个静态类有大量常量,它们是从文件中读取的图像。由于我没有制作构造函数,所以我不知道它何时实际加载图像。有几种不同的情况下,我会调用 StaticClass.someImage 并且我想知道它现在是否多次从文件加载图像。

所以我的第二个问题是:Java什么时候加载没有构造函数的静态类的所有变量? (换句话说,它什么时候创建该对象?)

最佳答案

  1. 这似乎是一个设计选择

    • 一个充满静态变量和方法的类
    • 单例模式

    根据您的情况,两者都可能有效。尽管答案不应该基于意见,但我会稍微支持第一个选择(与您自己的相同),因为您提供了完全相同的论点:很多静态常量。然而,这将使您的代码变成更 C 风格的过程形式。

    另一方面,如果您不大量使用静态字段,并且您不会像使用Arrays那样使用您的类,那么第二个选择更好;原因是灵 active (多态性是提供灵 active 的一个例子)。

  2. 关于第二个问题,静态代码在类加载时执行。例如:

    class MyClass {
    static final int SPEED_OF_LIGHT = 299792458;
    static {
    foo();
    }

    static void foo () {
    // ...
    }
    }

    上面的方法foo在加载时执行,并且不需要任何对象来完成它的事情(当然,因为它是静态的)。此外,静态变量也在类加载时初始化。

关于java - 创建对象和保持对象静态之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25267086/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com