Как работает импорт 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 со всеми моими классами, мой сервер, где будет размещен этот файл JAR, должен быть бесплатным доступом в Интернет, чтобы получить эти package?

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

<applet code="com.colorfulwolf.webcamapplet.WebcamApplet"
archive="http://san.redenetimoveis.com/teste.jar, http://san.redenetimoveis.com/core.jar, http://san.redenetimoveis.com/javacv.jar, http://san.redenetimoveis.com/javase.jar, http://san.redenetimoveis.com/jna.jar, http://san.redenetimoveis.com/customizer.jar, http://san.redenetimoveis.com/jmf.jar, http://san.redenetimoveis.com/mediaplayer.jar, http://san.redenetimoveis.com/multiplayer.jar, http://san.redenetimoveis.com/sound.jar"
    height="550" width="550">
</applet>
5 51

5 ответов:

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

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

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

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

import static java.lang.Math.*;

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

double r = cos(PI * theta);

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

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

<applet
  codebase = "http://san.redenetimoveis.com"
  archive="test.jar, core.jar"
  code="com.colorfulwolf.webcamapplet.WebcamApplet"      
  width="550" height="550" >

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

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

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

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

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

import javax.swing.*;

JButton but = new JButton();

импорт в Java не работает вообще, так как он оценивается только во время компиляции. (Рассматривайте его как ярлыки, поэтому вам не нужно писать полные имена классов). Во время выполнения нет импорта вообще, только FQCNs.

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

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

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

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

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

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