1. 题记:
其实很早就打算来写java的体系结构这一文章,但是有诸多担忧就一直搁置。其一担心自己水平有限,恐不能讲得太透彻,因为java的体系结构宏大精深。其二不知道怎么去把控文章的难度及深度,因为需要给大部分看,不能太晦涩难懂,也不能皮毛一样的粗浅,我想写的是一篇对大部分java开发者来说“难度及深度刚刚好的”的博文。
本篇博文篇幅较长,但我尽力写得通俗易懂,难易适中,由浅入深进而由深入浅,让java结构具象化,从而让其浮出水面,就像我之前博文(图文深入理解java对象从创建到回收都经历了什么,博文地址:https://blog.csdn.net/qq_45732829/article/details/142870192)的那张图一样:
2. Java体系结构概述
2.1 java语言的整体结构
按照官方的视角,java语言的整体结构如下图所示:
由图可见,java的这个体系结构还是非常宏大复杂的。但是,Java语言的整体结构非常系统化和模块化,主要包括以下主要部分:
2.1.1 Java语言基础:
- 语法:包括变量声明、数据类型(如int、float、char、String等)、运算符、控制结构(如if-else、for、while、switch等)。
- 类与对象:Java是一种面向对象的语言,包括类的定义、对象的创建、继承、封装和多态等概念。
- 异常处理:Java使用try-catch-finally块来处理运行时错误。
2.1.2 核心库:
- Java API:Java提供了丰富的标准库,包括集合框架(如List、Set、Map)、输入/输出(I/O)流、多线程、网络编程、日期和时间处理和数据库JDBC等。
- 实用工具类:如String、StringBuilder、Math、System等,提供了许多常用的方法和功能。
2.1.3 Java虚拟机(JVM):
JVM是运行Java字节码的平台,负责将Java字节码转换为特定平台的机器码并执行。包括垃圾回收机制,自动管理内存分配和释放。
2.1.4 Java平台模块系统:
从Java 9开始,Java引入了模块系统(JPMS,Java Platform Module System),用于更好地管理依赖关系和封装代码。
2.1.5 Java EE(Java Enterprise Edition):
针对企业级应用开发的一套规范和技术,包括Servlet、JSP、EJB、JPA、JTA等。提供了构建分布式、多层架构应用所需的组件和服务。
2.1.6 JavaFX:
JavaFX是Java的一个用于构建图形用户界面的框架,支持创建桌面应用。提供了丰富的UI组件和布局管理。
2.1.7 Java ME(Java Micro Edition):
针对嵌入式设备和移动设备的Java平台,这块目前已逐渐被新的技术(如Android等)所取代。
2.1.8 工具与框架:
- 开发工具:如Eclipse、IntelliJ IDEA、NetBeans等IDE,提供了编写、调试和部署Java应用的集成环境。
- 构建工具:如Maven、Gradle,用于管理项目依赖、构建和部署。
- 框架:如Spring、Hibernate、Struts等,简化了企业级应用的开发。
2.1.9 安全与性能:
Java语言内置了多种安全特性,如类加载机制、字节码验证、安全管理器等。
性能优化技术包括JIT(即时编译)、垃圾回收调优、多线程并发控制等。
2.1.10 Java社区与开源:
Java拥有庞大的开发者社区和丰富的开源资源,如Apache、Spring、Oracle等组织和项目。这些组成部分共同构成了Java语言的整体结构,使其成为一个强大、灵活且广泛使用的编程语言。
3. Java体系结构三大块
如图所示,其实整个java语言的体系结构可以分为三大块,即:java的操作系统环境架构,java语言开发架构以及这java语言的生态。下面分别详细介绍。
3. 1 java的操作系统环境架构
Java操作系统环境主要涉及Java程序的运行和开发所需的环境配置。主要由以下构成:
3.1.1. Java程序的运行环境
- Java虚拟机(JVM):
JVM是Java程序运行的核心环境,负责将Java字节码转换为特定平台的机器码并执行。JVM屏蔽了不同操作系统之间的差异,使得Java程序具有跨平台性。 - Java运行环境(JRE):
JRE是运行Java程序所必需的环境,包括JVM、核心类库和支持文件。JRE不包含开发工具,仅用于运行Java程序。
3.1.2. Java程序的开发环境
- Java开发工具包(JDK):
JDK是Java开发工具包,包含了JRE以及用于开发Java程序的工具,如编译器(javac)、调试器等。JDK还提供了丰富的类库和API,以及用于构建和管理Java项目的工具(如Maven、Gradle)。 - 环境变量配置:
在安装JDK后,需要配置环境变量以便在命令行中运行Java程序。主要的环境变量包括JAVA_HOME(指向JDK的安装目录)、PATH(包含JVM和JDK工具的路径)和CLASSPATH(指定Java类库的位置)。 - 集成开发环境(IDE):
IDE是开发Java程序的常用工具,提供了代码编辑、调试、构建和部署等功能。常用的Java IDE包括Eclipse、IntelliJ IDEA和NetBeans等。
3. 2 Java 语言开发架构
3.2.1 语法规则
- java语法包括标识符、关键字的定义和使用规则。例如,标识符用于给变量、类、方法等命名,要遵循以字母、美元符号($)或下划线(_)开头,后续可跟字母、数字、美元符号或下划线的规则;关键字则是具有特定语法功能的保留字,像public、class等不能用于其他用途。
- 数据类型分为基本数据类型(如byte、int、float、char、boolean等)和引用数据类型(如类、接口、数组)。基本数据类型有明确的存储大小和取值范围,而引用数据类型存储的是对象的引用。
运算符(算术、关系、逻辑、位运算等)和表达式的构成及运算规则。例如,算术运算符用于基本的数学运算,关系运算符用于比较大小等,表达式则是由操作数和运算符组成的式子,运算时要遵循运算符优先级和结合性规则。
3.2.2 程序结构单位
- 类是 Java 的基本构建块,它封装了数据(成员变量)和操作数据的方法。例如,一个简单的Person类可以有name和age等成员变量,以及getName、setName等成员方法。
- 对象是类的实例,通过new关键字创建。例如,Person person = new Person(“Alice”, 25);创建了一个Person类的对象person,对象可以访问所属类的成员变量和方法。
- 方法用于执行特定的操作,有参数(用于接收外部数据)和返回值(用于返回操作结果)。例如,public int add(int a, int b)是一个有两个参数a和b并返回它们之和的方法。
- 包用于组织和管理类,避免类名冲突。像java.util包包含许多实用类,通过import语句可以在程序中引入需要的包中的类。
3.2.3 控制结构和异常处理
- 控制结构包括顺序结构(语句按书写顺序执行)、选择结构(如if - else、switch - case用于根据条件执行不同代码块)和循环结构(for、while、do - while用于重复执行代码块)。
- 异常处理通过try - catch - finally块来实现。try块包含可能抛出异常的代码,catch块捕获并处理特定类型的异常,finally块中的代码无论是否发生异常都会执行。同时,还可以使用throws关键字在方法声明中声明可能抛出的异常。
- Java 运行时数据区
堆是用于存储对象实例的内存区域,所有对象都在堆中分配内存。例如,当创建一个Person对象时,对象的内存空间就在堆中分配。
栈主要用于存储局部变量和方法调用信息。每当一个方法被调用时,方法的局部变量和执行状态就会被压入栈中,方法执行结束后,相应的栈帧就会弹出。
方法区存储已被虚拟机加载的类信息、常量、静态变量等。例如,类的字节码、常量池信息都存储在方法区。
程序计数器用于记录当前线程执行的字节码指令的行号,在多线程环境下,每个线程都有自己独立的程序计数器。
3. 3 Java 应用框架和类库等生态
3.3.1 核心类库
- java.lang包是 Java 语言的核心包,提供了基本的类和接口,如Object(所有类的超类)、String(用于处理字符串)、System(提供标准输入输出等功能)等。这些类和接口是 Java 程序最常用的基础组件。
- 输入输出相关类库主要集中在java.io和java.nio包中。java.io提供了基于字节流和字符流的输入输出操作,如FileInputStream、FileOutputStream、BufferedReader等;java.nio则提供了更高效的非阻塞式输入输出操作,如ByteBuffer、Channel等相关类。
- 集合框架位于java.util包中,包括List(如ArrayList、LinkedList用于存储有序的元素集合)、Set(如HashSet、TreeSet用于存储无序且不重复的元素集合)、Map(如HashMap、TreeMap用于存储键值对)等接口和实现类,方便程序员对数据进行高效的存储和操作。
3.3.2 扩展类库和框架
- 用于图形用户界面(GUI)开发的java.awt和javax.swing包。java.awt提供了基本的图形绘制和窗口组件功能,javax.swing是在java.awt基础上构建的更高级的轻量级组件库,用于开发跨平台的图形界面应用程序。
- 企业级开发框架如 Java EE(Enterprise Edition),它提供了一系列用于开发企业级应用的技术和规范,包括 Servlet(用于处理 Web 请求)、JSP(Java Server Pages 用于生成动态网页)、EJB(Enterprise Java Beans 用于构建企业级组件)等。这些技术可以帮助开发人员构建大型的、分布式的、安全可靠的企业应用。
- 用于数据库访问的java.sql和javax.persistence包。java.sql提供了基本的数据库连接和操作接口,如Connection、Statement、ResultSet等;javax.persistence是 Java 持久化规范,通过如 JPA(Java Persistence API)可以更方便地进行对象 - 关系映射(ORM)操作,将 Java 对象持久化到数据库中。
3.3.3 java生态-Java 开源项目与代码托管平台:
- GitHub:
平台介绍:全球最大最知名的代码托管平台。它拥有庞大的开发者社区和海量的开源项目,几乎涵盖了所有领域和技术方向的 Java 项目。
热门 Java 开源项目:
Spring Boot:一个用于快速构建基于 Spring 框架的应用程序的开发框架,大大简化了 Spring 应用的开发过程,在企业级应用开发中广泛使用,其项目地址为https://github.com/spring-projects/spring-boot。
Elasticsearch:一个强大的开源搜索引擎,基于 Java 编写,用于全文搜索、数据分析等场景,项目地址是https://github.com/elastic/elasticsearch。
Guava:Google 开发的一组核心库,提供了很多实用的工具类和数据结构,如集合操作、缓存、并发等功能,地址为https://github.com/google/guava。 - GitLab:
平台介绍:也是一个非常受欢迎的代码托管平台,与 GitHub 类似,但它提供了更多的企业级功能和更灵活的权限管理。既可以用于开源项目的托管,也适合企业内部的私有项目开发。
特点:支持创建私有仓库,对于一些不想公开的 Java 项目开发非常有用。而且它的 CI/CD(持续集成 / 持续部署)功能也很强大,方便开发者进行项目的自动化构建和部署。 - 码云(Gitee):
平台介绍:这是国内最大的代码托管平台之一,由开源中国推出。它提供了稳定的代码托管服务,访问速度较快,适合国内开发者使用。
特点:对于一些网络访问受限的开发者,码云是一个很好的选择。它也有丰富的 Java 开源项目,比如一些适合国内开发者使用习惯和业务场景的项目。
4. 后记
正如前面所说,java的体系结构是庞大而且复杂的,本博文只是从宏观的角度出发,不深不浅地做了介绍,但对于绝大多数java的开发者来说,理解到这个层次应该是足够了。java体系结构还有最重要的一块就是JVM,这个在我之前的博文也有所涉及,但是只是一部分或者片面。本来也打算写一篇长博文系统深入介绍写JVM,但是没有勇气,害怕自己能力不足。。后面再说吧。
码字不易,宝贵经验分享不易,请各位支持原创,转载注明出处,多多关注作者,家人们的点赞和关注是我笔耕不辍的动力。