0x00 Java 研习录 - 技术简介
0x00 Java 研习录 - 技术简介
技术简介
Java 编程语言
Java 编程语言是一种高级语言,具有以下特征:
- 简单 (Simple)
- 面向对象 (Object oriented)
- 分布式 (Distributed)
- 多线程 (Multithreaded)
- 动态 (Dynamic)
- 平台独立 (Architecture neutral)
- 可移植 (Portable)
- 高性能 (High performance)
- 健壮 (Robust)
- 安全 (Secure)
参考链接:
The Java Language Environment
Java Language and Virtual Machine Specifications
The Java® Language Specification Java SE 8 Edition
Java 平台
平台是指程序运行的硬件或软件环境,例如 Microsoft Windows,Linux,Solaris OS 和 Mac OS。大多数平台可以被描述为操作系统和底层硬件的组合。
Java平台不同于大多数其他平台,因为它是一个运行在其他基于硬件的平台之上的纯软件平台。
Java平台有两个组件:
- Java 虚拟机 (Java Virtual Machine - JVM)
- Java 虚拟机 (JVM) 是Java平台的基础,并被移植到各种基于硬件的平台上。
- Java 应用程序编程接口 (Java Application Programming Interface - API)
- Java 应用程序编程接口 (API) 是提供大量可用功能的现成组件的集合。它被分组到相关类和接口的库中,这些库被称为包。
Java 虚拟机 和 Java 应用程序编程接口 把程序和硬件隔离开来,示意图如下:
+-------------------------+
| JavaProgram.java |
+---------+---------------+
| API | | +---------------+
+---------+ +---->+ Java Platform |
| Java Virtual Machine | +---------------+
+-------------------------+
| Hardware-Based Platform |
+-------------------------+
作为一个独立于平台的环境,Java平台可能比本地代码慢一点。然而,编译器和虚拟机技术的进步使其性能接近本地代码的性能,而不会影响到可移植性。
Java 功能
通用的高级 Java 编程语言是一个功能强大的软件平台。 Java平台的每个完整实现都会为您提供以下功能:
- 开发工具: 开发工具提供编译,运行,监视,调试和记录应用程序所需的所有内容。 作为一名新开发人员,您将使用的主要工具是 javac 编译器,java 启动程序和 javadoc 文档工具。
- 应用程序编程接口(API): API提供了Java编程语言的核心功能。它提供了大量有用的类,可以在您自己的应用程序中使用。它涵盖了从基本对象到网络和安全,到XML生成和数据库访问等等的所有内容。核心API非常大,详细内容请参阅 Java Platform Standard Edition 8 文档。
- 部署技术: JDK软件提供标准机制,例如用于将应用程序部署到最终用户的Java Web Start软件和Java Plug-In软件。
- 用户界面工具包: JavaFX,Swing和Java 2D工具包使创建复杂的图形用户界面 (GUI) 成为可能。
- 集成库:集成库支持数据库访问和操作远程对象, 例如 Java IDL API,JDBC API、Java Naming and Directory Interface (JNDI) API、 Java Remote Method Invocation over Internet Inter-ORB Protocol Technology(Java RMI-IIOP Technology)等。
Java 优势
- 快速入门: 尽管 Java 编程语言是一种功能强大的面向对象语言,但它很容易学习,特别是对于已经熟悉 C 或 C++ 的程序员。
- 编写较少的代码: 程序度量(类别计数,方法计数等)的比较表明用 Java 编程语言编写的程序比用C ++编写的相同程序小四倍。
- 编写更好的代码: Java 编程语言鼓励良好的编码实践,自动垃圾收集可帮助您避免内存泄漏。它的面向对象,JavaBeans™ 组件体系结构以及范围广泛且易于扩展的 API 使您可以重复使用现有的经过测试的代码并引入更少的错误。
- 更快地开发程序: Java 编程语言比 C++ 更简单,因此,编写它时,开发时间可能会快两倍。你的程序也需要更少的代码。
- 避免平台依赖性: 通过避免使用用其他语言编写的库,可以保持程序的可移植性。
- 编写一次,随处运行: 由于使用Java编程语言编写的应用程序编译为与机器无关的字节码,因此它们可以在任何Java平台上始终运行。
- 更轻松地分发软件: 使用 Java Web Start 软件,用户只需单击鼠标即可启动应用程序。启动时的自动版本检查可确保用户随时了解最新版本的软件。如果有更新可用,Java Web Start 软件将自动更新其安装。
Java 技术体系
Java Platform, Standard Edition (Java SE)
Java 平台标准版 (Java SE) 允许您在桌面和服务器上开发和部署 Java 应用程序。
Java 提供了当今应用程序所需的丰富的用户界面,性能,多功能性,可移植性和安全性。
Java SE 的组件:
- Java 开发工具包 (Java Development Kit - JDK)
- Java 运行时环境 (Java Runtime Environment - JRE)
- Java SE应用程序编程接口(Java SE application programming interface - Java SE API)
Oracle JDK 发行版:
- 下载地址 (https://www.oracle.com/technetwork/java/javase/downloads/index.html)
- 支持路线图 (http://www.oracle.com/technetwork/java/javase/eol-135779.html)
OpenJDK 发行版:
- OpenJDK (http://openjdk.java.net/)
- AdoptOpenJDK (https://adoptopenjdk.net/)
- Amazon Corretto (https://github.com/corretto/corretto-8)
- Alibaba Dragonwell (https://github.com/alibaba/dragonwell8)
Java Platform, Enterprise Edition (Java EE)
Java 平台企业版 (Java EE) 是社区驱动型企业软件的标准。
Java EE 使用Java Community Process(JCP标准) 开发,该标准的贡献者有行业专家,商业和开源组织,Java用户组和无数个人。每个版本都集成了符合行业需求的新功能,提高了应用程序的可移植性,并提高了开发人员的生产力。
今天,Java EE提供了一个丰富的企业软件平台,并有超过 20个兼容的 Java EE 实现可供选择。
参考链接:
Oracle Java™ EE 8 SDK
Java EE Resources
1. JVM 是什么?为什么 Java 是独立于平台的编程语言?
JVM 指 Java 虚拟机,是运行 Java 字节码的虚拟机。
每个 Java 源文件都被编译成 Java 虚拟机可以执行的字节码文件。
Java 虚拟机有针对各个平台的实现,从而实现相同的字节码执行可以得到相同的结果,最终实现一次编译,到处执行。
字节码和 Java 虚拟机是 Java独立于平台的编程语言的根本原因。
2. JDK 和 JRE 有什么不同?
JRE = JVM + Java 核心类库与支持文件
JDK = JRE + Java 开发工具
3. Oracle JDK 和 OpenJDK 异同?
- Oracle JDK版本将每三年发布一次,而OpenJDK版本每三个月发布一次;
- OpenJDK 是一个参考模型并且是完全开源的,而Oracle JDK是OpenJDK的一个实现,并不是完全开源的;
- Oracle JDK 比 OpenJDK 更稳定。
OpenJDK 和 Oracle JDK 的代码几乎相同,但 Oracle JDK 有更多的类和一些错误修复。
因此,如果您想开发企业/商业软件,我建议您选择 Oracle JDK,因为它经过了彻底的测试和稳定。
某些情况下,有些人提到在使用 OpenJDK 可能会遇到了许多应用程序崩溃的问题,但是,只需切换到Oracle JDK就可以解决问题;
- 在响应性和 JVM 性能方面,Oracle JDK 与 OpenJDK 相比提供了更好的性能;
- Oracle JDK 不会为即将发布的版本提供长期支持,用户每次都必须通过更新到最新版本获得支持来获取最新版本;
- Oracle JDK 根据二进制代码许可协议获得许可,而 OpenJDK 根据GPL v2许可获得许可。
4. Java 和 C++ 的区别?
- Java 和 C++ 都是面向对象的语言,都支持封装、继承和多态
- Java 不提供指针来直接访问内存,程序内存更加安全
- Java 的类是单继承的,C++ 支持多重继承;虽然 Java 的类不可以多继承,但是接口可以多继承。
- Java 有自动内存管理机制,不需要程序员手动释放无用内存
Java Platform, Micro Edition (Java ME)
Java 平台微型版(Java ME)为在物联网中的嵌入式和移动设备上运行的应用程序提供了强大灵活的环境:微控制器,传感器,网关,移动电话,个人数字助理(PDA)机顶盒,打印机等等。
Java ME包括灵活的用户界面,强大的安全性,内置的网络协议以及对可以动态下载的联网和离线应用程序的支持。基于Java ME的应用程序可以在许多设备上移植,但可以充分利用每个设备的本机功能。