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

什么是Java以及Java的发展历程

Java是什么

搜索百度百科词条

Java是一门面向对象的编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程 。
Java具有简单性、面向对象、分布式、健壮性、安全性、平台独立与可移植性、多线程、动态性等特点 。
Java可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式系统应用程序等

Java作为一门编程语言,吸收了C++语言的有点,同时拥有功能强大和易用,才使得Java的应用比较广泛;那么我们得了解一下Java语言诞生的过程

Java的发展历史(摘自Java发展史)

  • 1996年1月,Sun公司发布了Java的第一个开发工具包(JDK 1.0),这是Java发展历程中的重要里程碑,标志着Java成为一种独立的开发工具。9月,约8.3万个网页应用了Java技术来制作。10月,Sun公司发布了Java平台的第一个即时(JIT)编译器。
  • 1997年2月,JDK 1.1面世,在随后的3周时间里,达到了22万次的下载量。4月2日,Java One会议召开,参会者逾一万人,创当时全球同类会议规模之纪录。9月,Java Developer Connection社区成员超过10万。
  • 1998年12月8日,第二代Java平台的企业版J2EE发布。
  • 1999年6月,Sun公司发布了第二代Java平台(简称为Java2)的3个版本:J2ME(Java2 Micro Edition,Java2平台的微型版),应用于移动、无线及有限资源的环境;J2SE(Java 2 Standard Edition,Java 2平台的标准版),应用于桌面环境;J2EE(Java 2Enterprise Edition,Java 2平台的企业版),应用于基于Java的应用服务器。Java 2平台的发布,是Java发展过程中最重要的一个里程碑,标志着Java的应用开始普及。
  • 1999年4月27日,HotSpot虚拟机发布。HotSpot虚拟机发布时是作为JDK 1.2的附加程序提供的,后来它成为了JDK 1.3及之后所有版本的Sun JDK的默认虚拟机 。
  • 2000年5月,JDK1.3、JDK1.4和J2SE1.3相继发布,几周后其获得了Apple公司Mac OS X的工业标准的支持。
  • 2001年9月24日,J2EE1.3发布。
  • 2002年2月26日,J2SE1.4发布。自此Java的计算能力有了大幅提升,与J2SE1.3相比,其多了近62%的类和接口。在这些新特性当中,还提供了广泛的XML支持、安全套接字(Socket)支持(通过SSL与TLS协议)、全新的I/OAPI、正则表达式、日志与断言。
  • 2004年9月30日,J2SE1.5发布,成为Java语言发展史上的又一里程碑。为了表示该版本的重要性,J2SE 1.5更名为Java SE 5.0(内部版本号1.5.0),代号为“Tiger”,Tiger包含了从1996年发布1.0版本以来的最重大的更新,其中包括泛型支持、基本类型的自动装箱、改进的循环、枚举类型、格式化I/O及可变参数。
  • 2005年6月,在Java One大会上,Sun公司发布了Java SE 6。此时,Java的各种版本已经更名,已取消其中的数字2,如J2EE更名为JavaEE,J2SE更名为JavaSE,J2ME更名为JavaME。
  • 2006年11月13日,Java技术的发明者Sun公司宣布,将Java技术作为免费软件对外发布。Sun公司正式发布的有关Java平台标准版的第一批源代码,以及Java迷你版的可执行源代码。从2007年3月起,全世界所有的开发人员均可对Java源代码进行修改。
  • 2009年,甲骨文公司宣布收购Sun 。
  • 2010年,Java编程语言的共同创始人之一詹姆斯·高斯林从Oracle公司辞职。
  • 2011年,甲骨文公司举行了全球性的活动,以庆祝Java7的推出,随后Java7正式发布。
  • 2014年,甲骨文公司发布了Java8正式版。

因为上面文章只更新到了 2014 年 Java8 截止,但是到目前为止 Java已经更新到 20 了,所以,去官网上看看learn Java,如图所示,从Java8到Java9经历了3年,后续的版本都是6个月一个迭代

Java-release_cadence_21.png

上面的图,是从官网的新特性中找到的,如下:


Java新特性.png

Java Platform Evolution

文中主要介绍了
2014 年,Java带来了 Lambda expressions、Stream API、Optional等,使得Java8成为最受欢迎的版本,但是,也建议我们使用高版本的Java,因为有很多其他的新特性

