JavaSE1️⃣简介

1、历史背景

20 世纪 90 年代初,James Gosling(SUN 公司,已被 Oracle 收购)开发。

一门面向对象的编程语言。

  1. 最初命名 Oak(橡树),目标是针对小型家电设备的嵌入式应用,结果市场没啥反响。
  2. 互联网的崛起让 Oak 焕发生机,SUN 公司改造 Oak 并于 1995 年以 Java 名称正式发布(原因是 Oak 已经被人注册)。
  3. 随着互联网的高速发展,Java 逐渐成为最重要的网络编程语言。

2、特点

2.1、语言

2.1.1、特点

编译型 & 解释型

  • 编译型语言:如 C、C++。
    1. 代码直接编译成机器码执行。
    2. 不同平台(X86、ARM 等)CPU 指令集不同,因此需要为每种平台编译对应的机器码。
  • 解释型语言:如 Python、Ruby。
    1. 由解释器直接加载源码并运行。
    2. 运行效率太低。

Java:一门面向对象的编程语言,介于编译型语言和解释型语言之间。

  1. Java 具有跨平台性

    1. 将 Java 源代码编译成字节码,类似于抽象的 CPU 指令。
    2. 只需要针对不同平台编写 JVM(虚拟机),JVM 负责加载字节码并执行,实现“一次编写,到处运行”的效果。
  2. JVM 与平台相关

    1. 为保证不同平台、不同公司开发的虚拟机都能正确执行 Java 字节码,SUN 公司制定了一系列 JVM 规范。
    2. 从实践的角度看,JVM 兼容性做得非常好,低版本 Java 字节码可正常运行在高版本的 JVM 上。

2.1.2、对比

  • 静态语言:运行时结构不可变,如 Java、C、C++。
  • 动态语言:运行时可以改变结构,如 Object-C、C#、JS、PHP、Python。

JS

JS Java
含义 基于对象的脚本语言,提供了丰富的内部对象 面向对象,需要涉及对象
执行 浏览器解释执行 先编译为字节码,通过解释器或编译器转为机器码
变量类型 弱类型,无需声明,解释器在运行时检查数据类型 强类型,需实现声明变量类型
动态联编,对象引用在运行时检查 静态联编,对象引用在编译时进行

C

C Java
面向 面向过程
(C++、C# 支持面向对象)
面向对象
执行 (编译式语言)
编译、链接后生成机器码
(解释性语言)
编译成字节码文件,由解释器解释执行,热点代码由 JIT 编译成机器码
跨平台
指针、运算符重载
多重继承 ❌,只支持多重实现
内存管理 可直接操作内存,需要对内存进行显式管理 无法直接操作内存,GC 机制自动内存管理
数据类型所占字节数 在不同平台不固定 固定

Python

Python Java
效率 方便调用 C 语言函数 或 C++ 库 虚拟机比 Python 强大
偏向 数据分析 商业开发
语言 弱类型(动态) 强类型(静态)
执行 直接运行 先编译为字节码,通过解释器或编译器转为机器码
变量 不需要声明 需要声明

2.2、版本

2.2.1、不同版本

  1. Java EE(Enterprise):SE 的基础上添加 API 和库,方便开发 web 应用、数据库、消息服务等。
  2. Java SE(Standard):包含标准的 JVM 和标准库
  3. Java ME(Micro):针对嵌入式设备的微版本。
    • SE 的标准库无法在 ME 上使用,JVM 也是“瘦身版”。
      • 没有真正流行,不建议学习。

2.2.2、版本号

发布时间线

1995 发布 1.0,目前最新版本 19。

时间 版本
1995 1.0
1998 1.2
2000 1.3
2002 1.4
2004 1.5 / 5.0
2005 1.6 / 6.0
2011 1.7 / 7.0
2014 1.8 / 8.0
2017/9 1.9 / 9.0
2018/3 10
2018/9 11
2019/3 12
2019/9 13
2020/3 14
2020/9 15
2021/3 16
2021/9 17
2022/3 18
2022/9 19

版本新功能

  • 5
    • 泛型
    • 枚举,switch 枚举
    • 自动装拆箱
    • foreach 循环
    • 可变参数
    • 静态导入(无需指定类名,直接调用静态结构,前提是导包)
    • 内省
  • 6:GUI
  • 7
    • switch-字符串
    • 泛型集合:泛型实例化类型自动推断。
    • 集合增强:直接用中括号、大括号进行初始化。
    • multi-catch:单个 catch 捕获多个异常类型,用 | 隔开
    • twr:在 try 括号内,指定要使用和自动释放的资源
  • 8
    • 接口默认方法:使用 default 关键字,实现方法
    • lambda 表达式

2.3、名词解释

JRE & JDK

  • JRE(Java Runtime Environment):JVM + Runtime Library
  • JDK(Java Development Kit):JRE + Compiler, debugger, etc

JSR & JCP

  • JSR(Java Specification Request):为保证 Java 语言规范性而提出。在 Java 平台上开发功能之前,需要创建 JSR 以定义接口规范。
  • JCP 组织(Java Community Process):负责审核 JSR 的组织。

RI & TCK

一个 JSR 规范发布时,需要同时发布一个 RI 和 TCK 以供参考。

  • RI(Reference Implementation)
  • TCK(Technology Compatibility Kit)

示例:有人提议开发某个功能 A,需要贴出能跑的代码(RI);为了保证不同人所开发的 A 的接口、功能完全相同,需要提供相关的测试套件(TCK)。

通常,RI 只是“能跑”的正确代码,不追求性能。因此,RI 仅作为参考,不会作为最终使用的产品。

3、安装

3.1、安装步骤

以 Windows 为例

  1. Oracle 官网:找到需要的版本,下载安装。

  2. 配置环境变量

    变量 备注
    JAVA_HOME JDK 安装路径 新增变量,提供给其它程序使用
    Path %JAVA_HOME%\bin 新增值,在任意路径都可以运行 Java
  3. 验证:打开命令提示符窗口(CMD),确认输出正确的 Java 版本。

    java -version
    

3.2、目录介绍

3.2.1、目录

  • bin 目录:二进制执行文件(.exe
    • javac:Java 编译器。将 Java 源文件(.java)编译为字节码文件(.class)。
    • java:启动 JVM 进程。用于执行字节码文件(.class)。
    • jar:打包工具。将一组字节码文件(.class)打包成一个 .jar 文件,便于发布。
    • javadoc:文档生成工具。从源码中自动提取注释并生成文档。
    • jdb:Java 调试器。用于开发阶段的运行调试。
    • ...
  • db 目录:小型数据库 JavaDB。
  • include 目录:存放开放 JDK 使用的 C 语言的头文件。
  • jre 目录:JRE 根目录,包含 bin 目录(含 JVM)、lib 目录(基础类库),但不包含开发工具。
  • lib 目录:Java 类库或库文件。

3.2.2、文件

  • src.zip:JDK 核心类源码
  • javafx-src.zip:JavaFX 源码
posted @ 2022-12-18 01:01  Jaywee  阅读(87)  评论(0编辑  收藏  举报

👇