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

例子:

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

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

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


慕盖茨4494581
浏览 205回答 2
2回答

三国纷争

编译时与运行时Mureinik的回答是正确的。代码中定义的对象是在运行时构造的,而不是在编译时构造的。编译就像让工程师审查建筑师的建筑计划,然后写出更详细的规格。还没有建造任何建筑物。我们现在已经完全准备好建造,但直到施工人员到达现场的“运行时间”才真正建造任何东西。在这个比喻中,您的源代码是建筑师的图纸。工程师更详细的规范是 Java编译器发出的字节码。运行应用程序字节码的JVM是在现场工作的施工人员。另一种思考方式:类是在编译时确定的。对象(实例)在运行时确定。java.time此外,您永远不应该使用Date该类。该类和 Java 最早版本中的其他遗留日期时间类非常糟糕,充斥着糟糕的设计选择。它们在几年前被现代java.time类所取代。该java.time类使用工厂方法实例化,而不是建设者和new。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. 

慕虎7371278

Date使用无参数构造函数初始化的对象将访问System.currTimeMilis()并使用机器中的当前时间戳。换句话说,时间戳不是“编译到其中”,而是包含访问机器时钟并在每次程序运行时从那里获取时间戳的代码。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java