`
Java_KAbanban
  • 浏览: 38164 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Java包的导入机制

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

  单类型导入(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类的地方如下

  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语句看起来很长。

分享到:
评论

相关推荐

    Java包导入机制的研究与解析

    Java包导入机制是Java编程语言中的一个重要组成部分,它允许开发者从不同的源代码组织结构中引入所需的类和接口。本文将深入探讨两种主要的导入方式:单类型导入和按需类型导入,并讨论它们的工作原理和使用场景。 ...

    java自动导入导出

    - Java的`java.io`和`java.nio`包提供了丰富的文件操作API,如读写文件、创建目录等,用于处理导入导出过程中的临时文件或结果文件。 7. **异常处理**: - 在自动化导入导出过程中,必须充分考虑可能出现的异常,...

    javatools数据导入导出工具

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

    java+导入的数据库jar包

    这里我们关注的焦点是“java+导入的数据库jar包”,这通常指的是Java应用程序为了连接到数据库,如MySQL、Oracle、SQL Server等,而引入的JDBC(Java Database Connectivity)驱动库。JDBC是Java平台中用于与各种...

    java实现Excel导入(POI)

    在Java编程环境中,实现Excel数据的导入是一项常见的任务,尤其在数据处理、报表生成或数据分析等领域。Apache POI是一个流行的库,它允许开发者读写Microsoft Office格式的文件,包括Excel(.xls和.xlsx)。本篇...

    java_poi导入excel通用工具类

    总结,这个“java_poi导入excel通用工具类”结合了Apache POI的强大功能,Java的反射机制,以及自定义注解的灵活性,为Java开发者提供了一种高效、可定制的Excel数据导入解决方案。通过这样的工具类,我们可以轻松地...

    Java 包的使用

    下面将详细介绍Java包的使用及其相关知识点。 首先,我们来看一下Java包的定义和作用: 1. **定义**:Java包是一组相关的类和接口的集合,它们被封装在一起,形成一个命名空间。每个包都有一个唯一的名称,通常是...

    Java中的包机制

    ### Java中的包机制详解 #### 引言 Java的包机制是其编程体系中的核心概念之一,它不仅有助于代码的组织与管理,还确保了Java的跨平台特性得以实现。包(Package)作为Java的基础组成部分,对理解Java编程至关重要...

    java_poi导入excel通用工具类V0915

    1. **单个对象赋值**:工具类可能设计了一个方法,接收一个Java对象和Excel中的某一单元格数据,通过反射机制将单元格的值设置到对象的对应属性上。这样,你可以轻松地从Excel表格中读取数据并映射到业务对象中。 2...

    Thinking in Java 4 源码 导入IDEA可直接运行

    源码分享提供了直接导入IDEA(IntelliJ IDEA)的便利,这是一款广泛使用的Java集成开发环境,以其高效、智能的代码编辑、调试和项目管理功能而闻名。通过导入这些源码,读者可以在实践中学习书中的例子,更好地理解...

    java大批量导入excel,多线程加分片处理的dome

    ### Java大批量导入Excel:多线程加分片处理详解 #### 概述 在实际工作中,经常需要批量处理大量的Excel数据。当面对成千上万甚至百万级别的数据时,简单的单线程处理方式往往无法满足效率的需求。为了解决这个...

    java调用Kettle引用jar包2.zip

    在Java中调用Kettle,我们需要导入相关的jar包,这些包通常包括: 1. `kettle-engine.jar`: 包含了执行Kettle转换和工作流的核心类。 2. `kettle-core.jar`: 提供了Kettle的基础功能和数据类型。 3. `kettle-api....

    java导入excel表格

    在Java编程中,导入Excel表格是一项常见的任务,特别是在数据处理、数据分析或系统集成等领域。Excel文件通常用于存储结构化数据,而Java作为一种强大的后端语言,提供了多种方式来读取和操作这些数据。本篇文章将...

    JAVA包的引入问题

    ### JAVA包的引入问题详解 #### 一、背景介绍 在Java编程中,包(package)是一种组织类和接口的方式,可以有效地避免命名冲突,并且能够提高代码的可维护性。本文将详细介绍Java中的包是如何引入的,以及在实际操作...

    java excl 导入

    在Java编程环境中,"java excel 导入"通常是指使用Java处理Excel文件,将数据从Excel导入到数据库,如MySQL。这个过程涉及到多个关键知识点,包括文件读取、数据解析、数据库连接以及事务处理等。以下是对这些核心...

    java源码包(包括sun包和具体导入步骤)

    这个压缩包包含了`sun`包和其他相关源码,`sun`包是Java早期版本中包含的一些核心库,提供了对Java平台内部机制的访问。然而,由于版权和稳定性的考虑,`sun`包在较新的Java版本中被隐藏或移除,因此能够获取并研究...

    java通用的导入导出excel工具

    本工具是基于Java反射机制实现的通用Excel导入导出类,它提供了便捷的方式来读取和写入Excel文件,适用于多种场景。下面我们将深入探讨这个工具的工作原理、使用方法以及相关的Java Excel处理知识。 1. **Java反射...

    Java基础可导入试题文件新.zip

    3. 异常处理:Java提供了异常处理机制,通过try-catch-finally语句块捕获并处理运行时错误,保证程序的健壮性。 4. 集合框架:Java集合框架包括List、Set、Queue和Map等接口及其实现类,如ArrayList、HashSet、...

    浅谈java包的使用

    而Java包(Package)就是用来实现这种逻辑分组的一种机制。通过将相关的类放入同一个包中,不仅可以避免命名冲突,还能有效地管理和组织代码。 #### 二、Java包的概念 Java包是一种组织类和接口的方式,它允许...

Global site tag (gtag.js) - Google Analytics