Java的发展史与前景

news/2024/9/18 20:59:06/ 标签: java, 开发语言, 学习, 笔记, 运维, 服务器

🌈个人主页:Yui_
🌈Linux专栏:Linux
🌈C语言笔记专栏:C语言笔记
🌈数据结构专栏:数据结构
🌈C++专栏:C++

文章目录

  • 0. Java语言的发展史
  • 1.概述
    • 1.1 什么是Java
    • 1.2 为什么选择Java
    • 1.3 Java的特性
  • 2. 第一个Java程序

0. Java语言的发展史

Java 语言源于 1991 年 Sun 公司 James Gosling 领导的的 Oak 项目,1995 年 Sun 公司正式起名为 Java,并提出“Write once, Run anywhere" 的口号。
1996 年 1 月 Java 1.0 发布,提供了一个解释执行的 Java 虚拟机,其时恰逢互联网开始兴起,Java 的 Applet 能在Mozilla 浏览器中运行,被看作是未来的互联网语言。
1997 年 2 月 Java 1.1 发布,Java 语言的基本形态基本确定了,比如反射 (reflection), JavaBean, 接口和类的关系等等,一直到今天都保持一致。然而,Java 最初的一些目标,如在浏览器中执行 Applet,以及跨平台的图形界面Awt 很快遭遇到负面的评价。
1998 年 12 月,Java 第一个里程碑式的版本,即 Java 1.2 发布了。这个版本使用了 JIT(Just in time)编译器技术,使得语言的可迁移性和执行效率达到最优的平衡,同时 Collections 集合类设计优良,在企业应用开发中迅速得到了广泛使用。Sun 公司把 Java 技术体系分成三个方向,分别是 J2SE(面向桌面和通用应用开发),J2EE(面向企业级应用开发),J2ME(面向移动终端开发)。这个分类影响非常久远,体现出主流语言设计者的思想:针对于不同的应用领域,在形态,API 集合等进行划分。2000 年 5 月,Java 1.3 发布,这个版本中 Corba 作为语言级别的分布式对象技术,成为 J2EE 的一个技术前提。J2EE 受到 Corba 的设计的影响较大,早期 EJB 的 Home,接口和实现就是 Corba 在 C 语言的实现,被移植到Java 语言之中。J2EE 中的 Servlet 规范获得了极大的成功,伴随着互联网的兴起,和浏览器直接通过 HTTP 协议交互的 Servlet,和众多的 MVC 框架,成为 Web1.0 的网红。
2002 年 2 月,Java 1.4 发布,Java 语言真正走向成熟,提供了非常完备的语言特性,如 NIO,正则表达式,XML处理器等。同年微软的.NET 框架发布,两者开始了为期十几年的暗自竞争。从语言特性上来说,.NET 后发先至,一直处于优势。但 Java 依赖良好的开发者生态,绝大多数大型软件公司的使用者众多和不断贡献,以及对 Linux操作系统良好的支持,渐渐的在服务器端获得优势地位。 2004 年 9 月,Java 5 发布,Sun 不再采用 J2SE, J2EE 这种命名方式,而使用 Java SE 5, Java EE 5 这样的名称。我认为 Java 5 是第二个里程碑式的版本。Java 语言语法发生很大的变化,如注解(Annotation),装箱 (Autoboxing),泛型 (Generic),枚举 (Enum),foreach 等被加入,提供了 java.util.concurrent 并发包。Java 5 对于 Java 语言的推动是巨大的,特别是注解的加入,使得语言定义灵活了很多,程序员可以写出更加符合领域定义的描述性程序。
2006 年 5 月, JavaEE 5 发布,其中最主要是 EJB3.0 的版本升级。在此之前,EJB2.X 版本被广泛质疑,SpringFramework 创建者 Rod Johnson 在经典书籍“J2EE Development without EJB“中,对 EJB2 代表的分布式对象的设计方法予以批驳。EJB3 则重新经过改造,使用注解方式,经过应用服务器对 POJO 对象进行增强来实现分布式服务能力。在某种程度,可以说 EJB3 挽救了 JavaEE 的过早消亡。 2006 年 12 月,Java 6 发布,这个语言语法改进不多,但在虚拟机内部做了大量的改进,成为一个相当成熟稳定的版本,时至今日国内的很多公司依然以Java6 作为主要 Java 开发版本来使用。同年 Sun 公司做出一个伟大的决定,将 Java 开源。OpenJDK 从 Sun JDK1.7 版本分支出去,成为今天 OpenJDK 的基础。OpenJDK6 则由 OpenJDK7 裁剪而来,目前由红帽负责维护,来满足 Redhat Enterprise Linux 6.X 用户的需要。2009 年 12 月,JavaEE 6 发布,这个版本应该说是 JavaEE 到目前为止改进最大影响最深远的一个版本。因为JavaEE5 只有 EJB3 适应了 Java 注解语法的加入,而 EE6 全面接纳了注解。CDI 和 BeanValidation 规范的加入,在 POJO 之上可以定义完备的语义,由容器来决定如何去做。Servlet 也升级到 3.0 版本,并在接口上加入异步支持,使得系统整体效率可以大幅提高。EE 划分为 Full Profile 和 Web Profile,用户可以根据自己的需要选择不同
的功能集。
在此之前,Oracle 已经以 74 亿美金的价格收购了 Sun 公司,获得了 Java 商标和 Java 主导权。也收购了 BEA 公司,获得市场份额最大的应用服务器 Webogic。JavaEE 6 虽然是收购之后发布的版本,但主要的设计工作仍然由原 Sun 公司的 Java 专家完成。 2011 年 7 月,Oracle 发布 Java 7, 其中主要的特性是 NIO2 和 Fork/Join 并发包,尽管语言上没有大的增强,但我个人认为,自从 Oracle JDK(包括 OpenJDK7),Java 虚拟机的稳定性真正做到的工业级,成为一个计算平台而服务于全世界。
2013 年 6 月,Oracle 发布 JavaEE 7,这个版本加入了 Websocket,Batch 的支持,并且引入 Concurrency 来对服务器多线程进行管控。然而所有的子规范,算上可选项 (Optional) 总共有 40 多项,开发者光是阅读规范文本就很吃力了,更不要说能够全局精通掌握。JavaEE 规范的本质是企业级应用设计的经验凝结,每一个 API 都经过众多丰富经验的专家反复商议并确定。各个版本之间可以做到向后兼容,也就是说,即使是 10 年前写的 Servlet 程序,当前的开发者也可以流畅的阅读源码,经过部分代码调整和配置修改,可以部署在当今的应用服务器上。反过来,今后用 Servlet4 写的程序,浏览器和服务器通信使用全新的 HTTP/2 协议,但程序员在理解上不会有障碍,就是因为 Servlet 规范的 API 非常稳定,基本没有大的变化修改。
2014 年 3 月,Oracle 发布 Java 8,这个版本是第三个有里程碑意义的 Java 版本。其中最引人注目的便是 Lambda 表达式了,从此 Java 语言原生提供了函数式编程能力。语言方面大的特性增加还有:Streams,Date/Time API,集合的并行计算支持等,Java8 更加适应海量云计算的需要。
2018 年 3 月,Java 10 正式发布,并带来 109 项新特性。
美国当地时间2018 年9月25日,Oracle 官方宣布Java 11 (18.9 LTS) 正式发布,可在生产环境中使用!这是自 Java8 后的首个长期支持版本。

