当前位置: 首页 > news >正文

[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.xdnf.cn/news/24211.html

相关文章:

  • C++动态分配内存知识点!
  • 锁(Mutex)、信号量(Semaphore)与条件量(Condition Variable)
  • 网络编程2
  • 第八周作业
  • alertManager部署安装、告警规则配置详解及告警消息推送
  • 工厂方法模式详解及在自动驾驶场景代码示例(c++代码实现)
  • Linux根据 PID 进行性能分析
  • 三格电子——PROFIBUS DP设备长距离传输和干扰问题解决办法
  • ffprobe 输出 HEVC 码流 Level:标准的 “错位” 与分析的 “归位”
  • javaweb-servlet-继承关系以及service方法、servlet生命周期
  • LabelImg打标工具的下载和使用——YOLO格式篇
  • open CasCade下载
  • RVOS的任务调度优化
  • OJ笔试强训_1至24天
  • `peft`(Parameter-Efficient Fine-Tuning:高效微调)是什么
  • 接口测试的原则、用例与流程
  • Git学习之路(Updating)
  • 《软件设计师》复习笔记(11.3)——需求获取、分析、定义、验证、管理
  • 欧拉系统升级openssh 9.7p1
  • 【AI】实现中文文章摘要的AI模型
  • 【失败】Gnome将默认终端设置为 Kitty
  • 如何在Linux系统中部署C++ Web应用
  • Sa-Token使用指南
  • 1 Celery 简介
  • cpolar 内网穿透 实现公网可以访问本机
  • top100 (6-10)
  • 字符串循环拼接,不能用 + 连接, 需要用 StringBuilder 代替
  • 全球唯一电解方式除湿器 / 加湿器 RS1 ROSAHL 微型 易安装
  • Logisim数字逻辑实训——寄存器设计与应用
  • 稳态模型下的异步电机调速【运动控制系统】