Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java导入是如何工作的?_Java - Fatal编程技术网

Java导入是如何工作的?

Java导入是如何工作的?,java,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 co

我想知道
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文件,它必须是免费的Internet访问,才能获得这些

我的
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>

javac
(或运行时
java
)查找在
类路径中导入的
类。如果它们不在
类路径中
则抛出
类未找到
异常

classpath
就像shell中的
path
变量,shell使用该变量查找命令或可执行文件


整个目录或单个jar文件可以放在
类路径中。此外,是的,
类路径
可能包括一个非本地路径,但位于internet上的某个位置。请阅读有关类路径的更多信息以解决您的疑问。

您要导入的类必须位于类路径上。因此,要么Applet的用户必须将这些库放在正确的位置,要么您只需将它们包含在jar文件中即可提供这些库。例如:Java中的导入根本不起作用,因为它只在编译时进行计算。 (将其视为快捷方式,这样就不必编写完全限定的类名)。在运行时根本没有导入,只有FQCN

在运行时,类加载器必须能够找到您引用的所有类。(classloader基础设施有时很神奇,高度依赖于环境。)对于小程序,您必须正确地装配HTML标记,并在服务器上提供必要的JAR存档


PS:运行时的匹配是通过限定的类名完成的-在该名称下找到的类不一定与您编译所针对的类相同或兼容。

在动态语言中,当解释器导入时,它只读取一个文件并对其求值

在C语言中,外部库在编译时由链接器定位,如果库是静态编译的,则构建最终对象;而对于动态库,则在运行时调用较小版本的链接器,该链接器会重新映射地址,从而使库中的代码可供可执行文件使用

在Java中,
import
被编译器简单地用来让您根据类的非限定名称命名类,比如说
String
,而不是
Java.lang.String
。您实际上不需要导入
java.lang.*
,因为编译器在默认情况下会这样做。然而,这种机制只是为了节省一些输入。Java中的类型是完全限定的类名,因此当代码运行时,
String
实际上是
Java.lang.String
对象。包旨在防止名称冲突,并允许两个类具有相同的简单名称,而不是依赖于像这样的前缀类型的旧C约定<代码>java语言字符串
。这称为名称空间

顺便说一句,在Java中有静态导入结构,如果使用某个类中的大量常量,它允许进一步保存键入。在编译单元(一个.java文件)中

import static java.lang.Math.*;
您可以在代码中使用常量
PI
,而不是通过
Math.PI
引用它,也可以使用方法
cos()
而不是
Math.cos()
。比如你可以写

double r = cos(PI * theta);
一旦理解了类总是在最终字节码中由它们的完全限定名引用,就必须理解类代码实际上是如何加载的。这发生在第一次创建该类的对象时,或者第一次访问该类的静态成员时。此时,
ClassLoader
尝试定位类并实例化它。如果找不到类,将抛出一个
NoClassDefFoundError
(或者如果以编程方式搜索该类,则抛出一个
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的import语句是纯语法的。仅在编译时对import求值,以指示编译器在代码中查找名称的位置

如果始终指定类的完整限定名,则可能没有任何导入语句。像这行一样,根本不需要导入语句:

javax.swing.JButton but = new  javax.swing.JButton();
import语句将使代码更具可读性,如下所示:

import javax.swing.*;

JButton but = new JButton();

我读了这个线程,但线程没有回答我的问题。发生了什么,我的小程序停在一行,我调用了
import static com.googlecode.javacv.jna.highgui.cvCreateCameraCapture中存在的方法。但是
localhost
工作正常,我在服务器中热处理
jar
文件时遇到了这个问题。因此,如果
applet
停止在调用此导入包中存在的方法的行中,可能internet访问规则可以解决此问题?发布对象标记和目录结构。通常小程序可以访问它们来自的服务器,并且在我的导入中调用外部包时,比如google(查看我的导入)。会怎么做?我需要免费上网?看来你的档案必须放在
codebase
指向的同一个位置,并用简单的名称
myjar.jar
foobar.jar
引用。请参见我尝试将
放在哪里定义了$CLASSPATH?我能换一下吗?做