java的体系结构

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语言基础:
  1. 语法:包括变量声明、数据类型(如int、float、char、String等)、运算符、控制结构(如if-else、for、while、switch等)。
  2. 类与对象:Java是一种面向对象的语言,包括类的定义、对象的创建、继承、封装和多态等概念。
  3. 异常处理:Java使用try-catch-finally块来处理运行时错误。
2.1.2 核心库:
  1. Java API:Java提供了丰富的标准库,包括集合框架(如List、Set、Map)、输入/输出(I/O)流、多线程、网络编程、日期和时间处理和数据库JDBC等。
  2. 实用工具类:如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 工具与框架:
  1. 开发工具:如Eclipse、IntelliJ IDEA、NetBeans等IDE,提供了编写、调试和部署Java应用的集成环境。
  2. 构建工具:如Maven、Gradle,用于管理项目依赖、构建和部署。
  3. 框架:如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程序的运行环境
  1. Java虚拟机(JVM):
    JVM是Java程序运行的核心环境,负责将Java字节码转换为特定平台的机器码并执行。JVM屏蔽了不同操作系统之间的差异,使得Java程序具有跨平台性。
  2. Java运行环境(JRE):
    JRE是运行Java程序所必需的环境,包括JVM、核心类库和支持文件。JRE不包含开发工具,仅用于运行Java程序。
3.1.2. Java程序的开发环境
  1. Java开发工具包(JDK):
    JDK是Java开发工具包,包含了JRE以及用于开发Java程序的工具,如编译器(javac)、调试器等。JDK还提供了丰富的类库和API,以及用于构建和管理Java项目的工具(如Maven、Gradle)。
  2. 环境变量配置:
    在安装JDK后,需要配置环境变量以便在命令行中运行Java程序。主要的环境变量包括JAVA_HOME(指向JDK的安装目录)、PATH(包含JVM和JDK工具的路径)和CLASSPATH(指定Java类库的位置)。
  3. 集成开发环境(IDE):
    IDE是开发Java程序的常用工具,提供了代码编辑、调试、构建和部署等功能。常用的Java IDE包括Eclipse、IntelliJ IDEA和NetBeans等。

3. 2 Java 语言开发架构

3.2.1 语法规则
  1. java语法包括标识符、关键字的定义和使用规则。例如,标识符用于给变量、类、方法等命名,要遵循以字母、美元符号($)或下划线(_)开头,后续可跟字母、数字、美元符号或下划线的规则;关键字则是具有特定语法功能的保留字,像public、class等不能用于其他用途。
  2. 数据类型分为基本数据类型(如byte、int、float、char、boolean等)和引用数据类型(如类、接口、数组)。基本数据类型有明确的存储大小和取值范围,而引用数据类型存储的是对象的引用。
    运算符(算术、关系、逻辑、位运算等)和表达式的构成及运算规则。例如,算术运算符用于基本的数学运算,关系运算符用于比较大小等,表达式则是由操作数和运算符组成的式子,运算时要遵循运算符优先级和结合性规则。
3.2.2 程序结构单位
  1. 类是 Java 的基本构建块,它封装了数据(成员变量)和操作数据的方法。例如,一个简单的Person类可以有name和age等成员变量,以及getName、setName等成员方法。
  2. 对象是类的实例,通过new关键字创建。例如,Person person = new Person(“Alice”, 25);创建了一个Person类的对象person,对象可以访问所属类的成员变量和方法。
  3. 方法用于执行特定的操作,有参数(用于接收外部数据)和返回值(用于返回操作结果)。例如,public int add(int a, int b)是一个有两个参数a和b并返回它们之和的方法。
  4. 包用于组织和管理类,避免类名冲突。像java.util包包含许多实用类,通过import语句可以在程序中引入需要的包中的类。
