[Java · 初窥门径] Java 语言初识

🌟 想系统化学习 Java 编程?看看这个:[编程基础] Java · 学习手册

0x01:Java · 编程语言简介

Java 是一种高级计算机编程语言,它是由 Sun Microsystems 公司(已被 Oracle 公司收购)于 1995 年 5 月推出的一种可以编写跨平台应用软件、完全面向对象的程序设计语言。

0x0101:Java · 诞生史 — 从机顶盒到改变世界的编程语言

Java 的诞生史要追溯到 1991 年,由 Patrick Naughton 及其伙伴 James Gosling(被誉为 “Java之父” )带领的 Sun 公司的工程师小组想要设计一种小型的计算机语言,主要是面向有线电视转换盒这类的消费设备。

由于这些消费设备的处理能力和内存都很有限,所以要求语言必须非常短小且能够生成非常紧凑的代码。另外,由于不同的厂商会选择不同的中央处理器(CPU),因此这种语言的关键是不能与任何特定的体系结构捆绑在一起。这个项目起初被命名为 “Green”。

为满足消费电子设备的严苛要求,这种新语言必须具备 代码精简、运行高效 的特性,同时实现 跨平台兼容 —— 即同一套代码无需修改即可在不同硬件架构上运行。尽管 Sun 团队拥有深厚的 UNIX系统开发背景,但鉴于 C++ 在 跨平台能力内存管理 上的局限性,他们决定以 C++ 语法为基础进行改良重构。

在 James Gosling 的主导下,新语言初步定名为 Oak(灵感源自其办公室窗外的一棵橡树),意在体现其如同橡树般稳健可靠的特性。然而,当准备对外发布时,团队发现 "Oak" 已被其他编程语言占用,最终更名为 Java —— 这个名字既暗合开发团队对咖啡文化的热爱(Java是印尼著名咖啡产地),又隐喻着新语言能为开发者带来如咖啡般提神的高效编码体验。

0x0102:Java · 发展史 — Java 版本迭代史

Java 语言发展到今天经历了一系列的过程 (同时扫盲一波 Java 8 & Java 1.8)

  • 1991 年:SUN 公司的 Green 项目,Oak 诞生

  • 1995 年:推出 Java 测试版

  • 1996 年:JDK 1.0 — JDK(Java 开发工具包)

  • 1997 年:JDK 1.1

  • 1998 年:JDK 1.2,大大改进了早期版本缺陷,是一个革命性的版本,更名为 Java2

  • 2004 年:J2SE 5.0(1.5.0)Tiger 老虎称为 Java 语言发展史上的又一里程碑,为了表示该版本的重要性,J2SE 1.5 更名为 Java SE 5.0

  • 2005 年:Java 的各种版本进行更名,以取消其中的数字 “2”,J2ME 更名为 Java ME,J2SE 更名为 Java SE,J2EE 更名为 Java EE。

  • 2006 年:Java SE 6.0(1.6.0)

  • 2009 年:甲骨文(Oracle)收购 SUN,交易额高达 74 亿

  • 2011 年:JavaSE 7.0(1.7.0)

  • 2014 年:JavaSE 8.0(1.8.0) - 长期支持

  • 2017 年:Java 9.0

  • 2018 年 3 月:Java 10

  • 2018 年 9 月:Java 11 - 长期支持

  • 2019 年 3 月:Java 12

  • 2019 年 9 月:Java 13

  • 2020 年 3 月:Java 14

  • 2020 年 9 月:Java 15

  • 2021 年 3 月:Java 16

  • 2021 年 9 月:Java 17 - 长期支持

  • 2022 年 3 月:Java 18

  • 2022 年 9 月:Java 19

  • 2023 年 3 月:Java 20

  • 2023 年 9 月:Java 21,9 月 19 日,以六个月为更新频次的 Java 正式发布了最新的长期支持版本 — Java 21,这一版本将获得官方 5 年的重要支持,这意味着对于开发者、企业而言,如果想要用上稳定而前沿的 Java,JDK 21 无疑是最好的选择。

  • 2024 年 3 月:Java 22


Java · 知识扫盲:

Java 1.8 & Java 8 Java 1.8.0 & Java 8 其实是一样的 😂。得益于 Java 神奇的版本迭代机制,搞乱了一堆初学者。

Java · 学习建议:关于 Java 学习版本的选择

从 Java 的版本迭代史可以看出来,Java 的版本更新非常的快。对于我们初学者而言,笔者建议学习那些长期支持的版本,比如 8、11、17、21 版本。另外,对于语言的学习我们一开始并不推荐追求最新版,有以下几点考量:

  1. 编程语言的基础语法很难改动 => 学了低版本的基础语法你到高版本仅仅是换个版本的事情。

  2. 新版本生态环境尚未搭建 => 新版本刚推出,参考资料比较少,除了 Bug 很难排查。

