美文网首页工作生活源码系列
2019-06-29 jdk8的第一篇

2019-06-29 jdk8的第一篇

作者: 青衣书童 | 来源:发表于2019-06-29 21:05 被阅读0次

       最近一直在学习jdk源码,在网上看了结合源码讲解的内容千篇一律,很多看的云里雾里,有一天早上5点多的时候,被蚊子咬醒了,干脆起来看源码,感觉颇有些收获,心痒难耐,想着把它写出来,这样以学促写,同时以写促学,应该很不错吧,但是真正干起来,才发现挺难的,自己没有写技术专栏的经验,不知道从何下手。

       盘桓踌躇了几日,想起一位作家的经验说,写文章首先要能先下笔,然后才可能成,今天便大着胆子,先将自己学习中看到的能让人豁然开朗的,怦然心动感觉的东西,分享出来,也不分什么栏目章节,只写干货,废话少说,进入正题。

1.为什么java.lang包下的类不需要手动导入?

答:1).首先我们要搞清楚,什么是PATH、CLASSPATH和SOURCEPATH。

       作为java程序员,我们在开始学习java时候,第一步就会在自己的电脑里安装JDK,(以windows为例)然后在自己的电脑里设置环境变量path,配置JDK的bin目录,这个对应的就是PATH,我们配置的就是查找javac.exe的路径。javac命令就是用于编译代码,将.java文件编译为.class可执行文件。

CLASSPATH对应的就是JVM的可执行文件.class

SOURCEPATH用于指定对应的.java类原始码。

        2).java的两种导包形式:

         a.单类型导入:如import java.util.Date;

         b.按需类型导入:如import java.util.*;

单类型导入比较好理解,这里不再赘述,主要讲讲按需类型导入,java编译器会从启动目录(bootstrap),扩展目录(extension)和用户类路径下去定位需要导入的类,而这些目录进仅仅是给出了类的顶层目录,编译器的类文件定位方法大致可以理解为如下公式:

绝对路径 = 顶层路径名/包名/文件名.class 

单类型导入我们知道包名和文件名,所以编译器可以一次性查找定位到所要的类文件。按需类型导入则比较复杂,编译器会把包名和文件名进行排列组合,然后对所有的可能性进行类文件查找定位。

packagecom;

importjava.io.*;

importjava.util.*;

  如果我们文件中使用到了 File 类,那么编译器会根据如下几个步骤来进行查找 File 类:

  ①、File       // File类属于无名包,就是说File类没有package语句,编译器会首先搜索无名包

  ②、com.File     // File类属于当前包,就是我们当前编译类的包路径

  ③、java.lang.File   //由于编译器会自动导入java.lang包,所以也会从该包下查找

  ④、java.io.File

  ⑤、java.util.File

......

需要注意的地方就是,编译器找到java.io.File类之后并不会停止下一步的寻找,而要把所有的可能性都查找完以确定是否有类导入冲突。假设此时的顶层路径有三个,那么编译器就会进行3*5=15次查找。

  如果在查找完成后,编译器发现了两个同名的类,那么就会报错。要删除你不用的那个类,然后再编译。

所以我们可以得出这样的结论:按需类型导入是绝对不会降低Java代码的执行效率的,但会影响到Java代码的编译速度。所以我们在编码时最好是使用单类型导入,这样不仅能提高编译速度,也能避免命名冲突。

  讲清楚Java的两种导包类型了,我们在回到为什么可以直接使用 Object 类,看到上面查找类文件的第③步,编译器会自动导入 java.lang 包,那么当然我们能直接使用了。至于原因,因为用的多,提前加载了,省资源。

相关文章

  • 2019-06-29 jdk8的第一篇

    最近一直在学习jdk源码,在网上看了结合源码讲解的内容千篇一律,很多看的云里雾里,有一天早上5点多的时候,被...

  • ConcurrentHashMap源码解析

    ConcurrentHashMap源码解析 [TOC] jdk8之前的实现原理 jdk8的实现原理 JDK8的实现...

  • ConcurrentHashMap源码解析

    ConcurrentHashMap源码解析 [TOC] jdk8之前的实现原理 jdk8的实现原理 JDK8的实现...

  • 2019-02-27

    # ConcurrentHashMap源码解析 [TOC] ## jdk8之前的实现原理 ## jdk8的实现原理...

  • kafka 入门安装手册

    准备: kafka zookeeper jdk8 安装: 配置jdk8 启动zookeeper 启动kafka 脚...

  • centos7 安装JDK8

    本文主要说明了在centos7系统下安装JDK8的详细步骤 1.1 下载jdk8下载jdk8 1.2 把下载好的...

  • Mr. L 的ScalersTalk第四轮《新概念》朗读持续力训

    2019-06-29, Day 265, starting at 2018-10-08, 新概念英语第四册 Les...

  • Java 8 新特性

    目前自己的项目已经使用上了jdk8,但是基本上用的还是jdk8之前的语法和规范。略感惭愧。赶紧学习一下jdk8的新...

  • windows同时安装jdk7和jdk8

    有时候某个插件只支持jdk7,而电脑又安装的是jdk8,这时需要卸载jdk8再装jdk7,当想用jdk8时又得切换...

  • jdk源码升级

    1.下载安装jdk8 tar.gz的包或者其他服务器的jdk8的包拷贝过来 2.将准备好的jdk8复制到/usr/...

网友评论

    本文标题:2019-06-29 jdk8的第一篇

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