3.2.3 控制结构和异常处理
  1. 控制结构包括顺序结构(语句按书写顺序执行)、选择结构(如if - else、switch - case用于根据条件执行不同代码块)和循环结构(for、while、do - while用于重复执行代码块)。
  2. 异常处理通过try - catch - finally块来实现。try块包含可能抛出异常的代码,catch块捕获并处理特定类型的异常,finally块中的代码无论是否发生异常都会执行。同时,还可以使用throws关键字在方法声明中声明可能抛出的异常。
  3. Java 运行时数据区
    堆是用于存储对象实例的内存区域,所有对象都在堆中分配内存。例如,当创建一个Person对象时,对象的内存空间就在堆中分配。
    栈主要用于存储局部变量和方法调用信息。每当一个方法被调用时,方法的局部变量和执行状态就会被压入栈中,方法执行结束后,相应的栈帧就会弹出。
    方法区存储已被虚拟机加载的类信息、常量、静态变量等。例如,类的字节码、常量池信息都存储在方法区。
    程序计数器用于记录当前线程执行的字节码指令的行号,在多线程环境下,每个线程都有自己独立的程序计数器。

3. 3 Java 应用框架和类库等生态

3.3.1 核心类库
  1. java.lang包是 Java 语言的核心包,提供了基本的类和接口,如Object(所有类的超类)、String(用于处理字符串)、System(提供标准输入输出等功能)等。这些类和接口是 Java 程序最常用的基础组件。
  2. 输入输出相关类库主要集中在java.io和java.nio包中。java.io提供了基于字节流和字符流的输入输出操作,如FileInputStream、FileOutputStream、BufferedReader等;java.nio则提供了更高效的非阻塞式输入输出操作,如ByteBuffer、Channel等相关类。
  3. 集合框架位于java.util包中,包括List(如ArrayList、LinkedList用于存储有序的元素集合)、Set(如HashSet、TreeSet用于存储无序且不重复的元素集合)、Map(如HashMap、TreeMap用于存储键值对)等接口和实现类,方便程序员对数据进行高效的存储和操作。
3.3.2 扩展类库和框架
  1. 用于图形用户界面(GUI)开发的java.awt和javax.swing包。java.awt提供了基本的图形绘制和窗口组件功能,javax.swing是在java.awt基础上构建的更高级的轻量级组件库,用于开发跨平台的图形界面应用程序。
  2. 企业级开发框架如 Java EE(Enterprise Edition),它提供了一系列用于开发企业级应用的技术和规范,包括 Servlet(用于处理 Web 请求)、JSP(Java Server Pages 用于生成动态网页)、EJB(Enterprise Java Beans 用于构建企业级组件)等。这些技术可以帮助开发人员构建大型的、分布式的、安全可靠的企业应用。
  3. 用于数据库访问的java.sql和javax.persistence包。java.sql提供了基本的数据库连接和操作接口,如Connection、Statement、ResultSet等;javax.persistence是 Java 持久化规范,通过如 JPA(Java Persistence API)可以更方便地进行对象 - 关系映射(ORM)操作,将 Java 对象持久化到数据库中。
3.3.3 java生态-Java 开源项目与代码托管平台:
  1. 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。
  2. GitLab:
    平台介绍:也是一个非常受欢迎的代码托管平台,与 GitHub 类似,但它提供了更多的企业级功能和更灵活的权限管理。既可以用于开源项目的托管,也适合企业内部的私有项目开发。
    特点:支持创建私有仓库,对于一些不想公开的 Java 项目开发非常有用。而且它的 CI/CD(持续集成 / 持续部署)功能也很强大,方便开发者进行项目的自动化构建和部署。
  3. 码云(Gitee):
    平台介绍:这是国内最大的代码托管平台之一,由开源中国推出。它提供了稳定的代码托管服务,访问速度较快,适合国内开发者使用。
    特点:对于一些网络访问受限的开发者,码云是一个很好的选择。它也有丰富的 Java 开源项目,比如一些适合国内开发者使用习惯和业务场景的项目。

4. 后记