Java的更新

Java8后,每年的更新情况,可以参考 Project Amber
Java10后,每个版本的更新也可以参考,如下连接,(修改指定的jdk版本,下面是10)

https://openjdk.org/projects/jdk/10/

也可以看JavaGuide的总结
https://javaguide.cn/java/new-features/java9.html

JEP 222: Java 命令行工具open in new window
JEP 261: 模块化系统open in new window
JEP 248:G1 成为默认垃圾回收器open in new window
JEP 193: 变量句柄open in new window
JEP 254:字符串存储结构优化open in new window

https://javaguide.cn/java/new-features/java10.html

JEP 286:局部变量类型推断open in new window
JEP 304:垃圾回收器接口open in new window
JEP 307:G1 并行 Full GCopen in new window
JEP 310:应用程序类数据共享(扩展 CDS 功能)open in new window
JEP 317:实验性的基于 Java 的 JIT 编译器open in new window

https://javaguide.cn/java/new-features/java11.html

JEP 321:HTTP Client 标准化open in new window
JEP 333:ZGC(可伸缩低延迟垃圾收集器)open in new window
JEP 323:Lambda 参数的局部变量语法open in new window
JEP 330:启动单文件源代码程序open in new window

https://javaguide.cn/java/new-features/java12-13.html
https://javaguide.cn/java/new-features/java14-15.html
https://javaguide.cn/java/new-features/java16.html
https://javaguide.cn/java/new-features/java17.html

JEP 306:Restore Always-Strict Floating-Point Semantics(恢复始终严格的浮点语义)open in new window
JEP 356:Enhanced Pseudo-Random Number Generators(增强的伪随机数生成器)open in new window
JEP 382:New macOS Rendering Pipeline(新的 macOS 渲染管道)open in new window
JEP 391:macOS/AArch64 Port(支持 macOS AArch64)open in new window
JEP 398:Deprecate the Applet API for Removal(删除已弃用的 Applet API)open in new window
JEP 403:Strongly Encapsulate JDK Internals(更强大的封装 JDK 内部元素)open in new window
JEP 406:Pattern Matching for switch (switch 的类型匹配)open in new window(预览)
JEP 407:Remove RMI Activation(删除远程方法调用激活机制)open in new window
JEP 409:Sealed Classes(密封类)open in new window(转正)
JEP 410:Remove the Experimental AOT and JIT Compiler(删除实验性的 AOT 和 JIT 编译器)open in new window
JEP 411:Deprecate the Security Manager for Removal(弃用安全管理器以进行删除)open in new window
JEP 412:Foreign Function & Memory API (外部函数和内存 API)open in new window(孵化)
JEP 414:Vector(向量) API open in new window(第二次孵化)
JEP 415:Context-Specific Deserialization Filters

https://javaguide.cn/java/new-features/java18.html
https://javaguide.cn/java/new-features/java19.html
https://javaguide.cn/java/new-features/java20.html

到目前为止,更新的版本号为20,其中除了 Java8,Java11Java17 都是两个长期支持的版本,也比较重要

jdk版本支持图.png

