Java是一个完整的平台,提供了一个庞大的库,其中包含了大量可重用的代码,以及一个提供诸如安全性,跨操作系统的可移植性以及自动垃圾收集等服务的环境执行。
Java关键术语
简单性
java剔除了C++中的一些很少使用、难以理解和容易混淆的特性,如头文件、指针运算、结构、联合等。构建了一个无需深奥的专业训练就可以进行编程的系统。
面向对象
Java的重点放在对象和对象的接口上。
分布式
Java有一个丰富的例程库,用于处理象HTTP和FTP之类的TCP/IP协议
Java应用程序可以通过URL来打开和访问网络上对象,简单程度就像访问本地的对象一样。
健壮性
Java的实际目标之一就是使java编写出的程序具有多方面的可靠性,java非常强调早期的问题监测和后期动态的检测,消除容易出错的情况,Java与c/C++最大的不同在于Java采用的指针模型可以消除重写内存和损坏数据的可能。
安全性
Java要适用于网络/分布式,所以安全性颇受重视。使用Java可以构建防病毒,防篡改的系统。
Java可以将不信任的代码放在一个沙盒环境中执行,从而防止代码影响主系统。
体系结构中立
编译器生成一个体系结构中立的目标格式文件,这是一个编译过的代码,只要Java运行时,编译后的代码就可以在处理器上执行。Java编译器通过生成与特定计算机体系结构无关的字节码指令来实现这一特性。字节码不仅可以很容易的在任何机器上解释执行,还可以动态的转化为本地机器代码。
可移植性
Java规范中没有“依赖具体实现”的地方。基本数据类型的大小以及有关运算的行为有明确的说明。
在Java中二进制数据以固定的格式进行存储和传输,消除了字节序的困扰。字符串则采用标准的Unicode格式存储。
解释型
Java解释器可以再任何移植了解释器的机器上直接执行Java字节码。
高性能
字节码可以再运行时动态的转换成对应运行的这个应用的特定CPU的机器码。
多线程
多线程可以带来更快的响应交互和实时行为。
动态性
可以适应不断变化的环境。库中可以自由地添加新方法和实例变量,而对客户端却没有任何影响。
JVM
JVM,Java虚拟机。模拟了包括CPU指令集/寄存器/堆栈等计算机架构。通过调用真是的计算机环境解析执行Java字节码。
每运行一个java程序,系统启动一个JVM虚拟机进程,进程隔离不同的程序。即使某程序崩溃不会影响到其他应用程序。
JRE
JRE,Java运行时环境。包含工具库类(提供对线程/时间/文件/网络等操作),核心运行文件,以及JVM
JRE为每一个Java程序创建一个独立的JVM容器运行程序
通过在不同架构操作系用上安装对应的JRE,实现Java程序的跨平台运行(一次编写,处处执行)。
开发环境并非程序最终运行环境,程序需要运行在不同的操作系统上,windows/Linux等
例如,在windows开发环境下基于VS Studio编译的C/C++程序无法直接在Linux运行,必须在Linux下重新编译源码(不同Linux内核可能也许重新编译)。即程序运行在操作系统环境中,需要与操作系统互交,因此需要针对不同的系统编译出不同的程序。但Java针对不同的操作系统开发了对应的JRE。程序运行在JVM并调用JRE中的库,JVM与真实的操作系统互交,JVM屏蔽了不同操作系统的差异。因此java程序仅需被编译为JVM能够读懂的字节码即可。JRE为每一个运行的Java程序创建一个JVM容器承载应用程序从而实现,一处编写,处处运行(Write once, run anywhere)。
JDK
JDK,免费开源的Java应用开发工具包,包含Java编译/调试/运行工具,以及JRE
JDK编译java源码为字节码(bytecode)
![](https://i-blog.csdnimg.cn/blog_migrate/73b1dbf8b147f17c597ba1194bdcb237.png)
JCP
JCP(Java Community Process),开放的Java国际技术标准委员会,负责Java技术规范的维护与制定,是Java技术的最高决策管理机构。阿里凭借多年对Java社区的贡献,当选为最高执行委员会委员。
Java 11,是继java 8后的长期支持版(里程碑版本)。即,基于Java的应用程序开发,均将向java 11迁移
JDK 11开始,不再提供独立的JRE,同时移除精简了大量库类。因此,原基于java 8编写的程序,在java 11下可能无法运行
阿里Java开发手册:https://github.com/alibaba/p3c