Как работает импорт Java?

Я хотел бы знать, как работает import .

Я спрашиваю об этом, потому что у меня есть следующий imports в моем проекте:

 import static com.googlecode.javacv.jna.highgui.cvCreateCameraCapture; import static com.googlecode.javacv.jna.highgui.cvGrabFrame; import static com.googlecode.javacv.jna.highgui.cvReleaseCapture; import com.googlecode.javacv.CanvasFrame; import com.googlecode.javacv.FrameGrabber; import com.colorfulwolf.webcamapplet.gui.ImagePanel; import com.googlecode.javacv.OpenCVFrameGrabber; import com.googlecode.javacv.jna.cxcore.IplImage; 

У меня нет этих пакетов в моем проекте, так, как это будет импортироваться?

Если я создам файл JAR со всеми моими classами, мой сервер, на котором будет размещать этот JAR-файл, должен быть бесплатным доступом в Интернет для получения этого package ?

У меня возникла проблема в моем Applet , у которого есть этот импорт, и я задаю этот вопрос, чтобы понять, может ли быть правило Интернета.

   

5 Solutions collect form web for “Как работает импорт Java?”

В динамических языках, когда import интерпретатора s, он просто считывает файл и оценивает его.

В C внешние библиотеки располагаются компоновщиком во время компиляции для создания конечного объекта, если библиотека статически компилируется , тогда как для динамических библиотек в среде выполнения вызывается меньшая версия компоновщика, которая перенаправляет адреса и поэтому делает доступным код в библиотеке к исполняемому файлу.

В Java import просто используется компилятором, чтобы вы могли назвать свои classы своим неквалифицированным именем, скажем, String вместо java.lang.String . Вам действительно не нужно импортировать java.lang.* Потому что компилятор делает это по умолчанию. Однако этот механизм – только для того, чтобы сэкономить вам некоторую типизацию. Типы в Java – это полностью квалифицированные имена classов, поэтому String действительно является объектом java.lang.String при запуске кода. Пакеты предназначены для предотвращения конфликтов имен и позволяют двум classам иметь одно и то же простое имя , вместо того, чтобы полагаться на старое соглашение C о типах префикса, подобных этому. java_lang_String . Это называется пространством имен .

BTW, в Java есть статическая конструкция импорта , которая позволяет дополнительно сохранить ввод, если вы используете множество констант из определенного classа. В блоке компиляции (файл .java), который объявляет

 import static java.lang.Math.*; 

вы можете использовать константу PI в своем коде вместо ссылки на нее через Math.PI и метод cos() вместо Math.cos() . Так, например, вы можете написать

 double r = cos(PI * theta); 

Как только вы поймете, что classы всегда ссылаются на их полное имя в финальном байт-коде, вы должны понять, как действительно загружается код classа. Это происходит при первом создании объекта этого classа или при первом доступе к статическому члену classа. В это время ClassLoader пытается найти class и создать его экземпляр. Если он не может найти class, ClassNotFoundException . Чтобы найти class, ClassLoader обычно проверяет пути, перечисленные в переменной среды $CLASSPATH .

Чтобы решить вашу проблему, кажется, вам нужен элемент applet подобный этому

  

BTW, вам не нужно импортировать архивы в стандартную JRE.

Оператор импорта Java – это чистый синтаксический сахар. import оценивается только во время компиляции, чтобы указать компилятору, где найти имена в коде.

Вы можете жить без какой-либо инструкции импорта, когда вы всегда указываете полное квалифицированное имя classов. Подобно этой строке вообще не требуется импортная заявка:

 javax.swing.JButton but = new javax.swing.JButton(); 

Оператор import сделает ваш код более читаемым следующим образом:

 import javax.swing.*; JButton but = new JButton(); 

Импорт в Java не работает вообще, поскольку он оценивается только во время компиляции. (Рассматривайте его как ярлыки, чтобы вам не приходилось писать полностью квалифицированные имена classов). Во время выполнения нет никакого импорта, просто FQCN.

Во время выполнения необходимо, чтобы все classы, на которые вы ссылались, могут быть найдены загрузчиками classов. (инфраструктура загрузчика classов иногда темная магия и сильно зависит от среды.) В случае апплета вам нужно правильно подстроить свой HTML-тег, а также предоставить необходимые JAR-архивы на вашем сервере.

PS: Согласование во время выполнения выполняется с помощью квалифицированных имен classов. Класс, найденный под этим именем, не обязательно совпадает или совместим с classом, который вы компилировали.

javac (или java во время выполнения) ищет classes , импортируемые в classpath к classpath . Если их нет в classpath тогда classnotfound исключения classnotfound .

classpath похож на переменную path в оболочке, которая используется оболочкой для поиска команды или исполняемого файла.

Целые каталоги или отдельные файлы jar можно поместить в classpath к classpath . Кроме того, да, путь classpath может включать в себя путь, который не является локальным, а где-то в Интернете. Узнайте больше о classpath, чтобы разрешить ваши сомнения.

Классы, которые вы импортируете, должны находиться в пути к classам. Таким образом, либо пользователи вашего апплета должны иметь библиотеки в нужном месте, либо просто предоставить эти библиотеки, включив их в свой файл jar. Например, например: Самый простой способ объединить выпуск в один JAR-файл

  • Как сделать PDF в Android
  • Как переместить / переименовать файл из внутреннего хранилища приложений во внешнее хранилище на Android?
  • Android N изменяет язык программным путем
  • Android HTML.fromHTML () с изображениями?
  • Как сделать снимок экрана в Java?
  • Почему у RecyclerView нет onItemClickListener ()?
  • Я получаю java.lang.classnotfoundexception: com.mysql.jdbc.Driver
  • java.lang.RuntimeException: сбой takePicture
  • Dx bad class file magic (cafebabe) или версия (0033.0000) с ADK14
  • Удаление объекта в java?
  • Можем ли мы предположить значения массива по умолчанию в Java? например, предположим, что массив int задан для всех нhive?
  • Давайте будем гением компьютера.