Java基础(一):初识Java——发展历程、技术体系与JDK环境搭建

Java基础(一):初识Java——发展历程、技术体系与JDK环境搭建

Java基础系列文章

Java基础(一):发展史、技术体系与JDK环境配置详解

目录


一、Java发展史

Java最初由Sun公司的“Green”项目组开发,用于智能家电设备,最初名为Oak。因商标问题,1995年更名为“Java”(灵感源于印尼爪哇岛的咖啡)。

发行版本发行时间发行的各版本及其特征
Java1995年Java语言诞生
Java 1.01996年首个正式版本,包含基础类库和Applet支持
Java 1.11997年引入内部类(Inner Class)、Java Beans、JDBC(数据库连接)和反射API
Java 1.21998年JDK 1.2发布,更名为Java 2,分为三个平台:J2SE(标准版)、J2EE(企业版)、J2ME(微型版)
Java 1.32000年引入HotSpot JVM、JNDI(Java命名与目录接口)
Java 1.42002年新增正则表达式、断言(Assert)、NIO(非阻塞I/O)和日志API
Java 5.02004年引入泛型、注解、枚举等革命性特性,为强调版本重要性,Sun将内部版本号1.5公开命名为5.0,此后版本号逐渐简化
Java 6.02006年Sun将产品线更名为Java SE/EE/ME,终结“J2”前缀,并宣布开源(OpenJDK)
2009年Oracle以74亿美元收购财务困境的Sun公司,Java正式归属Oracle
Java 7.02011年Oracle首个大版本,支持菱形语法、多异常捕获,但因收购过渡期特性较少
Java 8.02014年继JDK 5后最大更新,引入Lambda表达式、Stream API、新日期时间库。LTS(长期支持)版本
Java 9.02017年发布周期改为每半年发布一次版本,每三年推出LTS(长期支持)版本
Java 10.02018年废弃“1.x”格式,直接使用主版本号(如JDK 10而非JDK 1.10)
Java EE移交Eclipse基金会,重命名为Jakarta EE(如包名从javax.*改为jakarta.*
Java 11.02018年新增HTTP客户端API、局部变量类型推断(var)并移除部分过时功能。LTS(长期支持)版本
Java21.02023年被视为继Java 8后的新一代主流版本,生态支持(如框架适配率)快速提升。LTS(长期支持)版本

二、Java技术体系平台

1、JavaSE

  • JavaSE 的全称是 Java Platform Standard Edition(Java 平台标准版
  • 面向桌面级应用(如Windows下的应用程序),提供完整的Java核心API,是其他平台(JavaEE、JavaME)的基础
  • JavaSE和JDK的关系
    • JavaSE(规范):定义接口、抽象类、具体类以及JVM的行为和约束(定义语言和API应该是什么样)
      • 例:JavaSE规范要求必须有一个ArrayList类,它实现List接口,支持动态扩容
    • JDK(实现):提供这些接口和类的具体代码实现(按照规则实现并提供开发工具和运行环境)
      • 例1:OracleJDK的ArrayList源码中,具体实现了扩容机制(如默认扩容1.5倍)
      • 例2:OpenJDK的ArrayList可能实现相同的逻辑,但代码细节可能有细微差异(如注释、内部优化)
  • 历史名称:早期称为J2SE(JDK 6之前)

2、JavaEE

  • JavaEE 的全称是 Java Platform Enterprise Edition(Java 平台企业版
  • 在Java SE基础上扩展了大量企业级API(如Servlet、JSP、EJB),提供分布式计算、事务管理、安全性等企业级功能
  • JavaEE接口由官方规范定义,具体实现由应用服务器(Tomcat、WildFly)或第三方库(Hibernate、ActiveMQ)提供
  • 自JDK 10起由Oracle移交Eclipse基金会管理,更名为Jakarta EE
  • 历史名称:曾用名J2EE(JDK 6之前)

3、JavaME

  • JavaME 的全称是 Java Platform Micro Edition(Java 平台微型版
  • 针对移动终端(手机、PDA等)的轻量级平台,精简了Java SE的API并加入移动设备支持
  • 随着 Android 和 iOS 的普及,JavaME 的使用逐渐减少
  • 历史名称:曾用名J2ME

4、三者关系

  • JavaSE 是基础:JavaEE 和 JavaME 均基于 JavaSE 的核心功能构建
  • JavaEE 是扩展:在 JavaSE 基础上增加企业级服务规范(如 Servlet、JPA、EJB)
  • JavaME 是精简:仅保留 JavaSE 部分功能,并添加针对微型设备的特性
在这里插入图片描述


在这里插入图片描述

三、Java程序运行机制及运行过程

1、Java的跨平台性

在这里插入图片描述

2、Java虚拟机(核心机制)

  • JVM 是一个虚拟的计算机,具有指令集并使用不同的存储区域。负责执行指令,管理数据、内存、寄存器,包含在JDK 中
  • 对于不同的平台,有不同的虚拟机
  • Java 虚拟机机制屏蔽了底层运行平台的差别,实现了“一次编译,到处运行”
在这里插入图片描述

四、Java语言环境搭建

1、JDK(Java开发工具包)

  • 定义:JDK是用于开发Java应用程序的完整工具包,包含编译、调试、文档生成等开发工具以及运行环境
  • 组成部分
    • JRE:JDK中内置了JRE(包含核心类库),确保开发时可以直接运行程序
    • 开发工具:如编译器javac(将Java源代码编译为字节码)、调试器jdb、文档工具javadoc
    • JDK特有的工具类库:如:tools.jar,支持编译器(javac)、调试器(jdb)等工具的运行(位于JDK的lib目录下)
  • 用途:开发者必须安装JDK,才能编写、编译和调试Java程序
在这里插入图片描述

2、JRE(Java运行时环境)

  • 定义:JRE是运行已编译Java程序所需的最小环境,无需开发功能
  • 组成部分
    • JVM(Java虚拟机) :负责执行字节码,实现跨平台特性
    • JRE中的核心类库:以java.*包的形式存在,例如rt.jar、resource.jar下java.lang、java.util等(位于JRE的lib目录下,并由BootstrapClassLoader自动加载)
    • JRE中的扩展类库:以javax.*包的形式组织,例如javax.sql等(JRE的lib/ext目录下,由ExtensionClassLoader加载)
  • 用途:普通用户只需安装JRE即可运行Java程序(如.jar.class文件),无需开发工具

3、环境变量及作用

3.1、JAVA_HOME

  • 该环境变量的值是Java的安装路径,一些Java版本的软件和工具需要用到该变量

例如,当Windows平台上JDK的安装目录为“C:\java\jdk8”时,设置如下所示

JAVA_HOME=C:\java\jdk8 

3.2、CLASSPATH

  • 该环境变量用于指明Java字节码文件(.class文件)的位置
  • 默认情况下,如果未设置CLASSPATH,Java启动JVM后,会在当前目录下寻找字节码文件,一旦设置了CLASSPATH,JVM会在指定目录下查找字节码文件
    • “.”表示当前目录,因为设置CLASSPATH会覆盖JVM的默认操作(查找当前目录),所以这里需要加上“.”
    • dt.jar是 Java 开发工具包(JDK)中用于为 IDE 提供 Swing/AWT 组件的设计时元数据(如属性、事件描述),支持通过拖拽和图形化界面进行可视化开发的核心类库文件
    • tools.jar的作用:包含编译工具(如javac)所需的类库
  • Java5之前,若用户未显式配置CLASSPATH环境变量JVM不会在当前目录查询.class文件,所以需要配置CLASSPATH
  • 但从Java 5(2004年发布)开始,默认情况,无需显式配置CLASSPATH,JVM会自动搜索当前目录和核心类库

环境变量CLASSPATH的值一般为一个以分号“;”作为分隔符的路径列表,设置如下

CLASSPATH=.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;

3.3、PATH

  • 该环境变量指定一个路径列表,用于搜索可执行文件
  • 不建议在PATH环境变量中添加当前目录"."的主要原因:
    • 如果当前目录"."被加入PATH,当用户进入公共可写目录/tmp时,攻击者可能在该目录下放置与系统命令同名的恶意程序
    • 例如:黑客在/tmp目录下创建名为ls的木马文件,当用户(尤其是root用户)执行ls命令时,会优先执行当前目录下的恶意程序而非系统标准的/bin/ls,导致权限泄露或数据被破坏

这样可以在命令行中直接使用java和javac命令,而不需要指定完整路径,否则就会出现以下错误:

在这里插入图片描述

执行一个可执行文件时,如果该文件不能在当前路径下找到,则依次寻找PATH中的每一个路径,直至找到。例如:

PATH=.;%JAVA_HOME%\bin;

Read more

【Java 开发日记】设计一个支持万人同时抢购商品的秒杀系统?

【Java 开发日记】设计一个支持万人同时抢购商品的秒杀系统?

目录 一、系统架构设计 1. 分层架构 2. 具体组件 二、核心问题解决方案 1. 超卖问题 解决方案一:Redis原子操作 解决方案二:数据库乐观锁 解决方案三:预扣库存 2. 高并发请求处理 2.1 流量削峰 2.2 分层过滤 3. 系统性能优化 3.1 缓存策略 3.2 读多写少优化 4. 详细实现方案 4.1 秒杀流程 4.2 库存同步方案 三、高可用保障 1. 限流降级策略 2. 熔断降级 四、监控与告警 1.

By Ne0inhk

Java常见面试题及答案汇总(2025最新版)

一、Java基础语法与核心特性 1. Java的核心特性有哪些? 答案: * 跨平台性(Write Once, Run Anywhere):通过JVM(Java虚拟机)实现,字节码文件可在任意支持JVM的操作系统运行; * 面向对象(OOP):封装、继承、多态三大核心特性; * 安全性:支持沙箱机制、字节码校验、权限控制(如文件IO权限); * 健壮性:自动垃圾回收(GC)避免内存泄漏,强类型检查、异常处理机制减少运行时错误; * 分布式:支持RMI(远程方法调用)、HTTP协议,便于开发分布式应用; * 多线程:内置多线程API,支持并发编程。 2. 基本数据类型与包装类的区别? 答案: 维度基本数据类型(如int、float)包装类(如Integer、Float)本质原始值,无对象属性引用类型,继承Object类默认值有(

By Ne0inhk
【Java 开发日记】我们来说一下 MySQL 的慢查询日志

【Java 开发日记】我们来说一下 MySQL 的慢查询日志

目录 一、什么是慢查询日志 二、核心作用 三、配置参数详解 四、开启和配置 1. 临时开启(重启失效) 2. 永久开启(修改配置文件) 五、慢查询日志格式分析 典型日志条目: 关键字段解释: 六、慢查询分析工具 1. mysqldumpslow(MySQL 自带) 2. pt-query-digest(Percona Toolkit) 3. mysqlslow(第三方工具) 七、慢查询日志表模式 启用表模式存储: 表结构: 八、最佳实践和优化建议 1. 阈值设置建议 2. 日志轮转配置 3. 定期分析计划 九、性能监控和告警 1. 监控慢查询数量 2. 慢查询告警脚本

By Ne0inhk
Java 智能体学习避坑指南:3 个常见误区,新手千万别踩,高效少走弯路

Java 智能体学习避坑指南:3 个常见误区,新手千万别踩,高效少走弯路

欢迎文末添加好友交流,共同进步! “ 俺はモンキー・D・ルフィ。海贼王になる男だ!” * 前言 * 误区一:过度依赖框架,忽视底层原理 * 1.1 误区表现 * 1.2 问题诊断流程 * 1.3 正确做法:从零构建理解 * ❌ 错误示范:直接使用框架 * ✅ 正确示范:先理解底层,再用框架 * 1.4 学习路径对比 * 误区二:忽视Java特性,照搬Python方案 * 2.1 误区表现 * 2.2 常见错误对比 * 2.3 典型错误案例 * ❌ 错误1:字符串拼接JSON * ✅ 正确1:使用Java类型系统 * ❌ 错误2:同步阻塞调用 * ✅ 正确2:使用Java响应式编程 * 2.4

By Ne0inhk