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

news2025/5/14 5:31:34

🌟 想系统化学习 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.coloradmin.cn/o/2338160.html

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

相关文章

【SQL Server】数据探查工具1.0研发可行性方案

👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 想抢先解锁数据自由的宝子,速速戳我!评论区蹲一波 “蹲蹲”,揪人唠唠你的超实用需求! 【SQL Server】数据探查工具1.0研发可行性方案…

谓词——C++

1.一元谓词 1.定义 2.案例 查找容器有没有大于五的数字 #include<stdio.h> using namespace std; #include<string> #include<vector> #include<set> #include <iostream> class myfind { public:bool operator()(int a){return a > 5;} …

『前端样式分享』联系我们卡片式布局 自适应屏幕 hover动效 在wikijs中使用 (代码拿来即用)

目录 预览效果分析要点响应式网格布局卡片样式&#xff1a;阴影和过渡效果 代码优化希望 长短不一的邮箱地址在左右居中的同时,做到左侧文字对齐(wikijs可用)总结 欢迎关注 『前端布局样式』 专栏&#xff0c;持续更新中 欢迎关注 『前端布局样式』 专栏&#xff0c;持续更新中…

MySQL 缓存机制全解析:从磁盘 I/O 到性能优化

MySQL 缓存机制全解析&#xff1a;从磁盘 I/O 到性能优化 MySQL 的缓存机制是提升数据库性能的关键部分&#xff0c;它通过多级缓存减少磁盘 I/O 和计算开销&#xff0c;从而提高查询和写入的效率。 1. 为什么需要缓存&#xff1f; 数据库的性能瓶颈通常集中在磁盘 I/O 上。…

1.1 设置电脑开机自动用户登录exe开机自动启动

本文介绍两个事情&#xff1a; 1.Windows如何开机自动登录系统&#xff08;不用输密码) 2. 应用程序(.exe)如何开机自动启动 详细解释如下&#xff1a; 一、Windows如何开机自动登录系统&#xff08;不用输密码) 设备上的工控机&#xff0c;如果开机后都需要操作人员输入密码&…

基于 Python 和 OpenCV 技术的疲劳驾驶检测系统(2.0 全新升级,附源码)

大家好&#xff0c;我是徐师兄&#xff0c;一个有着7年大厂经验的程序员&#xff0c;也是一名热衷于分享干货的技术爱好者。平时我在 CSDN、掘金、华为云、阿里云和 InfoQ 等平台分享我的心得体会。 &#x1f345;文末获取源码联系&#x1f345; 2025年最全的计算机软件毕业设计…

OpenAI重返巅峰:o3与o4-mini引领AI推理新时代

引言 2025年4月16日&#xff0c;OpenAI发布了全新的o系列推理模型&#xff1a;o3和o4-mini&#xff0c;这两款模型被官方称为“迎今为止最智能、最强大的大语言模型&#xff08;LLM&#xff09;”。它们不仅在AI推理能力上实现了质的飞跃&#xff0c;更首次具备了全面的工具使…

Unity3d 6(6000.*.*)版本国区下载安装参考

前言 Unity3d 6.是最新的版本&#xff0c;是与来自世界各地的开发者合作构建、测试和优化的成果&#xff0c;现在可以完全投入生产&#xff0c;是我们迄今为止性能最出色、最稳定的 Unity 版本。Unity 6 有许多令人兴奋的新工具和功能&#xff1a;端到端多人游戏工作流程将加速…

第 3 期:逆过程建模与神经网络的作用(Reverse Process)

一、从正向扩散到逆向去噪&#xff1a;生成的本质 在上期中我们讲到&#xff0c;正向扩散是一个逐步加入噪声的过程&#xff0c;从原始图像 x_0到接近高斯分布的 x_T​&#xff1a; 而我们真正关心的&#xff0c;是从纯噪声中逐步还原原图的过程&#xff0c;也就是逆过程&…

健康养生:开启活力生活新篇章

在当代社会&#xff0c;熬夜加班、久坐不动、外卖快餐成为许多人的生活常态&#xff0c;随之而来的是各种亚健康问题。想要摆脱身体的疲惫与不适&#xff0c;健康养生迫在眉睫&#xff0c;它是重获活力、拥抱美好生活的关键。​ 应对不良饮食习惯带来的健康隐患&#xff0c;饮…

