java中import机制(指定import和import *的区别)
java中有两种包的导入机制,总结如下:
单类型导入(single-type-import), 例如 import java.io.File;
按需类型导入(type-import-on-demand),例如 import java.io.*;
这里分析一下这两种导入类型的大致工作原理供大家参考。
单类型导入比较好理解,仅仅导入一个public类或者接口。
对于按需类型导入( import java.io.*; ),有人误解为导入一个包下的所有类,其实不然,看名字就知道,他只会按需导入,也就是说它并非导入整个包,而仅仅导入当前类需要使用的类。
既然如此是不是就可以放心的使用按需类型导入呢?非也,非也。
因为单类型导入和按需类型导入对类文件的定位算法是不一样的。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语句看起来很长。
转载于:https://www.cnblogs.com/dtts/p/4692480.html
java中import机制(指定import和import *的区别)相关推荐
- 高级开发必须理解的Java中SPI机制
本文通过探析JDK提供的,在开源项目中比较常用的Java SPI机制,希望给大家在实际开发实践.学习开源项目提供参考. 1 SPI是什么 SPI全称Service Provider Interface ...
- java中,根据指定日期显示出前n天的日期
大家好,我是雄雄,欢迎关注微信公众号:雄雄的小课堂 今天分享的是:在java中,根据指定日期显示出前n天的日期 效果如下: 大家注意观察上面的时间,我传入的时间是:2022年5月9日21:28:03, ...
- Java中,一切皆是对象——java中的对象类型与基本数据类型的区别
起因:取一个list给另一个list赋值,然后在另一个list中取出进行修改.list其中类型为对象时,String时,基本数据类型时. [java中的对象类型与基本数据类型的区别] #声明和实例化 ...
- java堆和栈 常量池_GitHub - han-guang-xue/difference-of-stack-heap-pool: Java中堆、栈和常量池的区别...
Java中堆.栈和常量池的区别 栈 堆 常量池的概念 首先我们先了解一下概念,Java把内存分成两种,一种叫做栈内存,一种叫做堆内存. 栈内存 存放基本类型的变量数据和对象类型的引用(请注意存放的是引 ...
- Java中Array和ArrayList之间的9个区别
array和ArrayList都是Java中两个重要的数据结构,在Java程序中经常使用. 即使ArrayList在内部由数组支持,了解Java中的数组和ArrayList之间的差异对于成为一名优秀的 ...
- java中的NIO和IO到底是什么区别?20个问题告诉你答案
摘要:NIO即New IO,这个库是在JDK1.4中才引入的.NIO和IO有相同的作用和目的,但实现方式不同,NIO主要用到的是块,所以NIO的效率要比IO高很多. 本文分享自华为云社区<jav ...
- java中list,set,map集合的区别,及面试要点
Map集合:链接: Map集合的五种遍历方式及Treemap方法 Set集合:链接: Java中遍历Set集合的三种方法 TreeSet集合:链接: Java深入了解TreeSet,和迭代器遍历方法 ...
- java中*和**的作用 以及 /和/*和/**的区别
一.java中*和**的作用 "*"就表示了所有的文件,但是"*"并不包括子目录下的文件: "**"匹配包含任意级子目录中所有的文件: 二. ...
- 解析java中方法的重载和重写之间的区别与联系
解析java中方法的重载和重写之间的区别与联系 1 不同点 1.1 方法重写是在不同的类中(父子类),方法重载是在同一类中 1.2 方法重载最初的目的是构造方法的多样化,方法重写的目的是让重写的方法满 ...
- java中不用impore导入的_java import机制(不用IDE)
java包有两种导入机制 单类型导入 import java.lang.Object; 这个比较好理解 2. 按需类型导入 import java.lang.*; 这个不是把lang下面的所有的类都导 ...
最新文章
- easyui的datagrid的使用记录
- long转string类型_从php内核角度分析php弱类型
- 机器学习入门到进阶学习路线图
- jquery 分片上传php,php 大文件分片上传
- 【Spring源码分析】Bean加载流程概览
- 我用AI回怼美女汽车销售系列[yolo车牌识别](四)
- Maven的pom报错的解决方法
- 关于JavaScript的数组随机排序
- 第五章---引入复制后的数据库架构
- webpack(一)
- Android studio教程:[6]创建多个Activity
- 在VMware安装Windows server 2003步骤
- 蓝桥杯题目 abcde/fghij=n
- WinEdt中xelatex.exe等exe did not succeed问题
- LLVM编译技术应用分析
- pimple学习:源码解读
- 怎么注册微软云服务器,如何创建和部署云服务(经典) | Microsoft Docs
- php发送邮件功能(以QQ邮件为例)
- Win10笔记本触控板关闭/打开
- curl:Failed connect to github-production-release-asset-2e65be.s3...; Connection refused解决办法
热门文章
- 解决pip安装pygal在TensorFlow环境下调用失败问题
- 庞特里亚金最小值原理求解能耗最小化的时间最优OBVP问题
- 村土地利用规划和村庄规划的区别和联系
- createbitmap 旋转90度_Android Bitmap图片两种方案旋转90度的方法代码
- python计算最大回撤_最大回撤线性算法实现
- button执行onclick函数_千万别再一直无脑使用ES6的箭头函数了,它虽然很有用但并不是万能的...
- Soft NMS论文笔记
- android java标准时间_Android 时间 日期 相关
- 基于阿里云ECS+ 宝塔面板(bt) + WordPress 搭建个人主页(以独立博客为例)
- 540s inter 固件,纠结也无济于事了,Intel发布采用TLC闪存的540s系列SSD