1.概述

1.1 什么是Java

Java是一种优秀的程序设计语言,具有令人赏心悦目的语法和易于理解的语义。不仅如此,Java还是一个有一系 列计算机软件和规范形成的技术体系,这个技术体系提供了完整的用于软件开发和跨平台部署的支持环境,并广泛 应用于嵌入式系统、移动终端、企业服务器、大型机等各种场合。
下面我们通过Java官方提供的数据来一起感受一 下,Java到底有多“火”。
开始“报菜名”现在在你面前的是:

  • 97%的企业桌面运行的编程语言。
  • 美国有80%的桌面运行。
  • 全球有900万开发人员。
  • 开发人员的头号选择。
  • 排名第一的部署平台。
  • 有30亿部移动电话运行。
  • 附带了100%的蓝光光盘播放器。
  • 超50亿Java卡在使用。
  • 运行了1.25亿台TV设备。
  • 前5个原始设备制造商均提供了JavaME。

1.2 为什么选择Java

从前的数据我们也已经知道了Java是很受欢迎的,下面我们在来看看最新的TIOBE的排序榜。该排行榜会根据互联网上有经验的程序员、课程和第三方厂商的数量,以及多款搜索引擎(如:Google、MSN、Yahoo、Wikipedia、YouTube和baidu等)数据进行计算。
TIOBE

