美文网首页
[JAVA]探究java的import

[JAVA]探究java的import

作者: 水木桶 | 来源:发表于2019-01-06 12:22 被阅读0次

背景:

看书看到类和类加载器,说jvm是按需加载类的,只有明确使用的类才会被加载,具体加载了哪些?可以通过在启动参数上添加-verbose:class来看。
想到了很久以前接触到的,说引入类时尽量标明具体的类,比如import java.util.regex.Pattern,而不是import java.util.regex.*,当时也没太注意为什么这么写,于是就尝试一下。

代码如下:

import java.util.List;
import java.util.ArrayList;
//import java.util.regex.Pattern;
public class TestImport {
    public static void main(String[] args) {
        System.out.println("Hello");
        List list = new ArrayList();
        list.add("a");
        list.add("b");
        System.out.println(list);
        //Pattern p = Pattern.compile("a*b");
        //System.out.println(p);
    }

}

运行结果:

  1. 先尝试了java.util.*和java.util.List的区别,结果发现打印的一样,而且许多我没有使用的List下的类也打印了,猜测是虚拟机本身用到了这些类了。这样就没有对比了吗
  2. 然后尝试了Pattern的区别,这次的打印中只出现了代码中使用到的类。而且引入*和引入指定的类,两次加载的类确实是一样的。

那么问题来了,引入*和引入指定的类,到底有什么区别呢?为什么推荐写指定的类呢?

通过度娘了解到:

  1. 引入*,在编译时,编译器会遍历你引入的那些包,去匹配代码中的对象
  2. 引入指定的类,编译器能够直接定位到指定类

最终的结论就是:

  1. 引入*和引入指定的类,对程序运行的效率是没有影响的
  2. 但是会编译速度
    所以还是尽量明确引入指定的类吧!

相关文章

  • [JAVA]探究java的import

    背景: 看书看到类和类加载器,说jvm是按需加载类的,只有明确使用的类才会被加载,具体加载了哪些?可以通过在启动参...

  • Android Zip工具类ZipUtils

    import java.io.*;import java.util.ArrayList;import java.u...

  • 图片压缩

    import java.io.*; import java.util.Date; import java.util...

  • 任务定时器

    import java.util.Date;import java.util.Timer;import java....

  • GUI3

    import java.awt.*; import java.awt.event.*; import java.u...

  • 堆的实现java

    堆的实现 Java // Java import java.util.Arrays; import java.ut...

  • Java爬虫爬取图片脚本

    import java.io.*;import java.net.URL;import java.net.URLC...

  • 2021-12-10

    import java.util.List;import java.util.Map;import java.ut...

  • 2021-12-25

    import java.util.List;import java.util.Map;import java.ut...

  • 复习练习

    import java.util.List;import java.util.Map;import java.ut...

网友评论

      本文标题:[JAVA]探究java的import

      本文链接:https://www.haomeiwen.com/subject/decsrqtx.html