如何在Java中完成导入?

omg*_*omg 19 java import

例如

import org.apache.nutch.plugin.Extension,
Run Code Online (Sandbox Code Playgroud)

虽然多次使用,

我不知道基本上做了什么.

编辑:org.apache.nutch.plugin基本上是4个目录或少于4个目录,如名为org.apache

Wil*_*del 40

我想你可能要问的问题是,"Java中的包import什么,关键字与它们有什么关系?" .您对目录结构的困惑可能源于这样一个事实,即某些其他语言具有include使用文件名在编译时在源代码中直接包含指定文件内容的指令.C/C++是使用此类include指令的语言示例.Java的import关键字不能以这种方式工作.正如其他人所说,import关键字只是引用包中一个或多个类的简便方法.实际工作由Java虚拟机的类加载器完成(详情如下).

让我们从维基百科文章中描述的"Java包"的定义开始:

Java包是一种将Java类组织成名称空间的机制,类似于Modula的模块.Java包可以存储在称为JAR文件的压缩文件中,允许类作为一个组而不是一次一个地更快地下载.程序员通常还使用包来组织属于同一类别的类或提供类似的功能.

在Java中,类的源代码文件实际上是由目录组织,而是由Java虚拟机(JVM)所在的班级方法是像C/C++语言的不同.

假设您的源代码中有一个名为"com.foo.bar"的包,并且在该包中有一个名为"MyClass"的类.在编译时,该类的源代码在文件系统中的位置必须是{source}/com/foo/bar/MyClass.java,{source}您要编译的源树的根目录在哪里.

Java和C/C++等语言之间的一个区别是类加载器的概念.事实上,类加载器的概念是Java虚拟机架构的关键部分.类加载器的工作是找到并加载class程序所需的任何文件."原始"或"默认"Java类加载器通常由JVM提供.它是一个常规类型ClassLoader,包含一个loadClass()使用以下定义调用的方法:

// Loads the class with the specified name.
// Example: loadClass("org.apache.nutch.plugin.Extension")
Class loadClass(String name)
Run Code Online (Sandbox Code Playgroud)

loadClass()方法将尝试为class具有给定名称的类定位文件,并生成一个Class具有newInstance()能够实例化该类的方法的对象.

类加载器在哪里搜索class文件?在JVM的类路径中.类路径只是class可以找到文件的位置列表.这些位置可以是包含class文件的目录.它甚至可以包含jar文件,这些文件本身可以包含更多class文件.默认的类加载器能够查看这些jar文件以搜索class文件.作为旁注,您可以实现自己的类加载器,例如,允许搜索网络位置(或任何其他位置)的class文件.

所以,现在我们知道无论"com.foo.bar.MyClass"是在class你自己的源代码树中的文件中,还是在类路径中的某个class文件中的jar文件中,类加载器都会找到它,如果它存在.如果它不存在,你会得到一个ClassNotFoundException.

现在要解决import关键字:我将参考以下示例:

import com.foo.bar.MyClass;

...

public void someFunction() {
    MyClass obj1 = new MyClass();
    org.blah.MyClass obj2 = new org.blah.MyClass("some string argument");
}
Run Code Online (Sandbox Code Playgroud)

第一行只是一种告诉编译器的方法"每当你看到一个简单地声明为变量的变量时MyClass,假设我的意思com.foo.bar.MyClass.就是这样的情况obj1.在这种情况下obj2,你明确告诉编译器"我不知道com.foo.bar.MyClass我想要这个类,我实际上想要org.blah.MyClass".所以import关键字只是一种简单的方法,可以减少程序员为了使用其他类而必须要输入的数量.所有有趣的东西都是在JVM的类加载器中完成的.

有关类加载器的确切内容的更多信息,我建议您阅读一篇名为The Class of Java Class Loaders的文章

  • _Java 包可以存储在称为 JAR 文件的压缩文件中,从而使类能够以一组的形式更快地下载,而不是一次下载一个。_ 从哪里下载? (2认同)

duf*_*ymo 14

它正在做的就是节省你打字.每次要使用它时,都不需要输入"org.apache.nutch.plugin.Extension",导入允许您通过其短名称"Extension"来引用它.

不要被"import"这个词弄糊涂 - 它没有加载.class文件或类似的东西.类加载器将在CLASSPATH上搜索它,并在代码第一次需要时将其加载到perm空间.

更新:作为开发人员,您必须知道包与目录相关联.如果在.java文件中创建包"com.foo.bar.baz",则必须将其存储在com/foo/bar/baz目录中.

但是当您下载一个JAR文件时,就像Apache Nutch库一样,从您的角度来看,没有涉及的目录.创建JAR的人必须压缩正确的目录结构,如果使用WinZip打开JAR,则可以将其视为.class文件的路径.在编译和运行时,您只需将JAR放在应用程序的CLASSPATH中.