0x0103:Java · 体系结构 — SE & EE & ME

针对不同开发市场,Sun 公司将 Java 划分为 3 个技术平台(体系结构):

  • Java SE(Java Standard Edition):标准版,定位在个人计算机上使用

  • Java EE(Java Enterprise Edition):企业版,定位在服务器端的应用

  • Java ME(Java Micro Edition):微型版,定位在消费性电子产品的应用上

1. Java SE — 标准版 Java 技术平台

适用场景: 开发普通桌面和商务应用程序

这个版本是 Java 平台的核心,它提供了非常丰富的 API 来开发一般个人计算机上的应用程序,包括用户界面接口 AWT 及 Swing,网络功能和国际化、图像处理高能力以及输入输出支持等。

在上个实际 90 年代末互联网上大放异彩的 Applet 也属于这个版本。Applet 后来被 Flash 取代,而 Flash 现在也被 HTML5 取代了。

2. Java EE — 企业版 Java 技术平台

适用场景: 开发企业级应用程序

JavaEE 是 JavaSE 的扩展,增加了用于服务器开发的类库。如:JDBC 让程序员能直接在 Java 内使用SQL 的 语法来访问数据库内的数据;Servlet 能够延伸服务器的功能,通过 请求-响应 的模式来处理客户端的请求;JSP 是一种可以将 Java 程序代码内嵌在网页内的技术。

3. Java ME — 微型版 Java 技术平台

适用场景: 开发电子消费产品和嵌入式设备

JavaME 是 JavaSE 的内伸,包含 J2SE 的一部分核心类,也有自己的扩展类,增加了适合微小装置的类库:javax.microedition.io.* 等。该版本针对资源有限的电子消费产品的需求精简核心类库,并提供了模块化的架构让不同类型产品能够随时增加支持的能力。

0x0104:Java · 语言特性

笔者备注:没有最牛逼的语言,只有最适合的语言 !!

下面是 Java 的特性与优势,简而言之,Java 牛逼!!!

  • 跨平台/可移植性: Java 通过 JVM(Java Virtual Machine,Java 虚拟机)以及字节码实现跨平台性。Java 程序由 Javac 编译器编译为字节码文件(.class文件),JVM 中的 Java 解释器会将字节码文件翻译成所在平台上的机器码文件,执行对应的机器码文件就可以了。Java 程序只要一次编写,就可到处运行。

  • 安全性:

    • Java 的存储分配模型可以防御恶意代码攻击。

    • Java 没有指针,外界不能通过伪造指针操作存储器。

    • Java 编译器在编译程序时不显示存储安排策略,程序员不能通过查看声明猜测出类的实际存储安排。

    • Java 程序的存储是在程序运行时由 Java 解释程序决定的。

  • 面向对象: 面向对象是一种程序设计技术,非常适合大型软件的设计与开发。由于 C++ 为了照顾大量 C 语言使用者而兼容了 C,使得自身仅仅成为了带类的 C 语言,多少影响了其面向对象的彻底性!而 Java 是完全的面向对象的语言。

  • 简单性: Java 使用引用代替指针,并提供了自动垃圾回收机制,使程序员不必担心内存管理。

  • 高性能: Java 最初发展阶段,总是被人诟病 ”性能低“;客观上,高级语言运行效率总是低于级语言的,这个无法避免。Java 语言本身发展中通过虚拟机的优化提升了几十倍的运行效率。比如,通过 JIT(JUST IN TIME)即时编译技术提高运行效率。将一些 ”热点“ 字节码编译成本地机器码,并将结果缓存起来,在需要的时候重新调用。这样的话,使 Java 程序的执行效率大大提高,某些代码甚至接近 C++ 的效率。

  • 分布性: Java是为 Internet 的分布式环境设计的,因为它能够处理 TCP/IP 协议。事实上,通过URL 访问一个网络资源和访问本地文件是一样简单的。Java 还支持远程方法调用(RMI,Remote Method Invocation),使程序能够通过网络调用方法。

  • 多线程: 多线程的使用可以带来更好的交互响应和实时行为。 Java 多线程的简单性是 Java 成为主流服务器端开发语言的主要原因之一。

上面虽然罗列了 Java 这么多的好,但是并不是说它就是万能的,每种语言都有自己适合的赛道,没有最好,只有最适合。一个简单的例子,C 的性能很好,但是语法复杂。Python 性能比 C 慢多了,但它学起来 Easy,所以 Python 对小白来说肯定优于 C。

0x02:Java · 学习它的意义?