记录学习的第二十九天

还是力扣每日一题。 本来想着像昨天一样两个循环搞定的&#xff0c;就下面&#x1f447;&#x1f3fb; 不过&#xff0c;结果肯定是超时啦&#xff0c;中等题是吧。 正确答案是上面的。 之后就做了ls题单第一部分&#xff0c;首先是定长滑窗问题 这种题都是有套路的&#xff0…

Express学习笔记(六)——前后端的身份认证

目录 1. Web 开发模式 1.1 服务端渲染的 Web 开发模式 1.2 服务端渲染的优缺点 1.3 前后端分离的 Web 开发模式 1.4 前后端分离的优缺点 1.5 如何选择 Web 开发模式 2. 身份认证 2.1 什么是身份认证 2.2 为什么需要身份认证 2.3 不同开发模式下的身份认证 3. Sessio…

leetcode 309. Best Time to Buy and Sell Stock with Cooldown

目录 题目描述 第一步&#xff0c;明确并理解dp数组及下标的含义 第二步&#xff0c;分析并理解递推公式 1.求dp[i][0] 2.求dp[i][1] 3.求dp[i][2] 第三步&#xff0c;理解dp数组如何初始化 第四步&#xff0c;理解遍历顺序 代码 题目描述 这道题与第122题的区别就是卖…

优化自旋锁的实现

在《C11实现一个自旋锁》介绍了分别使用TAS和CAS算法实现自旋锁的方案&#xff0c;以及它们的优缺点。TAS算法虽然实现简单&#xff0c;但是因为每次自旋时都要导致一场内存总线流量风暴&#xff0c;对全局系统影响很大&#xff0c;一般都要对它进行优化&#xff0c;以降低对全…

SS25001-多路复用开关板

1 概述 1.1 简介 多路复用开关板是使用信号继电器实现2线制的多路复用开关板卡&#xff1b;多路复用开关是一种可以将一个输入连接到多个输出或一个输出连接到多个输入的拓扑结构。这种拓扑通常用于扫描&#xff0c;适合将一系列通道自动连接到公共线路的的设备。多路复用开…

【AI News | 20250418】每日AI进展

AI Repos 1、exa-mcp-server AI助手通过Exa获得实时网络信息获取的能力&#xff0c;提供结构化的搜索结果&#xff0c;返回包括标题、URL以及内容片段在内的结构化结果&#xff1b;会把最近的搜索结果缓存为资源&#xff0c;下次再搜索相同的内容时可以直接使用缓存&#xff1…

Dify LLM大模型参数(一)

深入了解大语言模型&#xff08;LLM&#xff09;的参数设置 模型的参数对模型的输出效果有着至关重要的影响。不同的模型会拥有不同的参数&#xff0c;而这些参数的设置将直接影响模型的生成结果。以下是 DeepSeek 模型参数的详细介绍&#xff1a; 温度&#xff08;Tempera…

展示数据可视化的魅力,如何通过图表、动画等形式让数据说话

在当今信息爆炸的时代&#xff0c;数据的量级和复杂性不断增加。如何从海量数据中提取有价值的信息&#xff0c;并将其有效地传达给用户&#xff0c;成为了一个重要的课题。数据可视化作为一种将复杂数据转化为直观图形、图表和动画的技术&#xff0c;能够帮助用户快速理解数据…

时序预测 | Matlab实现基于VMD-WOA-ELM和VMD-ELM变分模态分解结合鲸鱼算法优化极限学习机时间序列预测

时序预测 | Matlab实现基于VMD-WOA-ELM和VMD-ELM变分模态分解结合鲸鱼算法优化极限学习机时间序列预测 目录 时序预测 | Matlab实现基于VMD-WOA-ELM和VMD-ELM变分模态分解结合鲸鱼算法优化极限学习机时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.Matlab…

基于EasyX库开发的球球大作战游戏

目录 球球大作战 一、开发环境 二、流程图预览 三、代码逻辑 1、初始化时间 2、设置开始界面大小 3、设置开始界面 4、让玩家选择速度 5、设置玩家小球、人机小球、食物的属性 6、一次性把图绘制到界面里 7、进入死循环 8、移动玩家小球 9、移动人机 10、食物刷新…