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语句看起来很长。
分享到:
相关推荐
在Spring源码解析中,时序图用于描绘不同组件之间的调用关系,如AOP代理的生成过程、事件发布机制、数据访问层(DAO)与业务逻辑层(Service)的交互等。这有助于开发者理解Spring如何处理复杂的应用场景。 再者,...
1. **安装与导入**:首先,你需要将下载的"poi" jar包导入到你的Java项目中。在Maven项目中,可以通过在pom.xml文件中添加依赖来实现: ```xml <groupId>org.apache.poi <artifactId>poi <version>4.1.2...
在Java开发环境中,解析这种协议通常涉及到网络通信、数据编码与解码、XML或JSON处理等多个技术领域。下面将详细探讨相关知识点。 1. **hj212协议**:全称为《污染源在线自动监控(监测)系统数据传输标准》,是...
下面将详细介绍如何使用Java进行GRIB2文件的读取和解析。 1. **理解GRIB2文件结构**: GRIB2文件由多个消息组成,每个消息包含一组相关的气象数据。消息由一个固定长度的头部(Header)和可变长度的数据部分(Data...
本文将深度解析Java中的包机制,包括其引入原因、与平台的衔接方式以及如何正确使用包。 #### 一、为何Java中需要“包”? Java中引入“包”的主要目的是满足其跨平台特性的需求。由于Java资源以文件形式组织,...
Java中的Apache POI库是用于读取和...通过以上策略,可以有效地处理Java POI在导入大数据量Excel时的内存溢出问题,同时提高程序的运行效率。在实践中,应根据具体场景选择合适的优化方法,确保程序的稳定性和性能。
1. **单个对象赋值**:工具类可能设计了一个方法,接收一个Java对象和Excel中的某一单元格数据,通过反射机制将单元格的值设置到对象的对应属性上。这样,你可以轻松地从Excel表格中读取数据并映射到业务对象中。 2...
在Java中调用Kettle,我们需要导入相关的jar包,这些包通常包括: 1. `kettle-engine.jar`: 包含了执行Kettle转换和工作流的核心类。 2. `kettle-core.jar`: 提供了Kettle的基础功能和数据类型。 3. `kettle-api....
在Java编程环境中,"java excel 导入"通常是指使用Java处理Excel文件,将数据从Excel导入到数据库,如MySQL。这个过程涉及到多个关键知识点,包括文件读取、数据解析、数据库连接以及事务处理等。以下是对这些核心...
这个资源包可能包含了在Java环境下实现Modbus RTU通信所需的工具和资料。以下是关于Modbus RTU以及如何在Java中实现它的详细知识点: 1. **Modbus协议**:Modbus是一种简单、开放的通信协议,最初由Modicon公司(现...
### Java大批量导入Excel:多线程加分片处理详解 #### 概述 在实际工作中,经常需要批量处理大量的Excel数据。当面对成千上万甚至百万级别的数据时,简单的单线程处理方式往往无法满足效率的需求。为了解决这个...
1. **定义**: 在Java中,包是用于对类进行分组的一种机制。通过使用包,可以将相关的类和接口放在同一个命名空间下。 2. **声明**: 如果要创建一个新的包,可以在Java源文件的第一行使用`package`关键字来声明。例如...
创建完包后,你需要确保源文件的存储位置与包名一致。例如,如果你创建了名为`shape_package`的包,并且在该包中有一个名为`PARAM`的类,那么`PARAM.java`文件应该存储在`shape_package`文件夹内。 ##### 3.2 使用...
在Java开发中,处理Excel数据是一项常见的任务,例如数据导入导出、报表生成等。EasyExcel是阿里巴巴开源的一款高效、易用的Java库,专门用于处理Excel文件,它以其轻量级、无内存溢出风险以及对大数据量的支持,...
在Java编程中,JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它使得人和机器都能容易地读取和...在导入jar包后,你可以使用库提供的类和方法来创建、解析和操作JSON对象,从而简化你的开发工作。
要使用Java反射API,首先需要导入`java.lang.reflect`包下的类。例如,`Method`类提供了方法的元数据信息,可以通过这些信息动态地调用方法。 #### 三、实际应用场景 ##### 3.1 动态代理 反射机制可以用来创建...
Java通过JDBC(Java Database Connectivity)API与各种类型的数据库进行交互。JDBC提供了一组接口和类,允许开发者执行SQL语句,处理结果集,并管理数据库连接。在Java程序中,你需要导入如`java.sql.Connection`, `...
Java提供了`javax.xml.validation`包,通过`SchemaFactory`和`Validator`接口,可以创建XML Schema并验证XML文档是否合规。 总结,XML解析在Java中的应用广泛且多样,包括数据交换、配置管理、对象绑定等多个场景。...