2013-08-05 19 views
18
// imports all classes of util package  
import java.util.*; 

// imports Scanner class of util package 
import java.util.Scanner; 

// what does this do? 
import java.util.Scanner.*; 

Czy pakiet zawiera tutaj Scanner?Różnica między java.util.Scanner i java.util.Scanner. *

Edytuj: OK, więc import java.util.Scanner.* importuje publiczne klasy zagnieżdżone. Ale co, jeśli był również pakiet o nazwie Scanner? Co wtedy zrobiłoby oświadczenie import java.util.Scanner.*?

+10

Ta ostatnia linia nie kompiluje się, prawda? –

+2

[Przeczytaj to] (http://docs.oracle.com/javase/tutorial/java/package/usepkgs.html). –

+0

@ T.J.Crowder Pewnie, że to – arshajii

Odpowiedz

18
import java.util.Scanner; 

Ten importuje Scanner (jak już wiesz).

import java.util.Scanner.*; 

Ten importuje każdy publiczny nested classes zdefiniowane w Scanner.

Ta szczególna instrukcja importu jest bezużyteczna, ponieważ Scanner nie definiuje żadnych zagnieżdżonych klas (a import nie importuje samej siebie samej Scanner). Można go jednak użyć z czymś takim, jak import java.util.Map.*, w którym to przypadku zostanie zaimportowany Entry (interfejs zagnieżdżony w Map, który jest powszechnie używany podczas pracy z mapami). Jestem pewien, że są lepsze przykłady, to tylko ten, który przyszedł mi do głowy.

Wszystko to jest określone w JLS §7.5 (w szczególności, patrz §7.5.1: Single-Type-Import Declarations).


W odpowiedzi na edycję OP:

Ok więc importować java.util.Scanner.* importuje publicznych klas zagnieżdżonych. Ale co, jeśli był również pakiet o nazwie Scanner? Co wtedy zrobiłoby oświadczenie import java.util.Scanner.*?

W tym przypadku nie będzie to błąd kompilacji, ponieważ pakiet java.util.Scanner będzie kolidować z typem java.util.Scanner.

16

Gwiazdka po nazwie klasy importuje publiczne klasy zagnieżdżone.

Z Java Tutorials:

Uwaga: Innym, mniej rozpowszechnioną formą importu pozwala importować zagnieżdżonych klas publicznych klasy okalającego. Na przykład, jeśli klasa graphics.Rectangle klasy zawiera użyteczne klasy zagnieżdżone, takie jak Rectangle.DoubleWide i Rectangle.Square, można zaimportować Rectangle i jego zagnieżdżone klasy za pomocą następujących dwóch instrukcji.

import graphics.Rectangle; 
import graphics.Rectangle.*; 

Należy pamiętać, że druga instrukcja import nie będzie importować prostokąta.