`
032615
  • 浏览: 60980 次
  • 性别: 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知识点,通过学习这些代码,你可以加强你的编程技能: 1. **基础语法*...

    Java Spring 源码解析 Xmind 思维导图

    总的来说,这份"Java Spring 源码解析 Xmind 思维导图"涵盖了Spring框架的核心组件和设计理念,帮助开发者从源码层面理解Spring的运行机制。通过这样的学习,可以提升开发者对Spring的理解,从而更好地利用Spring...

    java调用Kettle引用jar包2.zip

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

    EasyExcel JAVA解析Excel工具 v3.3.3.zip

    《EasyExcel:JAVA解析Excel工具详解》 在Java开发中,处理Excel数据是一项常见的任务,例如数据导入导出、报表生成等。EasyExcel是阿里巴巴开源的一款高效、易用的Java库,专门用于处理Excel文件,它以其轻量级、...

    java excl 导入

    以上就是关于“java excel 导入”这一主题涉及的主要技术点,涵盖了从Excel文件读取、数据处理、数据库连接到数据导入的全过程。理解并掌握这些知识点,对于实现Java环境下高效、可靠的Excel数据导入功能至关重要。

    Java中的包机制

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

    java核心技术卷1

    4. **包与导入**:阐述Java中的包管理机制,如何使用import语句导入类库,以及标准库中的主要包,如java.lang、java.util等。 5. **数据结构与集合框架**:讲解数组和泛型的概念,介绍ArrayList、LinkedList、...

    JAVA2核心技术第1卷.基础知识7th源代码

    4. **包与导入**:Java中的包是组织类的一种方式,可以避免命名冲突。`import`关键字用于引入其他包中的类,以便在程序中使用。 5. **方法**:方法是Java中实现功能的代码块,包括方法的定义、重载(overloading)...

    Java解析json 所需jar包

    在Java编程中,JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它使得人和机器都能容易地读取和...在导入jar包后,你可以使用库提供的类和方法来创建、解析和操作JSON对象,从而简化你的开发工作。

    javajavajava

    3. **包(Package)**:Java中的包是管理类的一种方式,它帮助我们组织和导入相关的类,避免命名冲突。 4. **异常处理(Exception Handling)**:Java提供了一种结构化的错误处理机制,通过try-catch-finally语句块...

    JavaCode:java核心技术卷一源代码-代

    《JavaCode: Java核心技术卷一源代码》是一个与Java编程相关的资源,主要涵盖了Java语言的基础和核心概念。这个压缩包中的"JavaCode-master"很可能是一个包含源代码的项目目录,通常用于教学或学习目的,帮助开发者...

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

    #### 核心知识点解析 ### 1. 多线程与分片处理的原理 **多线程**:通过创建多个线程来并发执行任务,充分利用CPU资源,提高程序运行效率。在本案例中,通过`Executors.newFixedThreadPool()`创建了一个固定大小的...

    SUN JAVA程序员模拟题

    ### SUN JAVA程序员模拟题知识点解析 #### 题目1: JDK组成部分 - **知识点**:JDK(Java Development Kit)组成 - **解析**:JDK主要由以下几个部分组成: - **Java编程语言**:Java编程语言是用于编写Java应用...

    关于java实现短信验证码注册的两种方法:Java - OkHttp.java和Java - Unirest.java文件.zip

    在IT行业中,尤其是在Web开发领域,短信验证码是一种广泛使用的安全机制,用于验证用户身份或防止自动化脚本的恶意操作。本篇文章将详细讲解如何在Java环境下实现短信验证码的注册功能,主要涉及两种方法:OkHttp和...

    java源码:Java模板语言 Beetl.rar

    5. **高效性能**:Beetl的编译机制将模板转换为Java字节码,运行时无需解析,从而提高了执行效率。 6. **强大的国际化支持**:Beetl内置了I18N功能,可以轻松实现多语言切换。 7. **兼容性**:Beetl不仅适用于Web...

    java poi excel 模板导入通用工具类,支持2003/2007

    Excel模板导入通用工具类的核心功能可能包括以下几个方面: 1. **模板解析**:工具类会解析预定义的Excel模板,这些模板通常包含固定的格式、样式和计算公式。开发者可以预先设计好模板,然后通过工具类将数据填充...

    Java面向对象程序设计期末复习试题(附解析)

    面向对象程序设计是Java的核心特性,它使得程序员可以利用对象的概念来组织代码,提高软件的可维护性和可重用性。以下是对Java面向对象的一些关键知识点的详细解释: 1. **封装**:Java面向对象的基本原则之一,它...

    Java数据库手工和execl导入操作

    Java通过JDBC(Java Database Connectivity)API与各种类型的数据库进行交互。JDBC提供了一组接口和类,允许开发者执行SQL语句,处理结果集,并管理数据库连接。在Java程序中,你需要导入如`java.sql.Connection`, `...

    JAVA核心知识点整理.zip

    以下是对这些核心知识点的深入解析: 1. **基础语法**:Java的基础包括变量、数据类型(如整型、浮点型、字符型、布尔型)、运算符(算术、比较、逻辑、位操作等)、流程控制(if-else、switch、for、while、do-...

Global site tag (gtag.js) - Google Analytics