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.hqwc.cn/news/195101.html

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

相关文章

吾爱破解置顶的“太极”,太好用了吧!

日常工作和娱乐,都需要用到不同类型的软件,哪怕软件体积不大,也必须安装,否则到用时找不到就非常麻烦了。 其实,很多软件不一定一样不剩地全部安装一遍,一方面原因是用的不多,另一方面多少有点…

spring常见面试题总结

1、spring是什么 Spring:是一个轻量级的IOC和AOP的java开发框架,为了简化企业级开发而生。核心就是控制反转和面向切面编程。 IOC:控制反转(Inverse of Control),以前项目都是在哪儿用到对象 在哪儿new&a…

【算法基础】动态规划

背包问题 01背包 每个物品只能放一次 2. 01背包问题 - AcWing题库 二维dp #include<bits/stdc.h> const int N1010; int f[N][N]; int v[N],w[N]; signed main() {int n,m;std::cin>>n>>m; for(int i1;i<n;i) std::cin>>v[i]>>w[i];for…

8.1 Windows驱动开发:内核文件读写系列函数

在应用层下的文件操作只需要调用微软应用层下的API函数及C库标准函数即可&#xff0c;而如果在内核中读写文件则应用层的API显然是无法被使用的&#xff0c;内核层需要使用内核专有API&#xff0c;某些应用层下的API只需要增加Zw开头即可在内核中使用&#xff0c;例如本章要讲解…

读书笔记--从一到无穷大的关键金句和阅读感悟

借着休假&#xff0c;重新研读了十多年前读过的乔治.伽莫夫所著图书《从一到无穷大--ONE TWO THREE...INFINITY》&#xff0c;该书作为20世纪最经典的科普类图书之一&#xff0c;当时读的懵懵懂懂&#xff0c;现在重新阅读又有了不同的感受&#xff0c;再结合过去的科研工作&am…

【win32_000】视频截图

PPT 编译器不会自己添加unicode定义 v 函数 WinMain int __clrcall WinMain([in] HINSTANCE hInstance ,//应用程序的当前实例的句柄。[in, optional] HINSTANCE hPrevInstance ,//应用程序上一个实例的句柄。 此参数始终为 NULL。[in] …

华为流量统计的2种配置方法

第一种就是用实打实的配置去设置&#xff0c;配置比较复杂 比如华为防火墙流量统计&#xff1a; acl 3000 rule permit ip source 192.168.0.1 0.0.0.0 dest 10.0.0.1 0.0.0.0 diagnose firewall statistic acl 3000 enable dis firewall statistics acl //流量查看 另一种最…

Vulhub靶场-KIOPTRIX: LEVEL 1.1

目录 环境配置 端口扫描 漏送发现 漏送利用 提权&#xff08;内核漏洞提权&#xff09; 环境配置 环境配置的过程同主页该专栏第一个靶场&#xff0c;不在赘述。 端口扫描 首先通过arp-scan并根据靶机的mac地址确定靶机的IP地址 然后对靶机进行一个扫描 首先扫描到OpenS…

2.如何使用Python官方文档

文章目录 1.文档什么时候用2.Python 3.11有什么新的功能3.Python 3.11教程4.Python 标准库概述内置函数内置类型内置异常文本处理服务 1.文档什么时候用 一般是在接触到一门新的语言的时候&#xff0c;是要详细阅读的&#xff0c;因为很多在开发的时候踩的这些坑在文档里已经提…

windows pgsql 数据库 数据目录更改

一.先停止postgres服务 cmd命令 services.msc找到服务停止 二.修改注册表 cmd命令 regedit找到路径 \HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\postgresql-x64-13 将“&#xff0d;D”后的目录名修改为新的数据目录位置即可&#xff0c;如果目录路径中含有…

VMware——WindowServer2012R2安装jdk1.8及环境变量配置

一、安装 双击【jdk-8u161-windows-x64.exe】程序包&#xff0c;弹出窗口点击【下一步】&#xff0c;如下图&#xff1a; 指定安装目录为【Java\jdk1.8.0_161】&#xff0c;磁盘目录自定义&#xff0c;如下图&#xff1a; 点击【下一步】一直到有个【更改】按钮&#xff0c;可…

穿越风波,“长红”的直播电商依然扎根产业和消费者

当消费者将最后一个快递拿进家门&#xff0c;2023年的双11也就落下了帷幕。相较于往年组队、拼单的玩法&#xff0c;如今最受欢迎的双11 流程&#xff0c;或许已经变成点进自己心仪主播、店铺的直播间&#xff0c;翻阅最新的产品清单&#xff0c;从中选择购物目标&#xff0c;在…