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个月一个迭代
![](https://img-blog.csdnimg.cn/img_convert/85191edc22030f226fb50ad4ce5eb68c.webp?x-oss-process=image/format,png)
上面的图,是从官网的新特性中找到的,如下:
![](https://img-blog.csdnimg.cn/img_convert/da9b25d74c186166dcce8deef643e1e3.webp?x-oss-process=image/format,png)
文中主要介绍了
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,Java11 和 Java17 都是两个长期支持的版本,也比较重要
![](https://img-blog.csdnimg.cn/img_convert/547cf26bfe90c8d3eb953fe97d92d2a4.webp?x-oss-process=image/format,png)
Java语言的特点
面向对象
Java 是一种面向对象的语言,它对对象中的类、对象、继承、封装、多态、接口、包等均有很好的支持。为了简单起见,Java 只支持类之间的单继承,但是可以使用接口来实现多继承。使用 Java 语言开发程序,需要采用面向对象的思想设计程序和编写代码。平台无关性
平台无关性的具体表现在于,Java 是“一次编写,到处运行(Write Once,Run any Where)”的语言,因此采用 Java 语言编写的程序具有很好的可移植性,而保证这一点的正是 Java 的虚拟机机制。在引入虚拟机之后,Java 语言在不同的平台上运行不需要重新编译。
Java 语言使用 Java 虚拟机机制屏蔽了具体平台的相关信息,使得 Java 语言编译的程序只需生成虚拟机上的目标代码,就可以在多种平台上不加修改地运行。简单性
Java 语言的语法与 C 语言和 C++ 语言很相近,使得很多程序员学起来很容易。对 Java 来说,它舍弃了很多 C++ 中难以理解的特性,如操作符的重载和多继承等,而且 Java 语言不使用指针,加入了垃圾回收机制,解决了程序员需要管理内存的问题,使编程变得更加简单。解释执行
Java 程序在 Java 平台运行时会被编译成字节码文件,然后可以在有 Java 环境的操作系统上运行。在运行文件时,Java 的解释器对这些字节码进行解释执行,执行过程中需要加入的类在连接阶段被载入到运行环境中。多线程
Java 语言是多线程的,这也是 Java 语言的一大特性,它必须由 Thread 类和它的子类来创建。Java 支持多个线程同时执行,并提供多线程之间的同步机制。任何一个线程都有自己的 run() 方法,要执行的方法就写在 run() 方法体内。分布式
Java 语言支持 Internet 应用的开发,在 Java 的基本应用编程接口中就有一个网络应用编程接口,它提供了网络应用编程的类库,包括 URL、URLConnection、Socket 等。Java 的 RIM 机制也是开发分布式应用的重要手段。健壮性
Java 的强类型机制、异常处理、垃圾回收机制等都是 Java 健壮性的重要保证。对指针的丢弃是 Java 的一大进步。另外,Java 的异常机制也是健壮性的一大体现。高性能
Java 的高性能主要是相对其他高级脚本语言来说的,随着 JIT(Just in Time)的发展,Java 的运行速度也越来越高。安全性
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的安全模型也有一些限制,有时需要将某些需要高权限的操作委托给其他语言来完成
![](https://img-blog.csdnimg.cn/direct/67c64049147741939b85489caefbb597.png)
喜欢的朋友记得点赞、收藏、关注哦!!!