2009-10-30 16 views
7

Chcę tylko prądu wyjściowego i napisałemJaka jest różnica między importem java.util. *; i import java.util.Date; ?

import java.util.*; 

na początku, a

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

w głównej części.

Ale co mam było coś takiego:

[email protected] 

Kiedy zmienić import do import java.util.Date; kod działa doskonale, dlaczego?

====================================

Problem polegał na tym, OK, mój plik źródłowy to "Date.java", to jest przyczyna.

Cóż, to wszystko moja wina, że ​​wszyscy wokół mylić; P

I dzięki wszystkim poniżej. To naprawdę ŁADNA WASZA;)

+1

Możesz mieć inny import - zobaczmy kod kompilacyjny, który pokazuje to: – Mark

+1

Zobacz też: http://stackoverflow.com/questions/147454/why-is-using-a-wild-card-witha-a- java-import-statement-bad, http://stackoverflow.com/questions/187453/import-package-vs-import-package-specifictype, http://stackoverflow.com/questions/585268/which-would-make- a-class-file-bigger-import-java-awt-or-a-bunch-or-single-imp, http://stackoverflow.com/questions/1553909/is-there-any-difference-between-class- import-i-pakiet-import-in-java – finnw

+1

Głosowanie, ponieważ czasami dobry kontrprzykład jest tak samo pomocny jak cokolwiek innego. :) – mtruesdell

Odpowiedz

11

Prawdopodobnie masz gdzieś inną klasę "Data" (lub masz w swojej klasie klasę Data, której nie trzeba importować). Przy "import java.util. *" Używasz "innej" daty. W tym przypadku najlepiej jest jawnie określić java.util.Date w kodzie.

Lub lepiej, staraj się unikać nazywania swoich klas "Data".

+0

masz rację, nazwałem mój src "Date.java" – EthanZ6174

+0

@ EthanZ6174: Dobrze, nigdy więcej tego nie rób ... –

+2

@ EthanZ6174: Zobacz Puzzle 7 na tej przykładowej liście z Java Puzzlers - http://www.javapuzzlers.com/java-puzzlers-sampler.pdf Ta książka jest ostateczna polecam dla każdego programisty Java! –

2

Twój program powinien działać dokładnie tak samo z import java.util. *; lub import java.util.Date;. Musi być coś innego, co zrobiłeś pomiędzy.

+0

dziękuję za odpowiedź na pytanie, i wiedziałem, że nie ma różnicy między tymi, chyba że nazwałem src "Date.java" ... :( – EthanZ6174

3
import java.util.*; 

importuje wszystko w ramach java.util łącznie z klasą Data.

import java.util.Date; 

po prostu importuje klasę Data.

Wykonanie którejkolwiek z tych czynności nie ma żadnego znaczenia.

0
but what I got is something like this: [email protected] 
while I change the import to: import java.util.Date; 
the code works perfectly, why? 

Co masz na myśli mówiąc "działa idealnie"? Wynik drukowania obiektu Date jest taki sam, bez względu na to, czy zaimportowano plik java.util. * Lub java.util.Date. Wynik otrzymywany podczas drukowania obiektów jest reprezentacją obiektu za pomocą metody toString() odpowiedniej klasy.

+0

nie, nazywam klasę "Date.java" i to jest problem .. – EthanZ6174

4

Implementacja toString() realizacji java.util.Date nie zależy od sposobu zaimportowania klasy. Zawsze zwraca ładnie sformatowaną datę.

Widać, że toString() pochodzi z innej klasy.

Określony import ma pierwszeństwo przed importem symboli wieloznacznych.

w tym przypadku

import other.Date 
import java.util.* 

new Date(); 

dotyczy other.Date a nie java.util.Date.

Najdziwniejsze jest to, że

import other.* 
import java.util.* 

powinno dać błąd kompilatora informacją, że odniesienie do tej pory jest niejednoznaczny, ponieważ zarówno other.Date i java.util.Date mecze.

Powiązane problemy