Будет ли использование одного файла из пакета включать все файлы? - PullRequest
2 голосов
/ 05 марта 2010

Если я импортирую и использую один класс из другого пакета, будут ли в него включены все файлы из пакета?

например, если я использую только один класс из пакета mylibrary, который называется MyFunctions, будут ли следующие классы включать все классы или нет?

import my.example.mylibrary.*;

по сравнению с:

import my.example.mylibrary.MyFunctions;

Ответы [ 4 ]

4 голосов
/ 05 марта 2010
нет

Нет

Импорт не включает ничего в вашу программу.

Классы загружаются, когда они используются, а не раньше. Таким образом, единственное, что import, это помочь вам избежать ввода полного имени класса.

Например, гораздо лучше набрать (и прочитать):

import my.example.mylibrary.SomeClass;
import java.util.List;
import java.util.ArrayList;
...
SomeClass some = new SomeClass();
List<SomeClass> list = new ArrayList<SomeClass>();
list.add( some );
etc.. 

чем

// no import 
... 
my.example.mylibrary.SomeClass some = new my.example.mylibrary.SomeClass();
java.util.List<my.example.mylibrary.SomeClass> list = new java.util.ArrayList<my.example.mylibrary.SomeClass>();
list.add( some );

И все же они выполняют точно так же.

Кроме того, имейте в виду, что использование

import some.packagename.*;

против.

import some.packagename.Each;
import some.packagename.Single;
import some.packagename.Class;
import some.packagename.ByLine;

У них точно такая же производительность, за исключением того, что она быстрее (и грязнее), а вторая - чище.

Всегда !! используйте вторую форму на производстве и / или когда кому-то еще нужно увидеть ваш код.

2 голосов
/ 05 марта 2010

Что вы подразумеваете под "включить"?

У обоих нет разницы в производительности. Единственное, что они делают, это позволяют вам писать MyFunctions вместо my.example.library.MyFunctions все время.

Загрузчик классов (как правило) будет загружать файл .class при первом использовании этого класса. Когда .class находится внутри .jar файла, возможно, он загрузится больше, чем это. Но это не зависит от того, как вы написали свой import.

2 голосов
/ 05 марта 2010

Операторы импорта являются только директивой для компилятора, которая помогает ему разрешать ссылки на классы с использованием неквалифицированного имени класса - и ничего более .

Например, каждый класс неявно импортирует java.lang.*, что означает, что вы можете ссылаться на String вместо java.lang.String и Integer вместо java.lang.Integer и т. Д.

Если у вас есть mypackage.A и mypackage.B и вы import mypackage.A, вы можете использовать A в классе, но вы должны использовать mypackage.B вместо просто B.

Использование * вместо определенного имени класса просто говорит компилятору разрешить все классы в пакете вместо определенного. Так import mypackage.* позволяет вам использовать A и B в коде.

1 голос
/ 05 марта 2010

Если вы специально импортируете MyFunctions, компилятор все равно не будет знать о MyOtherFunctions. * Версия будет импортировать все из пакета.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...