正如前面所说,java的体系结构是庞大而且复杂的,本博文只是从宏观的角度出发,不深不浅地做了介绍,但对于绝大多数java的开发者来说,理解到这个层次应该是足够了。java体系结构还有最重要的一块就是JVM,这个在我之前的博文也有所涉及,但是只是一部分或者片面。本来也打算写一篇长博文系统深入介绍写JVM,但是没有勇气,害怕自己能力不足。。后面再说吧。

码字不易,宝贵经验分享不易,请各位支持原创,转载注明出处,多多关注作者,家人们的点赞和关注是我笔耕不辍的动力。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/59737.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于STM32的实时时钟(RTC)教学

引言 实时时钟(RTC)是微控制器中的一种重要功能,能够持续跟踪当前时间和日期。在许多应用中,RTC用于记录时间戳、定时操作等。本文将指导您如何使用STM32开发板实现RTC功能,通过示例代码实现当前时间的读取和显示。 环…

探索开放资源上指令微调语言模型的现状

人工智能咨询培训老师叶梓 转载标明出处 开放模型在经过适当的指令调整后,性能可以与最先进的专有模型相媲美。但目前缺乏全面的评估,使得跨模型比较变得困难。来自Allen Institute for AI和华盛顿大学的研究人员们进行了一项全面的研究,探索…

使用k8s管理应用以及java案例

使用k8s管理应用 制作镜像控制器管理podpod数据持久化创建service四层代理创建ingress规则对外发布应用日志与监控应用案例(因无开发代码,最终跑不起来)编写java代码编写 Dockerfile构建 Docker 镜像在 Kubernetes 上运行应用程序创建 Kubernetes 服务service创建in…

【论文阅读笔记】CamoFormer: Masked Separable Attention for Camouflaged Object Detection

1.论文介绍 CamoFormer: Masked Separable Attention for Camouflaged Object Detection CamoFormer:用于隐藏目标检测的掩蔽可分离注意力 TPAMI 2024 Paper Code 2.摘要 如何从背景中识别和分割隐藏的对象是一个挑战。受transformer中多头自注意的启发&#xf…

【从零开始的LeetCode-算法】3254. 长度为 K 的子数组的能量值 I

给你一个长度为 n 的整数数组 nums 和一个正整数 k 。一个数组的 能量值 定义为: 如果 所有 元素都是依次 连续 且 上升 的,那么能量值为 最大 的元素。否则为 -1 。 你需要求出 nums 中所有长度为 k 的子数组的能量值。 请你返回一个长度为 n - k 1…

LLMs之PDF:zeroX(一款PDF到Markdown 的视觉模型转换工具)的简介、安装和使用方法、案例应用之详细攻略

LLMs之PDF:zeroX(一款PDF到Markdown 的视觉模型转换工具)的简介、安装和使用方法、案例应用之详细攻略 目录 zeroX的简介 1、支持的文件类型 zeroX的安装和使用方法 T1、Node.js 版本: 安装 使用方法 使用文件 URL: 使用本地路径&…

qt QStandardItemModel详解

1、概述 QStandardItemModel是Qt框架中提供的一个基于项的模型类,用于存储和管理数据,这些数据可以以表格的形式展示在视图控件(如QTableView、QTreeView等)中。QStandardItemModel支持丰富的数据操作,包括添加、删除…

思源笔记轻松连接本地Ollama大语言模型,开启AI写作新体验!

文章目录 前言1. 下载运行Ollama框架2. Ollama下载大语言模型3. 思源笔记设置连接Ollama4. 测试笔记智能辅助写作5. 安装Cpolar工具6. 配置Ollama公网地址7. 笔记设置远程连接Ollama8. 固定Ollama公网地址 前言 今天我们要聊聊如何通过cpolar内网穿透技术,把国产笔…

基于C++的决策树C4.5机器学习算法(不调包)

目前玩机器学习的小伙伴,上来就是使用现有的sklearn机器学习包,写两行代码,调调参数就能跑起来,看似方便,实则有时不利于个人能力发展,要知道现在公司需要的算法工程师,不仅仅只是会调参&#x…