Java语言的特点

  1. 面向对象
    Java 是一种面向对象的语言,它对对象中的类、对象、继承、封装、多态、接口、包等均有很好的支持。为了简单起见,Java 只支持类之间的单继承,但是可以使用接口来实现多继承。使用 Java 语言开发程序,需要采用面向对象的思想设计程序和编写代码。

  2. 平台无关性
    平台无关性的具体表现在于,Java 是“一次编写,到处运行(Write Once,Run any Where)”的语言,因此采用 Java 语言编写的程序具有很好的可移植性,而保证这一点的正是 Java 的虚拟机机制。在引入虚拟机之后,Java 语言在不同的平台上运行不需要重新编译。
    Java 语言使用 Java 虚拟机机制屏蔽了具体平台的相关信息,使得 Java 语言编译的程序只需生成虚拟机上的目标代码,就可以在多种平台上不加修改地运行。

  3. 简单性
    Java 语言的语法与 C 语言和 C++ 语言很相近,使得很多程序员学起来很容易。对 Java 来说,它舍弃了很多 C++ 中难以理解的特性,如操作符的重载和多继承等,而且 Java 语言不使用指针,加入了垃圾回收机制,解决了程序员需要管理内存的问题,使编程变得更加简单。

  4. 解释执行
    Java 程序在 Java 平台运行时会被编译成字节码文件,然后可以在有 Java 环境的操作系统上运行。在运行文件时,Java 的解释器对这些字节码进行解释执行,执行过程中需要加入的类在连接阶段被载入到运行环境中。

  5. 多线程
    Java 语言是多线程的,这也是 Java 语言的一大特性,它必须由 Thread 类和它的子类来创建。Java 支持多个线程同时执行,并提供多线程之间的同步机制。任何一个线程都有自己的 run() 方法,要执行的方法就写在 run() 方法体内。

  6. 分布式
    Java 语言支持 Internet 应用的开发,在 Java 的基本应用编程接口中就有一个网络应用编程接口,它提供了网络应用编程的类库,包括 URL、URLConnection、Socket 等。Java 的 RIM 机制也是开发分布式应用的重要手段。

  7. 健壮性
    Java 的强类型机制、异常处理、垃圾回收机制等都是 Java 健壮性的重要保证。对指针的丢弃是 Java 的一大进步。另外,Java 的异常机制也是健壮性的一大体现。

  8. 高性能
    Java 的高性能主要是相对其他高级脚本语言来说的,随着 JIT(Just in Time)的发展,Java 的运行速度也越来越高。

  9. 安全性
    Java 通常被用在网络环境中,为此,Java 提供了一个安全机制以防止恶意代码的攻击。除了 Java 语言具有许多的安全特性以外,Java 还对通过网络下载的类增加一个安全防范机制,分配不同的名字空间以防替代本地的同名类,并包含安全管理机制。
    Java 语言的众多特性使其在众多的编程语言中占有较大的市场份额,Java 语言对对象的支持和强大的 API 使得编程工作变得更加容易和快捷,大大降低了程序的开发成本。Java 的“一次编写,到处执行”正是它吸引众多商家和编程人员的一大优势。

Java语言的缺点

1.性能
Java 需要在运行时进行解释,这使得它可以在每个操作系统上运行,但也使它的性能比C和C++等语言慢。另一方面,C++程序需要在每个操作系统上编译,直接编译成二进制,因此运行速度更快。

2.内存消耗
Java 程序在 Java 虚拟机之上运行,因此会消耗更多内存。

3.垃圾收集
Java 提供了程序员无法控制的自动垃圾收集。它不提供 delete() 和 free() 之类的方法来释放内存。

4.底层操作
Java 处理一些底层操作时可能不是很方便,有时候需要使用JNI等方式来调用底层的代码。同时,Java的安全模型也有一些限制,有时需要将某些需要高权限的操作委托给其他语言来完成



喜欢的朋友记得点赞、收藏、关注哦!!!


http://www.kler.cn/a/284636.html

相关文章:

  • 利用编程语言和脚本编写技术,实现自动化渗透测试和安全工具的开发
  • 在JPA和EJB中用乐观锁解决并发问题
  • apache2配置多站点
  • Django基础用法+Demo演示
  • Android Studio 将项目打包成apk文件
  • Bugku CTF_Web——文件上传
  • list类底层逻辑实现
  • Mysql的命令大全
  • 黑神话悟空带火了哪些三维建模技术
  • LeetCode全排列2(js简单快通法)
  • 深入探索:Windows Edge对CSS Grid布局Subgrid特性的支持与实践
  • 猫头虎分享:Python库 TensorFlow 的简介、安装、用法详解入门教程
  • 数据库中utf8mb4_unicode_520_ci较之utf8mb4_unicode_ci 具体增加了哪些特性
  • js插件-模糊搜索、自动补全下拉框
  • P2036 [COCI2008-2009 #2] PERKET
  • 关于一个早期对电子辐射的小讨论
  • Eureka
  • 图像去噪评论:从经典到最先进的方法
  • Java集合——list
  • 【数学建模学习手册】python基本入门使用
  • Altium Designer24使用
  • 开发团队如何应对突发的技术故障和危机
  • Nginx运维规范及安全配置
  • NoSQL数据库-Redis集群详解及案例实现
  • 【解决】sql中包含问号(?),导致mybatis解析错误
  • 使用 @Configuration 和 @Bean 注解替代 XML 配置文件