java中import用法
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用法相关推荐
- java中switch用法举例范围_Java中Switch用法代码示例
一.java当中的switch与C#相比有以下区别 注:在java中switch后的表达式的类型只能为以下几种:byte.short.char.int(在Java1.6中是这样), 在java1.7后 ...
- cal java中的用法_Java中static用法
Java中static用法 转自 http://blog.pfan.cn/sword2008/13772.html 一.static 请先看下面这段程序: public class Hello{ pu ...
- java中extends用法_JAVA的extends用法
理解继承是理解面向对象程序设计的关键.在Java中,通过关键字extends继承一个已有的类,被继承的类称为父类(超类,基类),新的类称为子类(派生类).在Java中不允许多继承. (1)继承 cla ...
- java中continue用法
java中continue用法 有时强迫一个循环提早反复是有用的,也就是,你可能想要继续运行循环,但是要忽略这次重复剩余的循环体的语句,所以 java提供了 continue 语句.continue ...
- Java中import语句的作用
Java中import语句的作用 为了能够使用某一个包的成员,我们需要在 Java 程序中明确导入该包.使用"import"语句可完成此功能.在 java 源文件中 import ...
- java中Iterator用法总结
Java中Iterator用法 迭代器(Iterator) 迭代器是一种设计模式,它是一个对象,它可以遍历并选择序列中的对象,而开发人员不需要了解该序列的底层结构.迭代器通常被称为"轻量级& ...
- java中nextInt()用法
java中nextInt用法 功能 函数实现 三级目录 功能 给定一个参数n,nextInt(n)将返回一个大于等于0小于n的随机数,即:0 <= nextInt(n) < n. 函数实现 ...
- Java中import及package的用法
有些人写了一阵子 Java,可是对於 Java 的 package 跟 import 还是不 太了解很多人以為原始码 .java 档案中的 import 会让编译器把所 import 的程式通通写 ...
- Java 中import的用法,以及类的种类
问: 已经定义了一个包Human:包里定义一个类Human 1): 我在这个包外重新写个程序,import整个Human包,但是Human 不是公共的,为什么啊,不是引用了整个包后就可以使用了的么 ...
最新文章
- php bootstraptable分页,php+bootstrap+dataTable+jquery分页列表
- java 输出 三角形_Java实现输出三角形
- linux中offsetof与container_of宏定义
- AcWing 845. 八数码(3阶数字华容道):bfs求最短路,状态表示困难
- CentOS搭建FTP
- 扒一扒那些年我们遇到的奇葩代码
- 用火狐录制脚本为空_功能测试——链接测试amp;脚本功能
- 基于注解的字段脱敏处理
- 冷藏温度范围_食品冷藏冷冻温度要求与管理规范
- 生成ltx文件命令_利用二次开发工具批量生成PCDMIS程序
- 多地GitHub账号使用受限;Python之父考虑重构解释器;62岁程序员埋逻辑炸弹 | 开发者周刊...
- 分享:mysql分表,分区的区别和联系
- 【学亮IT手记】Ajax跨域问题精讲--jQuery解决跨域操作
- python配置MySQL,需安装MySQL-pyt…
- phalapi可以依赖注入么_PhalApi:[2.11] 核心思想:DI依赖注入 让资源更可控
- 虚拟服务器网络不通,VMware Workstation ping 不通的解决方法
- 你是哪类人?愚蠢的五大基本定律
- Jenkin前端项目部署----远程服务
- pandas随机抽取1000行
- 小小的面试二分题目,竟然暗藏玄机?
热门文章
- html块级元素对齐方式,块级元素的三种垂直水平居中的方法
- 香港理工大学计算机专业课程,香港理工大学 19年入学 计算机硕士信息一览
- json数据解析_VBA 实践指南 -- Split函数解析Json数据
- iphone怎么重启_苹果手机进入itunes怎么退出
- 原生js清空上一个元素内容_原生JS实现动态添加新元素、删除元素方法
- 选择排序算法流程图_C#实现——十大排序算法之选择排序
- php swfupload handlers.js,swfupload使用代码说明
- 套用match_再也不用伤脑筋了,分享九个可以直接套用的Excel常用公式,收藏备用...
- 轮播图最后一张图结束如何平缓回到第一张_产品经理早期如何学习?
- 移动**21*设置无法接通_七大新增时刻传奇!外服率先体验而国服暂时无法推出的粉传盘点+21赛季移动端首批精选上架!...