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编程语言中的一个重要组成部分,它允许开发者从不同的源代码组织结构中引入所需的类和接口。本文将深入探讨两种主要的导入方式:单类型导入和按需类型导入,并讨论它们的工作原理和使用场景。 ...
有两种导入方式: - **完全导入**:`import com.example.myapp.MyClass;`,指定导入特定的类。 - **星号导入**:`import com.example.myapp.*;`,导入整个包下的所有类,但不推荐,可能导致命名冲突。 3. **默认...
总结,这个“java_poi导入excel通用工具类”结合了Apache POI的强大功能,Java的反射机制,以及自定义注解的灵活性,为Java开发者提供了一种高效、可定制的Excel数据导入解决方案。通过这样的工具类,我们可以轻松地...
Excel文件有两种主要格式:.xls(老版本,使用HSSF API处理)和.xlsx(新版本,使用XSSF API处理)。这两个API在Apache POI中都有支持,本工具可能需要根据文件格式选择相应的API进行操作。 4. **Excel数据导入** ...
在Java编程世界中,"包"(Package)是组织类和接口的一种机制,它使得代码管理更加有序,避免了命名冲突的问题。`com.bruceeckel.*` 提到的这个包名,可能来源于Bruce Eckel的著作《Thinking in Java》。这本书是...
1. **jna-platform-4.1.0.jar 和 jna-4.1.0.jar**:这两个jar包是Java Native Access(JNA)的一部分,用于在Java中直接调用操作系统API,无需编写C代码。在这个场景中,它们可能用于处理与网络I/O相关的底层系统...
Java作为一门广泛应用于大数据和云计算领域的编程语言,其基础知识对于理解和操作这两个技术至关重要。下面将详细探讨Java在大数据和云计算中的应用以及相关的知识点。 一、Java基础 1. 类与对象:Java是一种面向...
1. **定义**: 在Java中,包是用于对类进行分组的一种机制。通过使用包,可以将相关的类和接口放在同一个命名空间下。 2. **声明**: 如果要创建一个新的包,可以在Java源文件的第一行使用`package`关键字来声明。例如...
Java提供了两种内置的LookAndFeel:Metal(默认的Java Look and Feel)和SystemLookAndFeel,后者可以使Swing组件看起来与宿主操作系统(如Windows、Mac OS X或Linux)的原生控件一致。此外,开发者还可以自定义Look...
Java提供了两种内置的LookAndFeel:金属LookAndFeel(Metal L&F)和系统LookAndFeel。金属LookAndFeel是Java特有的,而系统LookAndFeel则会遵循操作系统本地的界面风格,如Windows、Mac或Linux。然而,这些默认的...
有两种导入方式:`import`语句和“星号”导入。例如: ```java // 导入单个类 import com.example.myapp.MyClass; // 导入整个包中的所有公开类 import com.example.myapp.*; ``` 当我们在项目中使用多个包时,类...
5. **统一的导入与校验**: 在描述中提到的"统一封装"意味着创建一个通用的导入机制,这个机制可以接受不同的Excel模板,并根据预定义的校验规则进行数据验证。这样做可以提高代码的复用性,减少开发工作量,使得新...
- **面向对象编程**:Java是一种面向对象的语言,项目中的工具类、实体类、接口等都是基于面向对象设计原则构建的。 - **异常处理**:在处理数据库操作时,Java的异常处理机制(try-catch-finally)确保程序在遇到...
本工具类就是基于Java POI实现的,旨在提供一个通用的解决方案,用于从Excel模板导入数据,同时兼容2003和2007两种版本的Excel文件。 Excel模板导入通用工具类的核心功能可能包括以下几个方面: 1. **模板解析**:...
当涉及到不同数据库系统间的数据交互,如从SQL Server到MySQL,JAVA作为一种强大的后端编程语言,提供了丰富的库和工具来实现跨数据库服务器的数据导出和导入功能。本文将深入探讨如何使用JAVA来实现这一目标。 ...
- **组织代码:** `package`是Java中用来组织类的一种方式,它可以将相关的类归类在一起,便于管理和查找。 - **避免命名冲突:** 在大型项目中,不同的开发者可能会创建同名的类,通过使用不同的包名可以避免这种...
总之,Java中的静态导入机制是一种方便的语法糖,它减少了代码中的类名重复,提高了代码的可读性,但过度使用应谨慎,以免影响代码的清晰度和维护性。在实际开发中,合理地运用静态导入可以提高编码效率,但也需要...
"Java的Excel导入导出源码" 提供了一种方便的方法来处理这类问题。本知识点主要涉及以下几个方面: 1. **Apache POI库**: Apache POI 是一个流行的开源Java API,用于读写Microsoft Office格式的文件,包括Excel...
Java版本的WebDAVServer和FTPServer是两个用于文件共享和服务的服务器软件,它们都是基于Java语言开发的。WebDAV(Web-based Distributed Authoring and Versioning)是一种扩展HTTP协议的技术,允许用户编辑和管理...