“import java.util.*;”和“import java.util.Date;”之间有什么区别?

9

我只想输出当前的内容,我写了以下代码:

import java.util.*;

一开始,以及

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

在主要部分。

但我得到的是这样的东西:

Date@124bbbf

当我将导入更改为import java.util.Date;时,代码完美地运行了,为什么?
====================================
问题是,我的源文件名为"Date.java",这就是原因。
好吧,这全是我的错,我把大家都搞糊涂了 ;P
感谢下面的每个人。你们真的很好;)

在你的第一个例子中,你是否还导入了其他内容?例如:java.sql.Date? - lindelof
1
你可能有其他的导入 - 让我们看一些可编译的代码来展示这个。 - mmmmmm
1
参见:https://dev59.com/4XVC5IYBdhLWcg3w51ry,https://dev59.com/BHVC5IYBdhLWcg3wxER1,https://dev59.com/ekbRa4cB1Zd3GeqP2q6b,https://dev59.com/_3I_5IYBdhLWcg3wDOZC - finnw
1
点赞,因为有时候一个好的反例和任何东西一样有帮助。 :) - mtruesdell
谢谢大家。 @Mark,我把类命名为“Date”,这就是问题所在。 @finnw,谢谢你的引用。 @mtruesdell,遗憾的是,我还不能投票...我是一个非常新手的人。 - EthanZ6174
5个回答

13
你可能在其他地方导入了一些其他的“Date”类(或者你的包中有一个不需要导入的Date类)。使用“import java.util.*”时,你正在使用“其他”的日期类。在这种情况下,最好在代码中明确指定java.util.Date。
或者更好的方法是尽量避免将你的类命名为“Date”。

2
@EthanZ6174:在Java Puzzlers的样例列表中查看谜题7- http://www.javapuzzlers.com/java-puzzlers-sampler.pdf。那本书绝对是任何Java程序员的推荐读物! - Vijay Dev

6
java.util.DatetoString()实现与类的导入方式无关,它始终返回一个格式良好的日期。您看到的toString()来自另一个类。特定的导入优先于通配符导入。在这种情况下。
import other.Date
import java.util.*

new Date();

指的是other.Date而不是java.util.Date

奇怪的是

import other.*
import java.util.*

编译器会报错,指出对Date的引用不明确,因为既有other.Date也有java.util.Date匹配。


4
import java.util.*;

导入java.util中的所有内容,包括Date类。

import java.util.Date;

只需导入Date类。

两者都不会有任何区别。


2

您的程序应该与 import java.util.*;import java.util.Date; 完全相同。在这两种导入方式之间,必须有其他的变化。


谢谢回答问题,我知道除非我把源文件命名为"Date.java",否则这些之间没有区别...:( - EthanZ6174

0
but what I got is something like this: Date@124bbbf  
while I change the import to: import java.util.Date;  
the code works perfectly, why? 

你说的“完美运行”指什么?打印日期对象的输出结果无论你是导入了java.util.*还是java.util.Date包,都是一样的。打印对象时,得到的输出是该类的toString()方法表示该对象的结果。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接