gpt4 book ai didi

java - Java 中如何在不重新编译程序的情况下更新 Date 对象?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:01:00 25 4
gpt4 key购买 nike

例子:

System.out.println(new Date());

现在显然这是一个更大程序的一部分,但您可以看到它的作用。现在,我运行一次编译器,然后运行程序。然后,无需再次编译程序,我运行它并更新日期。这可能看起来很愚蠢,但是如何在不更新字节码的情况下更新日期呢?

根据我对所读内容的理解,Java 编译器获取我的源代码并将其编译为字节码,该字节码保存在类文件中。 JIT 将此代码转换为机器代码并运行。但是,Date 对象的状态不会保持不变吗?显然不是。我只是对它如何变化感到困惑。

最佳答案

编译时与运行时

Answer by Mureinik是正确的。在您的代码中定义的对象在 run-time 处构造, 不是 compile-time .

Compilation就像让工程师审查建筑师的建筑计划,然后写出更详细的规范。尚未 build 建筑物。我们现在已经完全准备好 build ,但直到施 worker 员到达现场的“运行时”,我们才真正 build 任何东西。

在这个比喻中,您的 source code是建筑师的图纸。工程师更详细的规范是bytecode由 Java 编译器发出。 JVM运行你的应用程序的字节码是施 worker 员去现场工作。

另一种思考方式:

  • 类在编译时确定。
  • 对象(实例)在运行时确定。

java.time

此外,您永远不应该使用 Date 类。该类和最早版本的 Java 中的其他遗留日期时间类很糟糕,充斥着糟糕的设计选择。多年前,现代 java.time 类取代了它们。

java.time 类使用 factory methods用于实例化而不是 constructors

Instant.now()  // Capture current moment in UTC. 
OffsetDateTime.now( ZoneOffset.UTC ) // Capture current moment in UTC.
ZonedDateTime.now( ZoneId.of( "Africa/Casablanca" ) ) // Capture current moment as seen though the wall-clock time used by the people of a particular region (a time zone).
LocalDate.of( 2018 , Month.JANUARY , 23 ) // A date-only value, without time-of-day and without time zone.

关于java - Java 中如何在不重新编译程序的情况下更新 Date 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53244770/

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