java中如何导入_在Java中如何导入?

我认为您可能会问的问题是“Java中的是什么包,以及import关键字与他们有何关系?”您对目录结构的混淆可能来自于一些其他语言包含使用文件名的指令在编译时从字面上包含指定文件的内容到源代码中的事实。 C/C++是使用这种类型的include指令的语言示例。 Java的import关键字不能这样工作。正如其他人所说,import关键字只是一个引用一个或多个包中的一个或多个类的简写方式。真正的工作是由Java虚拟机的类加载器完成的(下面的细节)。

我们先来看一下“Java包”的定义,如Wikipedia article所述:

A Java package is a mechanism for

organizing Java classes into

namespaces similar to the modules of

Modula. Java packages can be stored in

compressed files called JAR files,

allowing classes to download faster as

a group rather than one at a time.

Programmers also typically use

packages to organize classes belonging

to the same category or providing

similar functionality.

在Java中,类的源代码文件实际上是由目录组织的,但Java虚拟机(JVM)定位类的方法与C/C++等语言不同。

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

Java和C/C++之类的语言之间的区别是类加载器的概念。事实上,类加载器的概念是Java虚拟机架构的关键部分。类加载器的任务是找到并加载程序需要的任何类文件。 “原始”或“默认”Java类加载器通常由JVM提供。它是一个类型为ClassLoader的常规类,并包含一个名为loadClass()的方法,具有以下定义:

// Loads the class with the specified name.

// Example: loadClass("org.apache.nutch.plugin.Extension")

Class loadClass(String name)

该loadClass()方法将尝试找到具有给定名称的类的类文件,并生成具有能够实例化类的newInstance()方法的Class对象。

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

所以,现在我们知道,“com.foo.bar.MyClass”是否在您自己的源代码树中的类文件中,或者类文件中的某个类文件中的类文件,类加载器将为您找到它如果存在的话。如果不存在,你会得到一个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");

}

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值