`

java import的机制

    博客分类:
  • java
阅读更多
java中有两种包的导入机制,总结如下:

单类型导入(single-type-import),              例如 import java.io.File;
按需类型导入(type-import-on-demand),例如 import java.io.*;

这里分析一下这两种导入类型的大致工作原理供大家参考。

单类型导入比较好理解,仅仅导入一个public类或者接口。
对于按需类型导入(  import java.io.*;   ),有人误解为导入一个包下的所有类,其实不然,看名字就知道,他只会按需导入,也就是说它并非导入整个包,而仅仅导入当前类需要使用的类。

既然如此是不是就可以放心的使用按需类型导入呢?非也,非也。
因为单类型导入和按需类型导入对类文件的定位算法是不一样的。java编译器会从启动目录(bootstrap),扩展目录(extension)和用户类路径下去定位需要导入的类,而这些目录进仅仅是给出了类的顶层目录。编译器的类文件定位方法大致可以理解为如下公式:
顶层路径名 \ 包名 \ 文件名.class = 绝对路径
对于单类型导入很简单,因为包明和文件名都已经确定,所以可以一次性查找定位。
对于按需类型导入则比较复杂,编译器会把包名和文件名进行排列组合,然后对所有的可能性进行类文件查找定位。例如:

package com;
import java.io.*;
import java.util.*;

当你的类文件中用到了File类,那么可能出现File类的地方如下
File                      \\  File类属于无名包,就是说File类没有package语句,编译器会首先搜索无名包
com.File             \\  File类属于当前包
java.lang.File     \\  编译器会自动导入java.lang包
java.io.File
java.util.File

需要注意的地方就是,编译器找到java.io.File类之后并不会停止下一步的寻找,而要把所有的可能性都查找完以确定是否有类导入冲突。假设此时的顶层路径有三个,那么编译器就会进行3*5=15次查找。

注意:如果在查找完成后,编译器发现了两个同名的类,那么就会报错。要删除你不用的那个类,然后再编译。

了解以上原理之后,我们可以得出这样的结论:按需类型导入是绝对不会降低Java代码的执行效率的,但会影响到Java代码的编译速度。

查看JDK的源代码就知道SUN的软件工程师一般不会使用按需类型导入。因为使用单类型导入至少有以下两点好处:

1。提高编译速度。
2。避免命名冲突。(例如:当你import java.awt.*;import java.util.*后,使用List的时候编译器将会出编译错误)

当然,使用单类型导入会使用你的import语句看起来很长。

分享到:
评论
1 楼 hbxflihua 2012-02-15  

相关推荐

    java-package与import机制

    ### Java Package与Import机制详解 #### 一、引言 对于很多刚开始接触Java编程的初学者来说,往往是从购买一本入门书籍开始他们的Java学习之旅。在这个过程中,他们可能会下载最新的Java SDK并安装在自己的电脑上...

    JavaImport for Android 3.9.rar

    通过Java Native Interface (JNI)机制,JavaImport使得C++和Java之间可以实现无缝通信。 2. **使用JavaImport.exe** "javaimport.exe"是这个工具的主要执行文件,它负责处理Java类库,并生成适配Delphi或C++ ...

    最全的Java import的机制JAVA语言

    最全的Java import的机制

    JAVA 程序 源代码 import java.applet.*;import java.awt.*

    `import`语句是Java中用于引入库或包的机制,以便能够使用其中的类和方法。在给定的描述中,没有更多的具体信息,所以我们将基于这两个导入语句来探讨相关的Java知识点。 1. **Java Applet**: `java.applet.*` 指的...

    像import java类一样 import js类

    它可能包含了`<script>`标签来引入JS文件,并展示如何在浏览器环境中使用import机制。 2. `SWClass.js` - 这很可能是博文中的核心模块,可能包含了一些类或者函数,是其他文件引用的对象。 3. `TestA.js`, `TestB.js...

    java面试题--反射机制

    ### Java反射机制详解 #### 一、引言 在Java面试中,经常会出现与反射机制相关的题目。这是因为Java反射机制不仅是Java语言的一项重要特性,也是理解Java动态特性的关键所在。通过本文,我们将深入探讨Java反射...

    javaimport、package作用与用法.doc

    Java programming 语言中的 package 和 import 机制是非常重要的概念,它们在 Java 编程中扮演着重要的角色。下面我们来详细了解一下 package 和 import 的作用和用法。 首先,让我们了解一下 package 的概念。...

    Java事件机制例子

    Java事件机制基于观察者模式,其中事件源(如按钮)会发布事件,而事件监听器则订阅这些事件并执行相应的操作。 事件、事件监听器和事件源是Java事件处理的三个核心概念。事件是用户或系统发生的某种情况,如鼠标...

    Java深度历险\CH_05.package与import机制

    ### Java深度历险:Chapter 05 - package与import机制 #### 前言 Java是一种广泛使用的编程语言,尤其适合于开发企业级应用。在Java编程的过程中,理解和掌握`package`与`import`机制至关重要。这两者是Java类加载...

    java import、package作用与用法.doc

    Java import 和 package 的作用与用法 Java 编程语言中,import 和 package 是两个非常重要的概念,它们之间有着紧密的联系。很多人对 Java 的 package 和 import 还不太了解,今天我们来深入探讨一下这两个概念的...

    应用java反射机制打印一个对象.docx

    import java.lang.reflect.Field; public class ObjectPrinter { public static void printObject(Object obj) { Class<?> clazz = obj.getClass(); Field[] fields = clazz.getDeclaredFields(); for (Field ...

    java的package和import机制原理解析

    Java的包(package)和导入(import)机制是Java语言中用于组织和管理类文件的一种机制。包可以被理解为将相关的类和接口组织在一起的容器,它们的目的是为了更好的管理命名空间,避免类名之间的冲突,并提供访问...

    java反射机制详解

    import java.lang.reflect.*; public class DumpMethods { public static void main(String args[]) throws Exception { // 加载并初始化命令行参数指定的类 Class classType = Class.forName(args[0]); // ...

    package与import机制.pdf

    ### Package与Import机制详解 #### 一、基本概念与...通过以上解析,我们可以看到Package和Import机制在Java开发中的重要性及其背后的原理。合理运用这些机制,可以帮助开发者构建出更加清晰、易于管理的项目结构。

    Java反射机制总结

    import java.lang.reflect.*; public class DumpMethods { public static void main(String args[]) { try { Class c = Class.forName(args[0]); // 获取指定类的信息 Method m[] = c.getDeclaredMethods(); //...

    import java.awt.docx

    在我们的代码中,我们可以看到 import 语句中包含了 java.awt 和 javax.swing.*,这说明了我们使用的是 Java 的 AWT 和 Swing 工具包。 2. JFrame 和 JDialog 的使用 在我们的代码中,我们可以看到 MainWindow 类...

    Java认证:Java中import使用.doc

    Java 认证:Java 中 import 使用 Java 中的 import 语句是让编译器帮我们打字,让我们在编程时不需要每次都输入完整的类名。import 语句可以将类的名称简写成简称,提高编程效率。 Java 中的 package 机制可以避免...

    java 反射机制例子

    import java.lang.reflect.*; public class DumpMethods { public static void main(String args[]) { try { Class c = Class.forName(args[0]); Method m[] = c.getDeclaredMethods(); for (int i = 0; i ; i...

    反射实例-JAVA反射机制

    import java.lang.reflect.*; public class DumpMethods { public static void main(String args[]) { try { Class c = Class.forName(args[0]); Method m[] = c.getDeclaredMethods(); for (int i = 0; i ; i...

Global site tag (gtag.js) - Google Analytics