Java一直都是榜单前几名的存在。Java究竟有多火呢?大家觉得JavaScript和Java有什么关系呢,就差不多相当于初音岛和初音的关系一样,也就是没有一点关系…最开始JavaScript是叫livescript,但是由于当时的Java太火了,于是就此改名蹭了个热度。

1.3 Java的特性

简单性
Java语法是c++语法的一个“纯净版本”。这里没有头文件、指针运算、结构、联合、操作符重载、虚函数等等。
面向对象
在Java的世界中一切皆是对象。
Java的面向对象特性于C++旗鼓相当,与C++的主要不同在多重继承。在Java中,取而代之的是更简单的接口概念。而与C++相比,Java提供了更丰富的运行时自省能力。
分布式
Java有丰富的例题库,用于处理HTTP和FTP之类的TCP/IP协议,Java应用程序能通过URL打开和访问网络上的对象,其便携程度就好像访问本地文件一般。
健壮性
Java与C++最大的不同在于Java采用的指针模型可以消除重写内存和损坏数据的可能性(对于曾经花费几个小时来检测指针bug而引起内容的人来说,可能会喜欢Java的这一特性)。不仅如此,Java编译器能够检测许多在运行时才能检测出来的问题,如数据溢出的问题。
安全性
Java适用于网络/分布式环境。为了达到这个目标,在安全性方面投入了大量的精力。使用Java可以构建防病毒、防
篡改的系统
从一开始,Java就设计成能够防范常见的各种攻击:

  • 运行时堆栈溢出,蠕虫和病毒常见攻击手段。
  • 破坏自己进程空间之外的内存。
  • 未经授权读写文件。
    体系结构中立
    编译器生成一个体系结构中立的目标文件格式,这是一种编译过的代码,只要有Java运行时系统,这些编译后的代码就可以在许多处理器上运行。Java编译器通过生成与特定计算机体系结构无关的字节码指令来实现这一特性。精 心设计的字节码不仅可以很容易的在任何机器上解释执行,而且还可以动态地翻译成本地机器代码。
    可移植性
    与C/C++不同,Java规范中没有“依赖具体实现的地方”。基本数据类型的大小以及有关运算都做了明确的说明。例如,Java中的int永远是32位的整数,而在C/C++中,int可能是16位整数、32位整数,也可能是编译器提供商指定的其他大小。在Java中,数据类型具有固定的大小,这消除了代码移植时令人头疼的主要问题。
    解释性
    Java解释器可以在任何移植了解释器的机器上执行Java字节码。由于链接是一个增量式且轻量级的过程。所以开发过程也变得更加快捷,更加具有探索性。
    高性能
    尽管对解释后的字节码性能已经比较满意,但在有些场合下可能需要更加高效的性能。字节码可以(在运行时刻)动态的翻译成对应运行这个应用的特定cpu的机器码。
    多线程
    Java在当时很超前。它是第一个支持并发程序设计的主流语言。多线程可以带来更好的交互响应和实时行为。并发程序设计绝非易事,但是Java在这方面表现出色,可以很好的管理这个工作。
    动态性
    Java与C/C++相比更加具有动态性。它能够适应不断发展的环境。库中可以自由的添加新方法和实例变量,而对客户端没有任何影响。在Java中找出运行时类型信息十分简单。

