为什么java.lang包下的类不需要手动导入
在使用诸如Date类时,需要手动导入import java. util. Date,再比如使用File类时,也需要手动导入import java. io. File。但是在使用Object类、String类和Integer类等时不需要手动导入,而能直接使用,这是为什么呢?这里先告诉读者一个结论:使用java. lang包下的所有类,都不需要手动导入。
另外介绍一下Java中的两种导包形式:
1)单类型导入(single-type-import),例如import java. util. Date。
2)按需类型导入(type-import-on-demand),例如import java. util.∗。
单类型导入比较好理解,编程所使用的各种工具默认都是按照单类型导入的,需要什么类便导入什么类,这种方式是导入指定的public类或者接口;
按需类型导入,比如import java. util.∗,可能看到后面的 ∗,程序员会以为是导入java. util包下的所有类,其实并不是这样,Java会根据名字知道是按照需求导入,并不是导入整个包下的所有类
。
Java编译器会从启动目录(bootstrap)、扩展目录(extension)和用户类路径去定位需要导入的类,而这些目录仅给出了类的顶层目录,编译器的类文件定位方法大致可以理解为如下公式:
顶层路径名 \ 包名 \ 文件名. class = 绝对路径
单类型导入可以导入包名和文件名,所以编译器可以一次性查找定位到所要的类文件
。按需类型导入则比较复杂,编译器会把包名和文件名进行排列组合,然后对所有的可能性进行类文件查找定位。例如:
如果文件中使用到了File类,那么编译器会根据如下几个步骤来查找File类:
需要注意,编译器找到java. io. File类之后并不会停止下一步的寻找,而要把所有的可能性都查找完以确定是否有类导入冲突。假设此时的顶层路径有3个,那么编译器就会进行3∗5=15次查找。
如果在查找完成后,编译器发现了两个同名的类,那么就会报错
。要先删除用户不用的那个类,然后再编译。
所以可以得出这样的结论:按需类型导入是绝对不会降低Java代码的执行效率的,但会影响到Java代码的编译速度。
所以在编码时最好是使用单类型导入,这样不仅能提高编译速度,也能避免命名冲突。
了解Java的两种导包类型后,再回到为什么可以直接使用Object类。上面代码中查找类文件的第③步,编译器会自动导入java. lang包,那么就可以直接使用了。至于原因,因为用得多,提前加载了该包文件,且节省了资源。
总结
- Object类不用自己手动导入
- 因为用得多,提前加载了该包文件,且节省了资源
为什么java.lang包下的类不需要手动导入相关推荐
- 解读java.lang包下String类的API(一)
说明: 继承自Object,实现了java.io.Serializable.Comparable.CharSequence接口 String类代表字符串,字符串是常量,他们的值创建之后不能更改.字符串 ...
- java JPI中常使用的类介绍即java.lang包下的东西
java.lang包是java语言的核心,它提供了java中的基础类.包括基本Object类.Class类.String类.基本类型的包装类.基本的数学类等等最基本的类. 下面分别介绍其中比较常用的类 ...
- java.lang包—对象基类Object
原文作者:Boblim 原文地址:Java:Object类详解 目录 一.上帝类 二.Object的类方法 三.常见面试题 Java的一些特性会让初学者感到困惑,但在有经验的开发者眼中,却是合情合理的 ...
- java.lang包【Object类】
基本描述: (1)Object类位于java.lang包中,java.lang包包含着Java最基础和核心的类,在编译时会自动导入: (2)Object类是所有Java类的祖先.每个类都使用 Obje ...
- java.lang包有哪些类_Java中Lang包的工具类有哪些
Java中Lang包的工具类有哪些 发布时间:2020-12-08 16:15:36 来源:亿速云 阅读:76 作者:Leah 今天就跟大家聊聊有关Java中Lang包的工具类有哪些,可能很多人都不太 ...
- java lang保_java中lang包下的类都涉及哪几方面的
展开全部 JDK API文档 , 你可以下载一个 , 可以非常方便的查看类库软件包 java.lang : 提供利用 Java 编程语言进行程序设计的基础类.32313133353236313 ...
- java.lang包 下
java.lang:java基础语言包 包装类:基本数据类型-------对象 Integer Charater Integer i =new Integer(12); valueof(String ...
- java.lang包—类Class
原文作者:一人浅醉- 原文地址:Java中的Class类 目录 生成Class对象的三种方式 Class常用方法解释 总结 Class 类是在Java语言中定义一个特定类的实现.一个类的定义包含成员变 ...
- 总结:java.lang包
一.介绍 java.lang包是java语言的核心,它提供了java中的基础类.我们使用java.lang包下的类时,是不需要import类的,默认导入. 包括基本Object类.Class类.Str ...
最新文章
- 特殊字符的正则表达式
- linux squid日志滚动,linux squid 日志
- 函数失败返回_为什么句柄返回值不一致?
- 服务器相关命令整理[不断更新ing]
- DCMTK:DcmDecimalString类的测试程序
- java下发报文_java报文的发送和接收 | 学步园
- HTML基础知识(常见元素、列表、链接元素、图片元素)
- 大数据学习笔记41:Hive - 用户自定义函数
- java字符串怎么拼接字符串_Java中String使用+ 拼接字符串的原理是什么?
- element $prompt 输入类型密码_手把手教程 | 为你支招 安全保存账号和密码的两种方法...
- 【AI理论学习】CNN模型演变:从VGGNet到EfficientNet
- iOS之加速计、陀螺仪(UIAccelermeter、Core Motion)
- PolSAR处理极化SAR
- AG9300|Type-C 转VGA数据转换器解决方案
- 对Windows和类Unix争论的观点] 谁是谁的躯壳,谁又是谁的灵魂
- 错误跳转html页面模板,404错误页面模板代码大全 - 搜外SEO问答
- 《那些年啊,那些事——一个程序员的奋斗史》——02
- RBP中新增自由格式报表资源之自由格式风格
- APP第一次请求HTTPS慢
- 让Android自带的Gallery实现多点缩放,拖动和边界回弹效果,效果流畅
热门文章
- 运算符重载 返回类型说明符后加_C++日志(三十八)干货!带你搞懂什么是运算符重载!...
- ntp server 配置参数_NTP时间服务器的配置
- linux shell脚本字符串 字段分隔符 存入数组 根据下标取值
- spring学习笔记--IOC接口
- fw313r虚拟服务器,迅捷FW313R无线wifi怎么设置上网 - falogincn登录页面
- python进程socket通信_python3 进程间通信之socket.socketpair()
- mybatis plus 动态创建表和字段_mybatis-plus maven代码生成器
- python实现链表的删除_删除链表中的元素,但是只能使用一个指针
- python怎么绘制坐标图像_如何使用给定的坐标和python opencv在图像中绘制点?
- 武汉纺织大学C语言试题,武汉纺织大学10年C语言试题.doc