从另一个包调用 class 的方法而不实例化 class

Call method of class from another package without instantiating the class

我是 Java 的新手,不理解以下来自 here

的代码
SimpleDateFormat format = new SimpleDateFormat(
        "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", Locale.US);
format.setTimeZone(TimeZone.getTimeZone("UTC"));

创建 class SimpleDateFormat 的实例后,它来自 java.text 包,正在使用 java.util 包的 setTomeZone 方法.

谁能帮我理解为什么我们对 SimpleDateFormat class 的实例使用 setTimeZone 方法而不是 Calendar class 的实例?

注意:我浏览了几篇文章,它们告诉我如何从另一个 Java class 或 Java 包中调用方法。然而,这对我来说似乎不同。我也注意到 Calendar 是一个抽象的 class 但在这里无法理解。

设置时区

public void setTimeZone(TimeZone zone)

为此 DateFormat 对象的日历设置时区。这个方法等同于下面的调用。

getCalendar().setTimeZone(zone)

通过此方法设置的时区被 setCalendar 调用覆盖。

通过此方法设置的时区可能会因调用解析方法而被覆盖。

参数: zone - 给定的新时区。

https://docs.oracle.com/javase/7/docs/api/java/text/DateFormat.html

https://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html

一个包包含 classes 和一个 class 包含方法。在 java.text 中,我们有 SimpleDateFormat class。如果你去它的 public api,你可以看到这个 class 有一个 setTimeZone 方法(它继承自 java.text.DateFormat class)。所以这个方法确实属于SimpleDateFormatclass的API。因此,说 setTimeZone 方法 属于 java.util 包是错误的。后者可能包含一些 class 具有同名方法,但这些方法不相关。

After creating and instance of Class SimpleDateFormat which is from java.text package, setTomeZone method of Java.util package is being used.

在这种特殊情况下,类 都被声明为 public,因此即使在不同的包中,它们都是可见的。包在这里无关紧要。 SimpleDateFormat.setTimeZone() 采用 java.util.TimeZone 作为参数一点也不意外。包只是文件夹,有时需要访问另一个文件夹中的内容。就这些了。

Can any one please help me understand why we used setTimeZone method with instance of SimpleDateFormat class and NOT with instance of Calendar class?

因为代码的目的是解析日期字符串。 Calendar 不提供此类功能。 SimpleDateFormat 需要将其时区设置为 UTC,以便无论用户的本地时区如何,都可以将日期字符串解析为同一时刻。