这款Chrome 插件,使浏览器页面快速滑动到最底部和最顶部,并且还能...

前言 前几日我在使用谷歌浏览器,也就是chrome的时候,浏览一个内容很长的页面,由于页面上的内容有前后关联,所以我必须不停地切换到上面和下面。这非常不方便。使我非常抓狂。后来,我灵机一动,去谷歌浏览器…

汉诺塔问题代码分享及思路分享(c基础)

可以先自己尝试,只要看见过递归即可写。(我自己是)希望能自己尝试出来。 两种方法迭代比递归快很多.(不发代码的原因是想让你自己动手) 1 递归 2 迭代 猜数游戏是自己写的第一个有互动的程序。对我很有意义。 我绑定资源了的,大…

第9章 Apache WEB服务器企业实战

万维网 (WORLD WIDE WEB,WWW)服务器,也称之为WEB服务器,主要功能是提供网上信息浏览服务。WWW是 Internet的多媒体信息查询工具,是Internet上飞快发展的服务,也是目前用的最广泛的服务。正是因为有了WWW软件,才使得近年来 Internet 迅速发展。 目前主流的WEB服务器软件包…

第10章 MYSQL服务器企业实战

MySQL是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 旗下公司。MySQL 最流行的关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。 本章介绍关系型数据库特…

【初阶数据结构与算法】沉浸式刷题之顺序表练习(顺序表以及双指针两种方法)

文章目录 顺序表练习1.移除数组中指定的元素方法1(顺序表)方法2(双指针) 2.删除有序数组中的重复项方法1(顺序表)方法2(双指针) 3.双指针练习之合并两个有序数组方法1(直…

【flask开启进程,前端内容图片化并转pdf-会议签到补充】

flask开启进程,前端内容图片化并转pdf-会议签到补充 flask及flask-socketio开启threading页面内容转图片转pdf流程前端主js代码内容转图片-browser端browser端的同步编程flask的主要功能route,def 总结 用到了pdf,来回数据转发和合成,担心flask卡顿,响应差,于是刚好看到threadi…

PADS的GND难解之谜——GND铺不上捅?GND焊盘上全是绿色叉号?

PADS难解之谜——GND覆不上铜?焊盘上全是叉号? 文章目录 PADS难解之谜——GND覆不上铜?焊盘上全是叉号?1、GND灌铜灌不上?2、GND焊盘上全是绿色叉号? 如果对你有帮助,就点赞收藏把!(…

02- 模块化编程-007 Ltc1684( ADC16-Bit)采样显示

1、Ltc1684芯片介绍 该芯片是一款高精度的16位模数转换器(ADC),适合于高精度仪器的开发,它能提供精准的模拟信号到数字信号的转换。 特性 采用 MSOP 封装的 16 位、250ksps ADC 单 5V 电源 低电源电流:850μA (典型值) 自动停机功能可把电源…

信息安全工程师(80)网络安全测评技术与工具

前言 网络安全测评是评估信息系统、网络和应用程序的安全性,以发现潜在的漏洞和威胁,并确保系统符合安全标准和政策的过程。 一、网络安全测评技术 渗透测试(Penetration Testing) 描述:通过模拟真实的攻击&#xff0c…

基于STM32的太阳跟踪系统设计

引言 本项目基于STM32微控制器设计了一个智能太阳跟踪系统,通过集成光敏传感器模块和电机控制系统,实现太阳能电池板的自动调节,以保持太阳能电池板始终垂直对准太阳,从而最大化光能的吸收效率。该系统通过实时监测太阳光的方向&…

新能源汽车与公共充电桩布局

近年来,全球范围内对新能源汽车产业的推动力度不断增强,中国新能源汽车市场也呈现蓬勃发展的势头,在政策与市场的共同推动下,新能源汽车销量持续增长。然而,据中国充电联盟数据显示,充电基础设施建设滞后于新能源汽车数量增长的现状导致充电桩供需不平衡,公共充电桩服务空白区域…