Java基础(一):初识Java——发展历程、技术体系与JDK环境搭建
Java基础系列文章
Java基础(一):发展史、技术体系与JDK环境配置详解
目录
- 一、Java发展史
- 二、Java技术体系平台
-
- 1、JavaSE
- 2、JavaEE
- 3、JavaME
- 4、三者关系
- 三、Java程序运行机制及运行过程
-
- 1、Java的跨平台性
- 2、Java虚拟机(核心机制)
- 四、Java语言环境搭建
-
- 1、JDK(Java开发工具包)
- 2、JRE(Java运行时环境)
- 3、环境变量及作用
-
- 3.1、JAVA_HOME
- 3.2、CLASSPATH
- 3.3、PATH
一、Java发展史
Java最初由Sun
公司的“Green”项目组开发,用于智能家电设备,最初名为Oak
。因商标问题,1995
年更名为“Java”
(灵感源于印尼爪哇岛的咖啡)。
J2SE(标准版)、J2EE(企业版)、J2ME(微型版)
1.5公开命名为5.0
,此后版本号逐渐简化74亿
美元收购财务困境的Sun公司,Java正式归属Oracle半年
发布一次版本,每三年
推出LTS(长期支持)版本Java EE移交Eclipse基金会,重命名为Jakarta EE(如
包名从javax.*改为jakarta.*
)二、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可能实现相同的逻辑,但代码细节可能有细微差异(如注释、内部优化)
- 例1:
- 历史名称:早期称为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的值一般为一个以分号“;”作为分隔符的路径列表,设置如下
CLASSPATH=.;%JAVA_HOME%\\lib\\dt.jar;%JAVA_HOME%\\lib\\tools.jar;
“.”
表示当前目录,因为设置CLASSPATH会覆盖JVM的默认操作(查找当前目录),所以这里需要加上“.”dt.jar
是 Java 开发工具包(JDK)中用于为 IDE 提供 Swing/AWT 组件的设计时元数据(如属性、事件描述),支持通过拖拽和图形化界面进行可视化开发的核心类库文件tools.jar
的作用:包含编译工具(如javac)所需的类库
- Java5之前,若用户未显式配置CLASSPATH环境变量JVM不会在当前目录查询.class文件,所以需要配置CLASSPATH
- 但从
Java 5
(2004年发布)开始,默认情况,无需显式配置CLASSPATH
,JVM会自动搜索当前目录和核心类库
3.3、PATH
- 该环境变量指定一个路径列表,用于搜索可执行文件
- 执行一个可执行文件时,如果该文件不能在当前路径下找到,则依次寻找PATH中的每一个路径,直至找到。例如:
PATH=.;%JAVA_HOME%\\bin;
- 这样可以在命令行中直接使用java和javac命令,而不需要指定完整路径,否则就会出现以下错误:
- 不建议在PATH环境变量中添加当前目录
\".\"
的主要原因:- 如果当前目录
\".\"
被加入PATH,当用户进入公共可写目录/tmp
时,攻击者可能在该目录下放置与系统命令同名的恶意程序 - 例如:黑客
在/tmp目录下创建名为ls的木马文件
,当用户(尤其是root用户)执行ls
命令时,会优先执行当前目录下的恶意程序而非系统标准的/bin/ls
,导致权限泄露或数据被破坏
- 如果当前目录