java中import用法

单类型导入(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中import用法相关推荐

  1. java中switch用法举例范围_Java中Switch用法代码示例

    一.java当中的switch与C#相比有以下区别 注:在java中switch后的表达式的类型只能为以下几种:byte.short.char.int(在Java1.6中是这样), 在java1.7后 ...

  2. cal java中的用法_Java中static用法

    Java中static用法 转自 http://blog.pfan.cn/sword2008/13772.html 一.static 请先看下面这段程序: public class Hello{ pu ...

  3. java中extends用法_JAVA的extends用法

    理解继承是理解面向对象程序设计的关键.在Java中,通过关键字extends继承一个已有的类,被继承的类称为父类(超类,基类),新的类称为子类(派生类).在Java中不允许多继承. (1)继承 cla ...

  4. java中continue用法

    java中continue用法 有时强迫一个循环提早反复是有用的,也就是,你可能想要继续运行循环,但是要忽略这次重复剩余的循环体的语句,所以 java提供了 continue 语句.continue ...

  5. Java中import语句的作用

    Java中import语句的作用 为了能够使用某一个包的成员,我们需要在 Java 程序中明确导入该包.使用"import"语句可完成此功能.在 java 源文件中 import ...

  6. java中Iterator用法总结

    Java中Iterator用法 迭代器(Iterator) 迭代器是一种设计模式,它是一个对象,它可以遍历并选择序列中的对象,而开发人员不需要了解该序列的底层结构.迭代器通常被称为"轻量级& ...

  7. java中nextInt()用法

    java中nextInt用法 功能 函数实现 三级目录 功能 给定一个参数n,nextInt(n)将返回一个大于等于0小于n的随机数,即:0 <= nextInt(n) < n. 函数实现 ...

  8. Java中import及package的用法

    有些人写了一阵子 Java,可是对於 Java 的 package 跟 import 还是不  太了解很多人以為原始码 .java 档案中的 import 会让编译器把所 import  的程式通通写 ...

  9. Java 中import的用法,以及类的种类

    问: 已经定义了一个包Human:包里定义一个类Human  1):  我在这个包外重新写个程序,import整个Human包,但是Human 不是公共的,为什么啊,不是引用了整个包后就可以使用了的么 ...

最新文章

  1. php bootstraptable分页,php+bootstrap+dataTable+jquery分页列表
  2. java 输出 三角形_Java实现输出三角形
  3. linux中offsetof与container_of宏定义
  4. AcWing 845. 八数码(3阶数字华容道):bfs求最短路,状态表示困难
  5. CentOS搭建FTP
  6. 扒一扒那些年我们遇到的奇葩代码
  7. 用火狐录制脚本为空_功能测试——链接测试amp;脚本功能
  8. 基于注解的字段脱敏处理
  9. 冷藏温度范围_食品冷藏冷冻温度要求与管理规范
  10. 生成ltx文件命令_利用二次开发工具批量生成PCDMIS程序
  11. 多地GitHub账号使用受限;Python之父考虑重构解释器;62岁程序员埋逻辑炸弹 | 开发者周刊...
  12. 分享:mysql分表,分区的区别和联系
  13. 【学亮IT手记】Ajax跨域问题精讲--jQuery解决跨域操作
  14. python配置MySQL,需安装MySQL-pyt…
  15. phalapi可以依赖注入么_PhalApi:[2.11] 核心思想:DI依赖注入 让资源更可控
  16. 虚拟服务器网络不通,VMware Workstation ping 不通的解决方法
  17. 你是哪类人?愚蠢的五大基本定律
  18. Jenkin前端项目部署----远程服务
  19. pandas随机抽取1000行
  20. 小小的面试二分题目,竟然暗藏玄机?

热门文章

  1. html块级元素对齐方式,块级元素的三种垂直水平居中的方法
  2. 香港理工大学计算机专业课程,香港理工大学 19年入学 计算机硕士信息一览
  3. json数据解析_VBA 实践指南 -- Split函数解析Json数据
  4. iphone怎么重启_苹果手机进入itunes怎么退出
  5. 原生js清空上一个元素内容_原生JS实现动态添加新元素、删除元素方法
  6. 选择排序算法流程图_C#实现——十大排序算法之选择排序
  7. php swfupload handlers.js,swfupload使用代码说明
  8. 套用match_再也不用伤脑筋了,分享九个可以直接套用的Excel常用公式,收藏备用...
  9. 轮播图最后一张图结束如何平缓回到第一张_产品经理早期如何学习?
  10. 移动**21*设置无法接通_七大新增时刻传奇!外服率先体验而国服暂时无法推出的粉传盘点+21赛季移动端首批精选上架!...