`

谈java的导入(import)

阅读更多
单类型导入(single-type-import),例如import java.io.File;
  按需类型导入(type-import-on-demand),例如 import java.io.*;
  关于这两种导入类型大家各有所爱,众说纷纭。这里分析一下这两种导入类型的大致工作原理供大家参考。
  单类型导入比较好理解,仅仅导入一个public类或者接口。而对于按需类型导入,有人误解为导入一个包下的所有类,其实不然,看名字就知道,他只会按需导入,也就是说它并非导入整个包,而仅仅导入当前类需要使用的类。
  既然如此是不是就可以放心的使用按需类型导入呢?非也,非也。因为单类型导入和按需类型导入对类文件的定位算法是不一样的。
  java编译器会从启动目录(bootstrap),扩展目录(extension)和用户类路径下去定位需要导入的类,而这些目录仅仅是给出了类的顶层目录。编译器的类文件定位方法大致可以理解为如下公式:
  顶层路径名 \ 包名 \ 文件名。class = 绝对路径
  对于单类型导入很简单,因为包明和文件名都已经确定,所以可以一次性查找定位。
  对于按需类型导入则比较复杂,编译器会把包名和文件名进行排列组合,然后对所有的可能性进行类文件查找定位。例如:
  package com;
  import java.io.*;
  import java.util.*;
  当你的类文件中用到了File类,那么可能出现File类的地方如下:
  1、File \\ File类属于无名包,就是说File类没有package语句,编译器会首先搜索无名包
  2、com.File \\ File类属于当前包
  3、java.lang.File \\编译器会自动导入java.lang包
  4、java.io.File
  5、java.util.File
  需要注意的地方就是,编译器找到java.io.File类之后并不会停止下一步的寻找,而要把所有的可能性都查找完以确定是否有类导入冲突。假设此时的顶层路径有三个,那么编译器就会进行3*5=15次查找。
  了解以上原理之后,我们可以得出这样的结论:按需类型导入是绝对不会降低Java代码的执行效率的,但会影响到Java代码的编译速度。
  查看JDK的源代码就知道SUN的软件工程师一般不会使用按需类型导入。因为使用单类型导入至少有以下两点好处:
  1.提高编译速度。
  2.避免命名冲突。(例如:当你import java.awt.*;import java.util.*后,使用List的时候编译器将会出编译错误)
  当然,使用单类型导入会使用你的import语句看起来很长。
分享到:
评论
1 楼 851228082 2015-01-05  
好文!彻底理解单类型导入与按需导入的区别了。
还有一点可以通过 javap -c 类名,查看生成的字节码文件,字节码中就能看见包名已经补全类名

相关推荐

    欧柏泰克:Java包的静态导入import static和import的区别

    欧柏泰克:Java包的静态导入import static和import的区别 Java中的静态导入是Java 5中引入的一项新特性,允许开发者在编写代码时更方便地使用静态方法和成员变量。下面我们来详细地了解Java中的静态导入和普通导入...

    像import java类一样 import js类

    标题“像import java类一样 import js类”暗示了这篇博文主要讨论的是JavaScript中引入模块的方式,尝试模拟Java的导入机制。在JavaScript的世界里,我们通常使用`require`(Node.js环境)或`import`(ES6及以后版本...

    JavaImport for Android 3.9.rar

    对于JavaImport,此文件可能详细解释了如何安装、配置以及如何使用工具来导入Java类到Android项目中。 5. **DelphiExample** 这个文件夹包含了一个使用JavaImport工具的Delphi示例项目,开发者可以通过查看和运行...

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

    标题中的"JAVA 程序 源代码 import java.applet.*;import java.awt.*"表明这段源代码涉及了Java编程语言,特别是与Applet和图形用户界面(GUI)相关的部分。`import`语句是Java中用于引入库或包的机制,以便能够使用...

    java_poi实现excel导入导出

    Java POI 实现 Excel 导入导出 Java POI 是一个流行的 Java 库,用于处理 Microsoft Office 文件格式,包括 Excel 文件。在本文中,我们将详细介绍如何使用 Java POI 实现 Excel 导入导出功能。 1. 什么是 Java ...

    java-package与import机制

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

    java_import_excel.rar_ java_import_excel_java import excel_java数

    总结,Java导入Excel主要涉及使用Apache POI库来创建、操作Excel文件,以及在Web环境中实现文件下载。在实际开发中,还需要关注性能优化,特别是处理大数据量时,以避免内存溢出等问题。同时,了解如何根据需求调整...

    Java poi导入导出EXCEL工具类(兼容各版本)

    1、导入xml配置示例如下(见src/main/resources/import-config.xml) 2、导出xml配置示例如下(见src/main/resources/export-config.xml) 三、调用示例 1、导入:src/test/java/...

    Java认证:Java中import使用.doc

    ### Java认证:深入理解Java中的import使用 #### 一、Java包的概念与作用 在Java中,`package`被用来组织类(classes)和接口(interfaces)。它类似于一个文件夹结构,帮助开发者管理代码,避免类名冲突。例如,`...

    Excel.zip java-poi-excel 导入Import导出Goout excel表格

    本项目"ExcelImport.zip"专注于使用Java POI库处理Excel表格的导入与导出功能,具体通过读取流的方式来实现,这在大数据处理或服务器端应用中尤为常见,因为可以有效地管理内存。 首先,我们来详细了解一下Apache ...

    java实现excel导入数据库

    在Java编程中,将Excel数据导入到MySQL数据库是一项常见的任务,尤其在数据处理和分析的场景下。要完成这个过程,我们需要使用特定的库来读取Excel文件,并使用JDBC(Java Database Connectivity)来与MySQL数据库...

    DataBinding 架构组件 ② - DataBinding 布局中使用 import 标签导入 Java、Kotlin 类

    【Jetpack】DataBinding 架构组件 ② ( 字符串拼接函数 | 绑定点击事件函数 | DataBinding 布局中使用 import 标签导入 Java、Kotlin 类 ) https://hanshuliang.blog.csdn.net/article/details/129773150 一、...

    java 导入excel

    在Java编程环境中,导入Excel数据是一项常见的任务,特别是在数据分析、报表处理或系统集成等领域。Excel文件,特别是.xlsx格式(属于Microsoft Office Open XML标准)和.xls格式(属于旧版的BIFF格式),通常包含...

    java_Excel_import.rar_excel 导入_java 导入 excel

    本主题将深入探讨如何使用Java实现Excel数据的读取和导入。主要涉及的工具有Apache POI库,它是Java中处理Microsoft Office格式文件的强大工具。 首先,我们需要了解Apache POI库。Apache POI 是一个开源项目,它...

    javatools数据导入导出工具

    JavaTools是一款基于Java开发的数据导入导出工具,主要用于数据库管理和数据迁移工作。它提供了一种简单易用的图形用户界面,使得非编程人员也能轻松处理数据的导入与导出任务。在更新后的版本v1.0.5中,开发者对...

    java导入导出excel操作

    ### Java导入导出Excel操作(基于jxl库) #### 一、引言 在实际工作中,经常需要将数据从数据库或其他格式转换为Excel文件,或者从Excel文件中读取数据进行处理。Java作为一种广泛使用的编程语言,提供了多种库来...

    通过java导入读取微软项目管理文件(配套代码和导入project文件)

    本篇文章将深入探讨如何使用Java来导入并读取微软的Project文件,同时也提供了一套相关的代码示例。 首先,我们要知道微软的Project文件通常是以.mpp格式存储的,这些文件包含了项目的详细信息,如任务、资源、时间...

    protobuf导入定义(import)

    在protobuf中,“导入”(import)是一个关键概念,它允许你在一个.proto文件中引用另一个.proto文件中的定义。这样,你可以在多个文件之间共享消息类型、枚举或服务定义,避免代码重复,提高代码的可维护性和组织性...

Global site tag (gtag.js) - Google Analytics