为啥不建议你使用 import *

Java 存在两种包的导入机制

  • 单类型导入、这个也是推荐并且也是常见常用的
  • 按需类型导入、这个是不推荐的、也就是我们常说的 import xxx.xx.*

单类型导入仅仅是导入一个接口或者类、而按需导入也是仅仅导入当前类所需要使用的类、两者的差别只是对类文件的定位算法不一样。

Java 编译器会从启动目录、扩展目录以及用户类路径目录去定位需要导入的类。这三个目录也是我们所说的类的顶级目录。

编译器定位类文件的方法大概如下

顶层路径名(也就是目录) \ 包名\文件名.class

这三者加起来就是一个绝对路径了

因为单类型导入、包名和类名都是确定的、所以可以一次性查找定位

而按需导入因为其包名和类名是不确定、那么就需要组合排列、比如说

 package com;
 import java.util.*;
 import java.awt.*;
 public class TestImport {
     public static void main(String[] args) {
         List list;
     }
 }
复制代码

这个代码中使用到 List 这个类、那么它可能的包名 + 类名就是

  • List 属于无包名
  • com.List 跟当前的类属于同一个包
  • java.lang.List 编译器自动导入 java.lang 包
  • java.util.List
  • java.awt.List

编译器即使找到 java.util.List 也不会停下来、而是会继续寻找、找出所有的判断是否有类导入冲突

微信公众号:CoderLi

如果是一个顶层路径、那么就比单类型导入多出四次查找、如果是两个顶层路径就多出八次

所以按需导入不会影响我们实际运行 class 文件、只是会影响编译的速度

所以综上所述、import * 还是不推荐的。idea 中可以设置、

微信公众号:CoderLi

启动优化导入、移除无用的 import

微信公众号:CoderLi

  • 同一个包下的 xxx 个类自动合并为 import *
  • 导入静态类时、达到 xxx 个自动合并为 import static *

这里改为 100

\

Guess you like

Origin juejin.im/post/7074976468580696072