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

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程序

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

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

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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • SQL Server详细使用教程(包含启动SQL server服务、建立数据库、建表的详细操作) 非常适合初学者
  • 4G模块、WIFI模块、NBIOT模块通过AT指令连接华为云物联网服务器(MQTT协议)
  • 高效数据移动指南 | 如何快速实现数据库 MySQL 到 MongoDB 的数据同步?
  • Python selenium 破解腾讯滑块行为验证码
  • 【Hadoop|MapReduce篇】Hadoop序列化概述
  • 【运维监控】influxdb 2.0+grafana 监控java 虚拟机以及方法耗时情况(完整版)
  • RTC、ADC
  • 深入理解Python函数参数传递:可变与不可变对象的实战解析20240914
  • Web安全与网络安全:SQL漏洞注入
  • setup函数子传父普通写法
  • centos8构建nginx1.27.1+BoringSSL+http3+lua+openresty
  • STM32——看门狗通俗解析
  • Django日志
  • WebRTC服务器搭建
  • SpringBoot + Vue + ElementUI 实现 el-table 分页功能详解
  • JS字符串转数字方法总结
  • React系列之 Redux 架构模式
  • vue-router 实现分析
  • 基于HAProxy的高性能缓存服务器nuster
  • 开源SQL-on-Hadoop系统一览
  • 看图轻松理解数据结构与算法系列(基于数组的栈)
  • 类orAPI - 收藏集 - 掘金
  • 前端_面试
  • 什么是Javascript函数节流?
  • 腾讯优测优分享 | Android碎片化问题小结——关于闪光灯的那些事儿
  • 体验javascript之美-第五课 匿名函数自执行和闭包是一回事儿吗?
  • 微信支付JSAPI,实测!终极方案
  • 我的面试准备过程--容器(更新中)
  • 原生 js 实现移动端 Touch 滑动反弹
  • 职业生涯 一个六年开发经验的女程序员的心声。
  • 大数据全解:定义、价值及挑战
  • # Apache SeaTunnel 究竟是什么?
  • # Spring Cloud Alibaba Nacos_配置中心与服务发现(四)
  • #[Composer学习笔记]Part1:安装composer并通过composer创建一个项目
  • $(selector).each()和$.each()的区别
  • (145)光线追踪距离场柔和阴影
  • (2)空速传感器
  • (2022版)一套教程搞定k8s安装到实战 | RBAC
  • (动态规划)5. 最长回文子串 java解决
  • (免费分享)基于springboot,vue疗养中心管理系统
  • (数据大屏)(Hadoop)基于SSM框架的学院校友管理系统的设计与实现+文档
  • (四)JPA - JQPL 实现增删改查
  • (原创)boost.property_tree解析xml的帮助类以及中文解析问题的解决
  • (转)Android中使用ormlite实现持久化(一)--HelloOrmLite
  • (转)VC++中ondraw在什么时候调用的
  • (转)菜鸟学数据库(三)——存储过程
  • (转)甲方乙方——赵民谈找工作
  • (转)为C# Windows服务添加安装程序
  • .apk文件,IIS不支持下载解决
  • .mat 文件的加载与创建 矩阵变图像? ∈ Matlab 使用笔记
  • .NET Core实战项目之CMS 第十二章 开发篇-Dapper封装CURD及仓储代码生成器实现
  • .NET 漏洞分析 | 某ERP系统存在SQL注入
  • .NET/C# 推荐一个我设计的缓存类型(适合缓存反射等耗性能的操作,附用法)
  • .Net多线程Threading相关详解
  • .Net实现SCrypt Hash加密