2. 第一个Java程序

java">public class FirstProcedure{public static void main(String[] args){System.out.println("Hello World!");}
}

Java的mian好像是最长的吧。
通过上述代码,我们要知道的是:Java程序的结构由以下三个部分组成:

  1. 源文件(扩展名.java):源文件带有类的定义。类用来表示程序的一个组件,小程序或许只会有一个类。类的内容必须包含在花括号里面。
  2. 类:类中带有一个或多个方法。方法必须在类的内部声明。
  3. 方法:在方法的花括号中编写方法应该执行的语句。
    类存在于源文件里面;方法存在于类中,语句存在于方法中

http://www.ppmy.cn/news/1525685.html

相关文章

LSTM处理时序数据:深入解析与实战

大家好,我是你们的深度学习老群群。今天,我们来聊一聊LSTM(长短期记忆网络)是如何处理时序数据并得到预测结果的。LSTM作为循环神经网络(RNN)的一种变体,因其能够有效捕捉长期依赖关系&#xff…

Docker部署tenine实现后端应用的高可用与负载均衡

采用Docker方式的Tengine 和 keepalived 组合模式可以实现小应用场景的高可用负载均衡需求 目录 网络架构一、环境准备二、软件安装1. 下载Tenine镜像2. 下载Keepalived镜像3. 制作SpringBoot镜像 三、软件配置1. 创建应用容器2. 代理访问应用3. 创建Keepalived4. 测试高可用 网…

QQ频道机器人零基础开发详解(基于QQ官方机器人文档)[第三期]

QQ频道机器人零基础开发详解(基于QQ官方机器人文档)[第三期] 第三期介绍:频道模块之频道成员 目录 QQ频道机器人零基础开发详解(基于QQ官方机器人文档)[第三期]第三期介绍:频道模块之频道成员获取子频道在线成员数获取频道成员列表获取频道身份组成员列…

MySQL 查询过慢的优化方法

1. 优化查询语句 问题:使用 SELECT * 会导致查询获取不必要的数据。 SELECT * FROM users WHERE age > 30;优化建议: 指定需要的列,这样可以减少数据传输的负担,提升查询速度。 SELECT name, email FROM users WHERE age &g…

Windows与linux中docker的安装与使用

windos中安装使用docker 下载Docker_Desktop 安装包进入docker官网下载Docker_Desktop: https://www.docker.com/启用wsl 我们搜索“启用或关闭Windows功能”,打开后勾选适用于Linux的Windows 子系统 Docker_Desktop设置 出现Docker Engine stopp…

GC-分代收集器

GC收集器介绍 十款GC收集器 上图中共有十款GC收集器,它们可以根据回收时的属性分为分代和分区两种类型: 分代收集器:Serial、ParNew、Parallel Scavenge、CMS、Serial Old(MSC)、Parallel Old 分区收集器&#xff…

Java多线程编程-基础篇

多线程相关的概念 并发 并发是指在同一时间段内,两个或多个任务在同一个处理器上交替执行,使得在宏观上看起来像是同时进行。并发是通过快速切换任务来模拟同时执行的效果,实际上在任何一个时刻点上只有一个任务在执行。 也就是说&#xff0…

Linux 基础命令-文件权限与所有权

1. 文件权限概述 在Linux中,每个文件和目录都有与之关联的权限和所有权,来控制谁可以访问、修改或执行文件。文件权限与所有权可以防止未经授权的用户对文件进行访问或修改。 1.1 文件权限的组成 每个文件在Linux系统中都有三种类型的权限&#xff1a…

使用Ansible进行多云环境的自动化部署与管理

使用Ansible进行多云环境的自动化部署与管理 引言 随着云计算技术的飞速发展,多云环境已经成为现代企业IT架构的主流选择。多云环境不仅提供了更高的灵活性和可用性,还能有效降低供应商锁定的风险。然而,多云环境的管理和部署复杂性也随之增…

vue devtools的使用

