jdk1.7版本 jdk1.8版本
1.8比1.7多了4个.为以下四个
cldrdata.jar jfxrt.jar nashorn.jar sunpkcs11.jar
resources | 存放资源文件(XXX.properties),其中定义了如serverNotFound="IOP00710406: (INTERNAL) Server is not running"等 |
rj | 原生Java源文件资源. |
jsse | Java安全套接字扩展:对原生Java.sequrity及sun.sequrity实现有了更好的实现而添加的扩展 |
jce | 提供Java.sequrity.下spec算法的更好实现 |
charsets | 字符集:点开后可以看到是sun包下,对nio.cs.ext的扩充 |
jfr | 对Oracle,jdk的扩充,更好实现 |
access-bridge-64 | 只有两个类AccessBridge访问通道,AccessBridgeLoader访问通道加载器 |
cldrdata | 都继承了原生的ListResourceBundle |
dnsns | sun.net.spi.nameservice.dns包下只有两个类对原生sun.net的扩充 |
jaccess | access的util工具类的扩充 |
... | ... |
... | ... |
总之,这些都是一些扩充,扩展,对我们学习Java源码一点关系都没用.也不需要关注这个.
在学源码之前需要了解一些概念:
编程是一步一步慢慢演变来的.语言分为三类:机器语言,汇编语言,高级语言.
机器语言: 由于计算机内部只能.接受二进制代码,因此,用二进制代码0和1描述的指令称为机器指令,全部机器指令的集合构成计算机的机器语言,用机器语言编程的程序称为目标程序。只有目标程序才能被计算机直接识别和执行。
汇编语言的实质和机器语言是相同的,都是直接对硬件操作.只不过指令采用了英文缩写的标识符,更容易识别和记忆。它同样需要编程者将每一步具体的操作用命令的形式写出来。 通常由三部分组成:指令、伪指令和宏指令。
高级语言: 是大多数编程者的选择。和汇编语言相比,它不但将许多相关的机器指令合成为单条指令,并且去掉了与具体操作有关但与完成工作无关的细节, 例如使用堆栈、寄存器等,这样就大大简化了程序中的指令。同时,由于省略了很多细节,编程者也就不需要有太多的专业知识。
编程语言: 定义计算机程序的形式语言。一种被标准化的向计算机发出指令。
编程语言 可以以分为语法及语义
语法:说明编程语言中,哪些符号或文字的组合方式是正确的
语义:对编程的解释
有些语言是用规格文件定义的.列如C语言,规格文件也是ISO标准中的一部分,
而其他语言(像Perl)有一份主要的编程语言实现文件,视为是参考实现
计算机每一次动作,一个步骤,都按照已用计算机语言编好的程序来执行,程序是计算机要执行的指令的集合,而程序全部都用语言来编写的. 所以人们要控制计算机一定要通过计算机语言向计算机发出命令. (通过计算机语言向计算机发出命令)
有些语言开发用来解决特定问题的如:
PHP显示网页
Perl文本处理
C语言用于操作系统,编译器的开发(系统编程)
大多数语言即可被编译又可被解译,但大多数仅在一种情况下能够良好运行.
重要的: 编译器:将源码(人可读)编译/解译成机器(计算机)可执行文件.
如果程序代码是在运行时才翻译则叫直译,比编译更慢但更灵活
由此知道了Java源码通过定义好的语法及语义编写程序即源代码.通过在运行环境JRE和编译器即JVM来转换成不同操作系统环境下计算机可执行的命令.从而实现操作.而Java时跨平台的,
因此.在JDK源码中有些定义了类,或对象.不知道为什么能实现这个功能.是因为在编译器中早已定义了Java语言的语法及语义,而Java语言是在C++基础之上发展起来的.吸收了很多C++的优点.所以源码中也可以发现一些原生的C++函数方法如native.会通知jvm去调用外部方法(即C)去执行.
所以阅读源码不要觉得不懂为什么这样就可以了,内部时怎么执行的等疑问.要知道jdk源码只是Java的其中一部分有利于我们开发的参考而已.还有一些实现是在我们看不到的地方去执行了.
我们阅读源码,学习源码就是通过已有的源码了解Java提供给我们什么功能,可以实现哪些东西.怎么去实现这些东西的.如何通过Java提供的东西去运用到实际需求中去