在使用诸如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包下的类不需要手动导入相关推荐

  1. 解读java.lang包下String类的API(一)

    说明: 继承自Object,实现了java.io.Serializable.Comparable.CharSequence接口 String类代表字符串,字符串是常量,他们的值创建之后不能更改.字符串 ...

  2. java JPI中常使用的类介绍即java.lang包下的东西

    java.lang包是java语言的核心,它提供了java中的基础类.包括基本Object类.Class类.String类.基本类型的包装类.基本的数学类等等最基本的类. 下面分别介绍其中比较常用的类 ...

  3. java.lang包—对象基类Object

    原文作者:Boblim 原文地址:Java:Object类详解 目录 一.上帝类 二.Object的类方法 三.常见面试题 Java的一些特性会让初学者感到困惑,但在有经验的开发者眼中,却是合情合理的 ...

  4. java.lang包【Object类】

    基本描述: (1)Object类位于java.lang包中,java.lang包包含着Java最基础和核心的类,在编译时会自动导入: (2)Object类是所有Java类的祖先.每个类都使用 Obje ...

  5. java.lang包有哪些类_Java中Lang包的工具类有哪些

    Java中Lang包的工具类有哪些 发布时间:2020-12-08 16:15:36 来源:亿速云 阅读:76 作者:Leah 今天就跟大家聊聊有关Java中Lang包的工具类有哪些,可能很多人都不太 ...

  6. java lang保_java中lang包下的类都涉及哪几方面的

    展开全部 JDK API文档 ,   你可以下载一个 , 可以非常方便的查看类库软件包 java.lang  :  提供利用 Java 编程语言进行程序设计的基础类.32313133353236313 ...

  7. java.lang包 下

    java.lang:java基础语言包 包装类:基本数据类型-------对象 Integer Charater Integer i =new Integer(12); valueof(String ...

  8. java.lang包—类Class

    原文作者:一人浅醉- 原文地址:Java中的Class类 目录 生成Class对象的三种方式 Class常用方法解释 总结 Class 类是在Java语言中定义一个特定类的实现.一个类的定义包含成员变 ...

  9. 总结:java.lang包

    一.介绍 java.lang包是java语言的核心,它提供了java中的基础类.我们使用java.lang包下的类时,是不需要import类的,默认导入. 包括基本Object类.Class类.Str ...

最新文章

  1. 特殊字符的正则表达式
  2. linux squid日志滚动,linux squid 日志
  3. 函数失败返回_为什么句柄返回值不一致?
  4. 服务器相关命令整理[不断更新ing]
  5. DCMTK:DcmDecimalString类的测试程序
  6. java下发报文_java报文的发送和接收 | 学步园
  7. HTML基础知识(常见元素、列表、链接元素、图片元素)
  8. 大数据学习笔记41:Hive - 用户自定义函数
  9. java字符串怎么拼接字符串_Java中String使用+ 拼接字符串的原理是什么?
  10. element $prompt 输入类型密码_手把手教程 | 为你支招 安全保存账号和密码的两种方法...
  11. 【AI理论学习】CNN模型演变:从VGGNet到EfficientNet
  12. iOS之加速计、陀螺仪(UIAccelermeter、Core Motion)
  13. PolSAR处理极化SAR
  14. AG9300|Type-C 转VGA数据转换器解决方案
  15. 对Windows和类Unix争论的观点] 谁是谁的躯壳,谁又是谁的灵魂
  16. 错误跳转html页面模板,404错误页面模板代码大全 - 搜外SEO问答
  17. 《那些年啊,那些事——一个程序员的奋斗史》——02
  18. RBP中新增自由格式报表资源之自由格式风格
  19. APP第一次请求HTTPS慢
  20. 让Android自带的Gallery实现多点缩放,拖动和边界回弹效果,效果流畅

热门文章

  1. 运算符重载 返回类型说明符后加_C++日志(三十八)干货!带你搞懂什么是运算符重载!...
  2. ntp server 配置参数_NTP时间服务器的配置
  3. linux shell脚本字符串 字段分隔符 存入数组 根据下标取值
  4. spring学习笔记--IOC接口
  5. fw313r虚拟服务器,迅捷FW313R无线wifi怎么设置上网 - falogincn登录页面
  6. python进程socket通信_python3 进程间通信之socket.socketpair()
  7. mybatis plus 动态创建表和字段_mybatis-plus maven代码生成器
  8. python实现链表的删除_删除链表中的元素,但是只能使用一个指针
  9. python怎么绘制坐标图像_如何使用给定的坐标和python opencv在图像中绘制点?
  10. 武汉纺织大学C语言试题,武汉纺织大学10年C语言试题.doc