Разница между java.util.Scanner и java.util.Scanner. *

// 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.*;

Есть ли Scanner пакет здесь?

Изменить: Хорошо, поэтому import java.util.Scanner.* импортирует общедоступные вложенные классы. Но что, если бы был пакет под названием Scanner? Что будет делать инструкция import java.util.Scanner.*?

Ответы

Ответ 1

import java.util.Scanner;

Это импортирует Scanner (как вы уже знаете).

import java.util.Scanner.*;

Это импортирует любые общедоступные вложенные классы, определенные в Scanner.

Этот конкретный оператор импорта бесполезен, так как Scanner не определяет какие-либо вложенные классы (а импорт не импортирует сам Scanner). Однако это можно использовать с чем-то вроде import java.util.Map.*, в этом случае Entry (обычно используется интерфейс, вложенный в Map при работе с картами) будут импортированы. Я уверен, что есть лучшие примеры, это только тот, который пришел на ум.

Все это указано в JLS §7.5 (в частности, см. §7.5.1: объявления с одним типом импорта).


В ответ на редактирование OP:

Итак, import java.util.Scanner.* импортирует общедоступные вложенные классы. Но что, если бы был пакет под названием Scanner? Что будет делать инструкция import java.util.Scanner.*?

В этом случае будет ошибка компиляции, так как пакет java.util.Scanner будет сталкиваться с типом java.util.Scanner.

Ответ 2

Звездочка после имени класса импортирует общедоступные вложенные классы.

Из Java Tutorials:

Примечание. Другая, менее распространенная форма импорта позволяет импортировать общедоступные классы вложенного класса. Например, если graphics.Rectangle содержит полезные вложенные классы, такие как Rectangle.DoubleWide и Rectangle.Square, вы можете импортировать Rectangle и его вложенные классы, используя следующие два утверждения.

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

Имейте в виду, что второй оператор импорта не будет импортировать Rectangle.