vue devtools的使用 Vue Devtools 是一个强大的浏览器扩展,旨在帮助你调试和开发 Vue.js 应用。它支持 Chrome 和 Firefox 浏览器,并提供了一些工具和功能,可以让你更轻松地查看和调试 Vue 应用的状态和行为。以下是如何安装和使用 Vue Devtools 的详细指南。 安装 Vue De…

《Python青少年趣味编程108例》书籍介绍

文章目录 前言为什么选择Python?书籍介绍文章目录配套资源 前言 在这个数字化飞速发展的时代,编程已经成为了一项不可或缺的技能。对于青少年而言,学习编程不仅能够培养逻辑思维、解决问题的能力,还能激发无限创意,让…

【PyQt6 应用程序】一键视频解说克隆字幕切割版

在当今数字时代,视频解说已经成为影视剧宣传和观众互动的重要手段。然而,手动制作高质量的影视剧解说视频需要大量的时间和精力。为了简化这一过程并提高生产效率,我们开发了基于PyQt6的应用程序“一键视频解说克隆字幕切割版”。该应用程序能够自动复刻别人的影视剧解说视频…

概率论原理精解【13】

文章目录 在度量空间中,连续映射概述一、度量空间与距离函数二、连续映射的定义三、连续映射的等价定义四、连续映射的性质五、应用与例子 球形邻域刻画一、球形邻域的定义二、连续映射的球形邻域刻画三、等价性证明四、应用与例子 将度量空间上的连续映射推广到拓扑…

软件测试面试从哪方面面试?

一、面试基础题 简述测试流程: 什么是软件测试?软件测试的目的与原则 问:软件生存周期及其模型是什么? 什么是软件质量? 自动化测试脚本开发的主要步骤: 目前主要的测试用例设计方法是什么? 常见的测试用例设计…

二次规划及其MATLAB实现

引言 二次规划(Quadratic Programming, QP)是一类重要的优化问题,其目标函数为二次函数,约束条件为线性不等式或等式。二次规划问题在工程、经济、金融等领域有广泛应用,如投资组合优化、人脸表情动画的权重求解、机械…

后端开发刷题 | 把数字翻译成字符串(动态规划)

描述 有一种将字母编码成数字的方式&#xff1a;a->1, b->2, ... , z->26。 现在给一串数字&#xff0c;返回有多少种可能的译码结果 数据范围&#xff1a;字符串长度满足 0<n≤90 进阶&#xff1a;空间复杂度 O(n)&#xff0c;时间复杂度 O(n) 示例1 输入&a…

HJ36字符串加密

提示&#xff1a;文章 文章目录 前言一、背景二、 2.1 2.2 总结 前言 前期疑问&#xff1a; 本文目标&#xff1a; 一、背景 最近 二、 2.1 HJ36字符串加密 解题 #include <stdio.h> #include <stdbool.h>int GetStrIndex(char c, char* dict, int len) {…

Python中给定一个数组a = [2,3,9,1,0],找出其中最大的一个数,并打印出来 求解?

Python有内置的max函数可以取最大值&#xff1a; max([2,3,9,1,0])也可以使用sorted先排序&#xff0c;再索引取出最大值&#xff1a; sorted([2,3,9,1,0])[-1]如果不用内置函数&#xff0c;自己排序算法来找出最大值&#xff0c;也有很多选择。 比如冒泡排序、循环排序、交…

算法设计(二)

1.归并排序 介绍 归并排序是建立在归并操作上的一种有效&#xff0c;稳定的排序算法&#xff0c;该算法是采用分治法的一个非常典型的应用。将已有序的子序列合并&#xff0c;得到完全有序的序列&#xff1b;即先使每个子序列有序&#xff0c;再使子序列段间有序。若将两个有…

【人工智能学习笔记】4_4 深度学习基础之生成对抗网络

生成对抗网络&#xff08;Generative Adversarial Network, GAN&#xff09; 一种深度学习模型&#xff0c;通过判别模型&#xff08;Discriminative Model&#xff09;和生成模型&#xff08;Generative Model&#xff09;的相互博弈学习&#xff0c;生成接近真实数据的数据分…