文章目录

  • 背景
  • import *
  • 性能方面
  • 命名冲突
  • 总结

这里是weihubeats,觉得文章不错可以关注公众号小奏技术,文章首发。拒绝营销号,拒绝标题党

背景

最近在给 apache shardingsphere提代码的时候,有一个比较有意思的规范,就是不允许使用 import *去导入包

import *

在自己开发认知中,其实一直都是使用的import *这玩意去导包的,包括idea的import *默认也是超过5个相同包就给你合并使用import *导入

突然给提了这个规范就打算研究下单个类的导入和import *导入的一个区别。

其实java是有两种中导包机制的

  1. 单类型导入(single-type-import):例如 import java.util.List;
  2. 按需类型导入(type-import-on-demand):例如import java.util.*;

平时我们开发因为idea配置,所以导入相同包下面的类多了基本都会自动转换为按需类型导入(type-import-on-demand),所以其实只要我们使用统一的idea配置也是无感知的。如果团队中所有人都是使用这种方式,你一个人改为单类型导入(single-type-import)方式可能就会经常出现代码冲突。所以单从这点来看我们需要团队有一个统一的开发规范

性能方面

其次在研究过程中我还发现是有一些编译性能差异的,但是不会对运行时的性能产生任何影响
因为Java编译器是按如下顺序寻找类的

  1. 在显示导入的类中
  2. 在包中
  3. 最后再寻找通配符相关的包

就像下面两个例子。虽然

package something;
import java.util.*; //....
Set set = null;  // something.Set //....

这里是不知道Set是什么Set

package something;
import java.util.Set; //....
Set set = null;  // java.util.Set //....

这里就明确知道了Set 是 java.util.Set

命名冲突

比如两个类的名字相同会导致编译错误
网上最常见的例子就是同时导入

import java.awt.*
import java.util.*

List就会编译错误,虽然现在awt相关的类我们开发基本不会用到,但是使用import *确实会有这个问题

总结

  • 使用import *会影响一点编译时期的运行效率
  • 会产生命名冲突(实际少有遇到)
  • 不使用import *会导致看到很多显示的导入,有的人觉得不舒服

总的来说使用import *是更好一点,像技术极客追求规范就应该会禁止使用import *,相对传统的业务开发看来使用import *好像也没什么影响。总体来说还是要看开发团队的规范

关于Java为什么不推荐使用 import *导包这件小事相关推荐

  1. import导包方法和路径问题和init方法调用流程

    import导包方法 共有三种方法哦~但不建议用"."因为如果两个包中都有同一个接口名,那么这时候进行"."导包就会使程序误解,到底要调用哪个呢,所以最好不要用 ...

  2. IntelliJ IDEA 自动导包设置以及idea import导包顺序Java

    自动导包(Auto Import) Auto Import 功能可以帮助我们自动删除无用的包(未被引用的),以及自动 Import 填充尚未导入的包.完全智能化地帮助我们在开发程序时,省略了导包的操作 ...

  3. Python from import导包ModuleNotFoundError No module named,找不到模块问题

    在学习Flask框架的蓝图时,遇到导包时用到了`from . 模块 import 对象`,然后试了试直接 import会报错,直接告诉我找不到模块,发现问题以此记录. 场景 有一个flask框架的项目 ...

  4. Python基础import导包问题

    首先我自己的环境是mac+python3.6所以以下所有问题都是基本此环境 导下级目录 python在import包的时候是查找同级目录及sys.path(python环境下)的文件. 如果想要导入下 ...

  5. Idea import导包去掉*

    打开设置: - Settings - Editor - Code Style - java - 右侧窗口: Class count to use ipmort with * : 数量自行设置 (导包达 ...

  6. python快速倒包_Python 基础之import导包

    首先需要将import内容建立一个大概如下层级的包: 以黑色框为第一级,蓝色框为第二级,棕色框为第三级,红色框为第四级 一.import 引入初识 首先在module.py写入代码如下: xboy = ...

  7. python 如何将虚拟环境的项目的所有.py文件的import导包汇总到requirements.txt文件 (pipreqs)

    参考文章: pipreqs - Generate requirements.txt file for any project based on imports 作用: 能快速汇总所需安装的包然后批量安 ...

  8. PyCharm 中 import 导包呈现灰色,已解决

    问题描述: Pycharm中单个py文件自动导入包后,依然呈灰色,左边同时出现黄色小灯泡,而别的文件却能正常显示... 原因分析: 将鼠标移动到那行代码,点击出现提示"Unused impo ...

  9. nodejs require/import导包报错以及解决方法,chalk-animation库使用

    最近在看一本小册子,文章中使用到了chalk-animation这个库,然后学习了一下chalk-animation这个库 话不多说,开始学习,先安装chalk-animation这个库 npm in ...

最新文章

  1. 如何为Linux设置Docker和Windows子系统:爱情故事。 ?
  2. windows远程桌面linux系统,Windows远程桌面控制Linux图文详解
  3. 死磕 java集合之ArrayDeque源码分析
  4. 第十六届全国大学生智能车竞赛华南赛区竞赛事宜的通知
  5. 【Hibernate步步为营】--(一对多映射)之双向关联
  6. python中index函数_python中index函数的用法
  7. Android震动vibrator系统开发全过程
  8. 瑞萨电子推出R-Car Gen3e CPU速度提升达20%
  9. Chinese_PRC_CI_AS 和 Chinese_PRC_90_CI_AI 之间的排序规则冲突问题
  10. WinEdt 打开***.bib文件时 error reading
  11. 自适应和响应式区别以及写法
  12. 别让你的项目,毁在单片机选型上
  13. wps页眉偶数页不同怎么设置_请问在wps文档中如何设置奇偶页不同的页眉
  14. TSP问题(推销员问题)
  15. 《东藏记》—— 读后总结
  16. 王道数据结构课代表 - 考研数据结构 第五章 树和二叉树 究极精华总结笔记
  17. 结构化、非结构化和半结构化数据
  18. $().each() 与 $.each()区别
  19. 管理规划:目标是什么?
  20. Vue.js 3 ssr 中报错Hydration node mismatch: - Client vnode: div - Server rendered DOM:已解决

热门文章

  1. Java三维数组深度复制,JavaScript —— 如何深浅拷贝数组
  2. android支付宝运动修改器,支付宝运动步数修改器下载-无需root刷支付宝运动步数工具下载_飞翔下载...
  3. ROS教程:视觉传感器使用漫谈
  4. 恶意url_预测URL的恶意
  5. LU分解,LDLT分解,Cholesky分解
  6. 线性回归 原理及公式推导
  7. Android Telephony纲要
  8. 树莓派安装nexmon固件补丁步骤
  9. Java编程专题思维导图
  10. YOLOV3网络结构搭建