我们学习一门语言,不应为是为了学而学,而应该知道,我为啥要学它?学了它之后我能干什么?目前市场上主流的开发有以下几类,Java 都可以做,但是咱们讲究一个合适:

  • 桌面应用开发: Java 是能写桌面程序的,但目前桌面 C# 比较流行。

  • 企业级应用开发: 微服务、大型互联网应用。(主流)

  • 移动应用开发: 目前安卓、鸿蒙这些比较火,但 Java 也可以做。

  • 服务器系统: 各种应用的后台。(主流)

  • 大数据开发: hadoop。(主流)

  • 游戏开发: 能做,但不是主流。

0x03:Java · 核心机制 — 垃圾回收(了解)

这部分是提升阶段,如果你之前学过其它的编程语言,那么对 Java 的这个机制会了解的比较深刻。对于小白而言,了解即可(应对应对面试)。


”垃圾回收“ 机制是 Java 的一个核心机制,这里的 ”垃圾回收“ 是指 清除不再使用的对象。Java 中有一个系统级的垃圾收集器,我们管它叫 Garbage Collection - GC

每当一个对象被创建,GC 就会盯着这个对象,看它啥时候不用,一旦它后续没人用了,GC 就自动给它干掉了。不像 C++,扫垃圾还得自己动手写程序。

自动是挺好的,但是因为自动,所以程序员是无法对其进行精确控制和干预的。

0x04:Java · 核心机制 — 跨平台原理(掌握)

跨平台 泛指程序语言、软件或硬件设备可以在多种作业系统或不同硬件架构的电脑上运作。

Java 通过 JVM(Java Virtual Machine,Java 虚拟机)以及字节码实现跨平台性。

Java 程序由 Javac 编译器编译为字节码文件(.class文件),JVM 中的 Java 解释器会将字节码文件翻译成所在平台上的机器码文件,并执行对应的机器码文件。所以 Java 程序只要一次编写,就可到处运行(要运行的机器上安装对应平台的 JVM 即可):

上面提到的那么多工具(javacjava.exeJVM),你只需要安装一个 JDK,就全部都有了。

JDK(Java Development Kit,Java 开发工具包)是 Oracle 官方提供的 Java 核心开发套件,包含开发、编译、调试和运行 Java 程序所需的所有工具和库,它是 Java 开发者必须安装的基础环境(从下一章开始我们就要配置 JDK 了)。

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

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

相关文章

1187. 【动态规划】竞赛总分

