Java概述

接触Java后会发现它的体系有一个特点,就是非常喜欢用“J”字母开头的缩写,比如JCP, JSR, JMS, JPA, JSP, JAX-RS......它们有些是规范,有些是组织的名称,表意多样,对第一次接触的人来说很可能会觉得混乱,本文将从发展历史、技术体系、社区运作三个角度去梳理,从而能对Java有一个宏观的理解。

历史

  • 1955年JFJG(Java's Father, James Gosling)在加拿大的一个小村庄出生,十几岁开始编程,各种天赋异禀
  • 1984年入职Sun公司
  • 1991年Sun成立“绿色计划”,JFJG带领团队产出语言“Oak”(橡树),但是并不成功
  • 1995年互联网开始兴起,Oak找到了适合自己的定位,改名为“Java”,并发布了JDK1.0
  • 1998年JDK1.2发布,第一次将技术体系拆分成三个方向j2se、j2ee、j2me,它是一个里程碑
  • 2006年Sun开源Java,并建立OpenJdk组织对源码进行管理,虽然开源,但有部分代码连Sun也没有权限处理,所以就有了2个版本SunJdk和OpenJdk,但是OpenJdk的质量主管说了,这两个版本除了代码文件头的版权注释之外,代码基本上完全一样
  • 2009年4月20日Oracle收购Sun
  • 2010年4月2日,JFJG从Oracle离职,至此他在Sun服役26年

技术体系

Java纯粹是一门语言,而运行该语言需要运行环境,以及一些核心的工具包等等,把这些打包起来就形成了方便程序员使用的JDK(Java development kit),面向不同的平台,有不同版本的JDK,相应JDK背后都遵循一套规范:

  • Java SE(Standard Edition),面向桌面级应用,如windows应用程序
  • Java EE(Enterprise Edition),面向基于网络的应用,如网站,云服务
  • Java ME(Micro Edition),面向移动端,如Android(本文不讨论)
  • Java CARD,面向小内存设备,如智能卡(本文不讨论)

需要注意的是,Java SE/EE/ME/CARD都是规范,这些规范都由一个叫JCP(后文会说明)的组织在维护,而相应的JDK是规范的实现,换句话说,你也可以根据它的规范去实现一个Development kit。Java SE规范只有一个官方的Java SE JDK的实现,这很清楚,但是Java EE规范的实现(或者说是供应商)可就多了,有GlassFish, WildFly, JBose......更多请看这里(我们知道Spring是非常流行的web框架,但是这里为啥没Spring什么事?后文会说明)。

Java EE规范供应商列表

上图来自WIKI,不难发现,针对不同版本的Java EE规范(横轴),都有很多供应商提供实现(纵轴),有些商业,有些免费,并且每一个供应商跟进规范的进度还不一样。其中GlassFish是Oracle的官方实现,那么Java EE JDK和GlassFish是什么关系呢?Java EE JDK封装了ClassFish,就像官方文档里说的:

那么Java EE规范都有哪些?

Java EE规范体系

上图中我们不但看到了Java EE针对基于网络的应用都定义了哪些规范,以及不同规范所处的模块以及角色,甚至能看到Java SE规范所处的位置。不同供应商基于规范实现自己的产品,同一类型产品形成竞争,优胜劣汰,而对于用户来说,如果不幸某一个供应商破产了或者想切换到更优秀的产品,无论什么原因,这都是件轻松的事情。

Java SE JDK提供了核心API,我们可以可以看看它的体系:

Java SE JDK体系

社区运营

每一种语言都有相应的社区,Java的社区叫JCP(Java Community Process),成立于1998年。事实上Java并不属于某一家公司,而是由JCP组织进行管理,尽管JCP主要由Sun或者Oracle公司领导,但任何个人或组织都能申请成为其中一员。该社区至今已经形成了一套非常成熟的管理体系。

该体系涉及4个角色:Executive Committee(EC), Spec Lead, Expert Group, Contributors。

社区组织架构

我们举一个实际场景的例子就能理解上图的组织架构,假设我这么一个程序员,觉得Java EE有一个缺陷,我认为需要增加一个规范,我亲自设计了规范并向EC提交我的方案请求,该方案就叫JSR(Java Specification Requests),EC是最重要的一个部门,其成员可能由前Sun员工或现任Oracle员工组成,他们负责审核提交上来的JSR,经过严谨的分析觉得可行,于是当初提交JSR的那个人就被EC任命为Spec Lead,并且给他配置了专家团队(Expert Group)以及贡献者(Contributors),意思是说,这JSR是你提的,现在由你去带领这个团队把这个事搞定。

有趣的是JSR的处理流程。

JSR处理流程

从写一个JSR、提交JSR、JSR review,一直到最后的投票,重点不是每个步骤做了什么(如果感兴趣可以看这里),而是整个流程花了多少时间。Spring觉得Java EE规范发展的速度太慢,如果像其他供应商一样跟着规范亦步亦趋的走不是Spring的风格,于是Spring采纳Java EE中优秀的规范,对于自己不认可或者干脆没有的规范就自己搞定。结果呢?Spring发展迅速并在规范上领先于Java EE,以至于后来Java EE反过来跟随Spring,将Spring中优秀的规范融入到自己的体系。说到这里,你是不是开始吐槽Java EE了,JCP中的一位资深成员Leonardo Lima说了:

JCP是一个定规范的地方,不是搞创新的地方。创新这种事应该发生在JCP之外的社区像Apache和Eclipse,而最终这些创新所沉淀下来的规范会被JCP融入到Java EE当中。

你怎么看?

到现在为止,比较宽泛的聊了一些关于Java比较宏观的知识,如果表述不准确或者理解有误的地方,希望大家指正。

参考资料:

Java EE8 specifications

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

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

相关文章

基于水基湍流算法优化概率神经网络PNN的分类预测 - 附代码

基于水基湍流算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于水基湍流算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于水基湍流优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要:针对PNN神…

Nginx-负载均衡-动静分离-虚拟主机

负载均衡 负载均衡基本使用 1 配置上游服务器 upstream myserver { #是server外层server ip1:8080;server ip1:8080; }2 配置代理 server {location / { proxy_pass http://myserver;#请求转向myserver 定义的服务器列表 注意这个http不能丢 pro…

Git 分支设计规范

开篇 这篇文章分享 Git 分支设计规范,目的是提供给研发人员做参考。 规范是死的,人是活的,希望自己定的规范,不要被打脸。 在说 Git 分支规范之前,先说下在系统开发过程中常用的环境。 DEV 环境:用于开发…

数电实验-----实现74LS153芯片扩展为8选1数据选择器以及应用(Quartus II )

目录 一、74LS153芯片介绍 管脚图 功能表 二、4选1选择器扩展为8选1选择器 1.扩展原理 2.电路图连接(Quartus II ) 3.仿真结果 三、8选1选择器的应用 1.三变量表决器 2.奇偶校验电路 一、74LS153芯片介绍 74ls153芯片是属于四选一选择器的芯片。…

系列五、GC垃圾回收【四大垃圾算法-复制算法】

一、堆的内存组成 二、复制算法 2.1、发生位置 复制算法主要发生在新生代,发生在新生代的垃圾回收也被叫做Minor GC。 2.2、 Minor GC的过程 复制>清空》交换 1、eden、from区中的对象复制到to区,年龄1 首先,当eden区满的时候会触发第一…

【数据结构初阶】双链表

双链表 1.双链表的实现1.1结口实现1.2申请结点1.3初始化双链表1.4打印双链表1.5尾插1.6尾删1.7头插1.8头删1.9计算大小1.10查找1.11pos位置插入1.12删除pos位置1.12删除双链表 全部码源 1.双链表的实现 1.1结口实现 #include<stdio.h> #include<stdlib.h> #inclu…

STM32F4系列单片机GPIO概述和寄存器分析

第2章 STM32-GPIO口 2.1 GPIO口概述 通用输入/输出口 2.1.1 GPIO口作用 GPIO是单片机与外界进行数据交流的窗口。 2.1.2 STM32的GPIO口 在51单片机中&#xff0c;IO口&#xff0c;以数字进行分组&#xff08;P0~P3&#xff09;&#xff0c;每一组里面又有8个IO口。 在ST…

AcWing 717. 简单斐波那契

原题链接 题目 以下数列 0 1 1 2 3 5 8 13 21 … 被称为斐波纳契数列。 这个数列从第 3 项开始&#xff0c;每一项都等于前两项之和。 输入一个整数 N &#xff0c;请你输出这个序列的前 N 项。 输入格式 一个整数 N 。 输出格式 在一行中输出斐波那契数列的前 N 项&…

共享内存和信号量的配合机制

进程之间共享内存的机制&#xff0c;有了这个机制&#xff0c;两个进程可以像访问自己内存中的变量一样&#xff0c;访问共享内存的变量。但是同时问题也来了&#xff0c;当两个进程共享内存了&#xff0c;就会存在同时读写的问题&#xff0c;就需要对于共享的内存进行保护&…

快速集成Skywalking 9(Windows系统、JavaAgent、Logback)

目录 一、Skywalking简介二、下载Skywalking服务端三、安装Skywalking服务端3.1 解压安装包3.2 启动Skywalking 四、关于Skywalking服务端更多配置五、Java应用集成skywalking-agent.jar5.1 下载SkyWalking Java Agent5.2 集成JavaAgent5.3 Logback集成Skywalking5.4 集成效果 …

数据库的三范式(Normalization)

数据库的三范式&#xff08;Normalization&#xff09;是关系数据库设计中的基本理论原则&#xff0c;旨在减少数据冗余和提高数据库的数据组织结构。三范式通过将数据分解为更小的表&#xff0c;并通过关系建立连接&#xff0c;使得数据库设计更加灵活、规范和容易维护。在这篇…

C语言——函数的嵌套调用

#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>void new_line() {printf("Hello\n"); }void three_line() {int i0;for(i0;i<3;i){new_line();} }int main() {three_line();return 0; }

FPGA实现双向电平转换

网上搜了一圈&#xff0c;好像没看到的类似的中文资料&#xff0c;不过MicroSemi有个文档AC349上给出了完整的解决方案&#xff0c;还有参考代码。 话不多说&#xff0c;看图&#xff1a; 欲知详情的朋友&#xff0c;请参考 AC349

你听说过“消费多少返利多少的”模式吗?

今天分享一个新的销售套路&#xff0c;看懂套路奋斗节约3年&#xff0c;你听说过“消费多少返利多少的”模式吗&#xff1f; 消费报销模式就是消费者在平台的消费&#xff0c;根据贡献度和活跃度平台去把之前消费的模式&#xff0c;给你返本了甚至还额外给你补贴奖励&#xff…

二阶段提交

二阶段提交 二阶段提交&#xff08;英语&#xff1a;Two-phase Commit&#xff09;是指&#xff0c;为了使基于分布式系统架构下的所有节点在进行事务提交时保持一致性而设计的一种算法(Algorithm)。 二阶段过程 在两阶段提交过程中&#xff0c;主要分为了两种角色协调者&…

【Java】异常处理(一)

&#x1f33a;个人主页&#xff1a;Dawn黎明开始 &#x1f380;系列专栏&#xff1a;Java ⭐每日一句&#xff1a;什么都不做&#xff0c;才会来不及 &#x1f4e2;欢迎大家&#xff1a;关注&#x1f50d;点赞&#x1f44d;评论&#x1f4dd;收藏⭐️ 文章目录 &#x1f4cb;前…

影刀sqlite的插入方法

影刀sqlite的插入方法 变量外面不用加‘’

Linux程序设计(上)

系列文章目录 文章目录 系列文章目录前言一、unix, linux, GNU, POSIXLinux程序 二、shellshell语法1.变量2.语句 函数命令命令的执行dialog工具-- 三、文件操作1. Linux 文件结构2. 系统调用和设备驱动程序3. 库函数4. 底层文件访问5. 标准I/O库6.格式化输入输出7. 文件和目录…

Git 基本操作

目录 创建仓库命令 git init git clone 提交与修改 git add git status git diff git commit git reset git rm git mv git checkout git switch git restore 提交日志 git log git blame 远程操作 git remote git fetch git pull git push Git 的工作就…

URAT串口通信协议

UART是异步串行全双工总线&#xff0c;面向设备和设备之间的连接 配置相关内容 1、串口为串行通讯方式&#xff0c;代表一个时钟周期&#xff0c;只可以收发一位数据 2、115200代表什么&#xff0c;以及115200单位 单位&#xff1a;bps(比特率、二进制/秒) 115200代表&#…