美文网首页
[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

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