题目描述 学生在我们USACO的竞赛中的得分越多我们越高兴。我们试着设计我们的竞赛以便人们能尽可能的多得分。 现在要进行一次竞赛,总时间T固定,有若干类型可选择的题目,每种类型题目可选入的数量不限,每种类型题目有一个si(解答…

使用KeilAssistant代替keil的UI界面

目录 一、keil Assistant的优势和缺点 二、使用方法 (1)配置keil的路径 (2)导入并使用工程 (3)默认使用keil自带的ARM编译器而非GUN工具链 一、keil Assistant的优势和缺点 在日常学…

【React】通过 fetch 发起请求,设置 proxy 处理跨域

fetch 基本使用跨域处理 fetch 基本使用 在node使用原生ajax发请求:XMLHttpRequest()1.获取xhr对象 2.注册回调函数 3.设置参数,请求头 4.发起连接原生ajax没有带异步处理 promise;原生ajax封装一下,以便重复调用jQuery&#…

Redis(二) - Redis命令详解

文章目录 前言一、启动Redis并进入客户端1. 启动Redis2. 进入Redis客户端3. 使用IDEA连接Redis 二、查看命令帮助信息1. 查看所有命令2. 查看指定命令帮助 三、键操作命令1. set命令2. mset命令3. keys命令4. get命令5. mget命令6. dump命令7. exists命令8. type命令9. rename命…

【Qt】初识Qt(二)

目录 一、显示hello world1.1 图形化界面1.2 写代码 二、对象树三、使用输入框显示hello world四、使用按钮显示hello world 一、显示hello world 有两种方式实现hello world: 通过图形化界面,在界面上创建出一个控件,显示hello world通过写…

空调制冷量和功率有什么关系?

空调的制冷量和功率是衡量空调性能的两个核心参数,二者既有区别又紧密相关,以下是具体解析: 1. 基本定义 制冷量(Cooling Capacity)指空调在单位时间内从室内环境中移除的热量,单位为 瓦特(W) 或 千卡/小时(kcal/h)。它直接反映空调的制冷能力,数值越大,制冷效果越…

【prometheus+Grafana篇】Prometheus与Grafana:深入了解监控架构与数据可视化分析平台

💫《博主主页》:奈斯DB-CSDN博客 🔥《擅长领域》:擅长阿里云AnalyticDB for MySQL(分布式数据仓库)、Oracle、MySQL、Linux、prometheus监控;并对SQLserver、NoSQL(MongoDB)有了解 💖如果觉得文章对你有所帮…

基于n8n的AI应用工作流原理与技术解析

基于n8n的AI应用工作流原理与技术解析 在AI技术深度融入企业数字化转型的今天,开源工作流自动化工具n8n凭借其灵活的架构和强大的集成能力,成为构建智能自动化流程的核心引擎。本文将从技术原理、AI融合机制、典型应用场景三个维度,解析n8n在…

经济指标学习(二)

系列文章目录 文章目录 系列文章目录1、市净率**一、定义与计算****二、核心意义****三、应用场景****四、局限性****五、分类与衍生指标****总结** 2、市销率**一、定义与计算****二、核心意义****三、优缺点分析****四、适用场景****五、与其他指标的对比****六、实际应用案例…

大语言模型减少幻觉的常见方案

什么是大语言模型的幻觉 大语言模型的幻觉(Hallucination)是指模型在生成文本时,输出与输入无关、不符合事实、逻辑错误或完全虚构的内容。这种现象主要源于模型基于概率生成文本的本质,其目标是生成语法合理、上下文连贯的文本&…

CSS 美化页面(四)

一、浮动float属性 ‌属性值‌‌描述‌‌适用场景‌left元素向左浮动,腾出右侧空间供其他元素使用,其他内容会围绕在其右侧‌。横向排列元素(如导航菜单)、图文混排布局‌。right元素向右浮动,腾出左侧空间供其他元素使…

如何将 .txt 文件转换成 .md 文件

一、因为有些软件上传文件的时候需要 .md 文件,首先在文件所在的目录中,点击“查看”,然后勾选上“文件扩展名”,这个时候该目录下的所有文件都会显示其文件类型了。 二、这时直接对目标的 .txt 文件进行重命名,把后缀…

C++ 迭代器失效详解:如何避免 vector 操作中的陷阱

目录 1. 什么是迭代器失效? 2. 哪些操作会导致迭代器失效? 2.1 vector 的插入操作(push_back, insert) 示例:push_back 导致迭代器失效 如何避免? 2.2 vector 的删除操作(erase, pop_back&…

(EtherCAT 转 EtherNet/IP)EtherCAT/Ethernet/IP/Profinet/ModbusTCP协议互转工业串口网关

型号 协议转换通信网关 EtherCAT 转 EtherNet/IP MS-GW12 概述 MS-GW12 是 EtherCAT 和 EtherNet/IP 协议转换网关,为用户提供两种不同通讯协议的 PLC 进行数据交互的解决方案,可以轻松容易将 EtherNet/IP 网络接入 EtherCAT 网络中,方便…

榕壹云酒水定制系统:基于THinKPHP+MySQL+UniApp打造数字化时代的个性化购酒新体验

数字化浪潮下的酒水定制新机遇 在消费升级与个性化需求崛起的背景下,传统酒水行业正面临数字化转型的迫切需求。为此,我们团队基于ThinkPHPMySQLUniApp技术栈,开发了一套榕壹云酒水定制系统,旨在通过数字化手段解决消费者个性化购…

GR00T N1:面向通用类人机器人的开放基础模型

摘要 通用型机器人需要具备多功能的身体和智能的大脑。近年来,类人机器人的发展在构建人类世界中的通用自主性硬件平台方面展现出巨大潜力。一个经过大量多样化数据源训练的机器人基础模型,对于使机器人能够推理新情况、稳健处理现实世界的多变性以及快…

WebRTC实时通话EasyRTC嵌入式音视频通信SDK,构建智慧医疗远程会诊高效方案

一、方案背景 当前医疗领域,医疗资源分布不均问题尤为突出,大城市和发达地区优质医疗资源集中,偏远地区医疗设施陈旧、人才稀缺,患者难以获得高质量的医疗服务,制约医疗事业均衡发展。 EasyRTC技术基于WebRTC等先进技…

深入理解主成分分析(PCA):原理、算法与应用

内容摘要 本文深入剖析主成分分析(PCA)技术。介绍其通过正交变换简化数据维度的核心原理,详细推导基于最小投影距离和最大投影方差的算法过程,总结算法流程步骤。全面分析PCA的优缺点,并对比其与KPCA的差异。同时阐述…

uniapp-商城-25-顶部模块高度计算

计算高度: 使用computed进行顶部模块的计算。 总高度:bartotalHeight log 介绍--收款码这一条目 也就是上一章节的title的高度计算 bodybarheight。 在该组件中: js部分的代码: 包含了导出的名字: shop-head…

【MCP】第一篇:MCP协议深度解析——大模型时代的“神经连接层“架构揭秘

【MCP】第一篇:MCP协议深度解析——大模型时代的"神经连接层"架构揭秘 一、什么是MCP?二、为什么需要MCP?三、MCP的架构四、MCP与AI交互的原理4.1 ReAct(Reasoning Acting)模式4.2 Function Calling 模式 五…