编程语言 Java 会长久受欢迎么?
Top 10 编程语言 TIOBE 指数走势(2002-2020)
Java 是由 Sun Microsystems 在 1995 年首先发布的编程语言和计算平台。多年来它的地位无法撼动,无论是网站还是移动端,都会用java语言来编辑程序,那么java语言会长久受欢迎吗?我们先来看看编程语言社区 TIOBE 最新发布的8月编程语言排行榜。
image
什么是 Java ?
Java 是一门面向对象编程语言,不仅吸收了 C++ 语言的各种优点,还摒弃了 C++ 里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。Java 具有简单性、面向对象、分布式、健壮性、安全性、平台独立与可移植性、多线程、动态性等特点。Java 可以编写桌面应用程序、Web 应用程序、分布式系统和嵌入式系统应用程序等。
Java 语言的特点
▌简单性Java 语言是一种面向对象的语言 ,它通过提供最基本的方法来完成指定的任务 ,只需理解一些基本的概念 ,就可以用它编写出适合于各种情况的应用程序。Java 略去了运算符重载、多重继承等模糊的概念 ,并且通过实现自动垃圾收集大大简化了程序设计者的内存管理工作。另外 ,Java 也适合于在小型机上运行 ,它的基本解释器及类的支持只有 40KB 左右 ,加上标准类库和线程的支持也只有 215KB 左右。库和线程的支持也只有 215KB 左右。
▌面向对象Java 语言的设计集中于对象及其接口 ,它提供了简单的类机制以及动态的接口模型。对象中封装了它的状态变量以及相应的方法 ,实现了模块化和信息隐藏 ;而类则提供了一类对象的原型 ,并且通过继承机制 ,子类可以使用父类所提供的方法 ,实现了代码的复用。
▌分布性Java 是面向网络的语言。通过它提供的类库可以处理 TCP/IP 协议 ,用户 可以通过 URL 地址在网络上很方便地访问其它对象。
▌解释执行Java 解释器直接对 Java 字节码进行解释执行。字节码本身携带了许多编译时信息 ,使得连接过程更加简单。
▌鲁棒性Java 在编译和运行程序时 ,都要对可能出现的问题进行检查 ,以消除错误的产生。它提供自动垃圾收集来进行内存管理 ,防止程序员在管理内存时容易产生的错误。通过集成的面向对象的例外处理机制 ,在编译时,Java 提示出可能出现但未被处理的例外 ,帮助程序员正确地进行选择以防止系统的崩溃。另外,Java 在编译时还可捕获类型声明中的许多常见错误 ,防止动态运行时不匹配问题的出现。
▌安全性用于网络、分布环境下的 Java 必须要防止病毒的入侵。Java 不支持指针,一切对内存的访问都必须通过对象的实例变量来实现 ,这样就防止程序员使用"特洛伊 "木马等欺骗手段访问对象的私有成员 ,同时也避免了指针操作中容易产生的错误。
▌体系结构中立
Java 解释器生成与体系结构无关的字节码指令 ,只要安装了 Java 运行时系统 ,Java 程序就可在任意的处理器上运行。这些字节码指令对应于 Java 虚拟机中的表示 ,Java 解释器得到字节码后 ,对它进行转换 ,使之能够在不同的平台运行。
▌可移植性与平台无关的特性使 Java 程序可以方便地被移植到网络上的不同机器。同时 , Java 的类库中也实现了与不同平台的接口 ,使这些类库可以移植。另外, Java 编译器是由 Java语言实现的 ,Java 运行时系统由标准 C实现 ,这使得Java系统本身也具有可移植性。
▌高性能和其它解释执行的语言如 BASIC、 TCL 不同 , Java 字节码的设计使之能很容易地直接转换成对应于特定 CPU 的机器码 ,从而得到较高的性能。
▌多线程多线程机制使应用程序能够并行执行 ,而且同步机制保证了对共享数据的正确操作。通过使用多线程 ,程序设计者可以分别用不同的线程完成特定的行为 ,而不需要采用全局的事件循环机制 ,这样就很容易地实现网络上的实时交互行为。
▌动态性Java 的设计使它适合于一个不断发展的环境。在类库中可以自由地加入新的方法和实例变量而不会影响用户程序的执行。并且 Java 通过接口来支持多重继承 ,使之比严格的类继承具有更灵活的方式和扩展性。
Java 发展史
1995年5月23日,Java 语言正式诞生。1996年1月,第一个 JDK-JDK1.0 诞生。1996年4月,10个最主要的操作系统供应商申明将在其产品中嵌入 Java 技术。1996年9月,约8.3万个网页应用了 Java 技术来制作。1997年2月18日,JDK1.1 发布。1997年4月2日, JavaOne 会议召开,参与者超过万人,创造当时全球同类会议规模之纪录。1997年9月,JavaDeveloperConnection 社区成员超过十万。1998年2月,JDK1.1 被下载超过 2,000,000 次。1998年12月8,Java 的企业平台 Java EE 正式发布。1999年6月,Sun 公司发布Java的三大版本:标准版( Java SE )、企业版( Java EE )、微型版( Java ME )。2000年5月8日,JDK1.3 发布。2000年5月29日,JDK1.4 发布。2001年6月5日,NOKIA 宣布,到2003年将出售1亿部支持 Java 的手机。2001年9月24日,Java EE 1.3 发布。2002年2月26日,J2SE1.4 发布,自此 Java 的计算能力有了大幅提升。2004年9月30日,J2SE1.5 发布,是 Java 语言发展史上的又一里程碑事件。为了表示这个版本的重要性,Java SE 1.5 正式更名为 Java SE 5.0。2006年12月,Sun 公司发布了 JDK1.6( 也被称为 Java SE 6 )。一直以来,Sun 公司维持着大约2年发布一次 JDK 新版本的习惯。新特性及更新修改:
-
继承 Web Services
-
可插拔注解
-
JDBC 4.0API
-
支持脚本语言
-
Java Compiler API:compiler API 提供编程访问 javac ,可以实现进程内编译,动态产生 Java 代码。
2009年4月20日,Oracle 宣布将以每股9.5美元的价格收购 Sun,该交易的总价值约为74亿美元。但 Oracle 通过收购Sun公司获得了两项软件资产:Java 和 Solaris。2007年11月,Java 语言作为服务器端编程语言,已经取得了极大地成功;而 Android 平台的流行,则让 Java 语言获得了在客户端程序上大展拳脚的机会。2011年7月28日,Oracle 公司发布了 Java SE 7,这次版本升级经过了将近5年时间。Java SE 7 也是 Oracle 发布的第一个Java版本,引入了二进制整数、支持字符串的 switch 语句、多异常捕捉、自动关闭资源的 try 语句等新特性。新特性及更新修改:
-
switch 语句块中允许以字符串 String 作为分支条件
-
异常处理(可以在一个语句块中捕获多种异常) try-with-resources
-
在创建泛型对象时应用类型推断(增强泛型推断)
-
Path接口、DirectoryStream、Files、WatchService(重要接口更新)
-
引入JSR203 NIO2.0(AIO),新IO的支持
-
支持动态语言
-
数字字面量的改进 / 数值可加下划
-
null值得自动处理
2014年3月18日,Oracle公司发布了Java SE 8,这次版本升级为Java带来了全新的Lambda表达式。除此之外,Java 8还增加了大量新特性,这些新特性使得Java变得更加强大。新特性及更新修改:
-
Lambda表达式:Lambda表达式可以说是Java 8最大的卖点,它将函数式编程引入了Java。Lambda允许把函数作为一个方法的参数,或者把代码看成数据。
-
接口的默认方法与静态方法:我们可以在接口中定义默认方法,使用default关键字,并提供默认的实现。所有实现这个接口的类都会接受默认方法的实现,除非子类提供的自己的实现。
-
方法引用(含构造方法引用)方法引用提供了非常有用的语法,可以直接引用已有Java类或对象(实例)的方法或构造器。与lambda联合使用,方法引用可以使语言的构造更紧凑简洁,减少冗余代码
-
Optional 类:Optional 类已经成为 Java 8 类库的一部分,用来解决空指针异常。
-
Stream API:新添加的Stream API(java.util.stream) 把真正的函数式编程风格引入到Java中
-
Date/Time API (JSR 310):加强对日期与时间的处理。Java 8新的Date-Time API (JSR 310)受Joda-Time的影响,提供了新的java.time包,可以用来替代 java.util.Date和java.util.Calendar。一般会用到Clock、LocaleDate、LocalTime、LocaleDateTime、ZonedDateTime、Duration这些类,对于时间日期的改进还是非常不错的。
-
Base64编码:在Java 8中,Base64编码成为了Java类库的标准。Base64类同时还提供了对URL、MIME友好的编码器与解码器。
2017年9月21日,JDK9发布。新特性及更新修改:
-
模块系统:模块是一个包的容器,Java 9 最大的变化之一是引入了模块系统(Jigsaw 项目)
-
REPL (JShell):交互式编程环境
-
多版本兼容 JAR 包:多版本兼容 JAR 功能能让你创建仅在特定版本的 Java 环境中运行库程序时选择使用的 class 版本。(这个在处理向下兼容方面,非常好用)
-
接口的私有方法:在接口中使用private私有方法。我们可以使用 private 访问修饰符在接口中编写私有方法
-
底层结构:String 存储结构变更(这个很重要)
-
集合工厂方法:快速创建只读集合
-
增强的 Stream API:改进的 Stream API 添加了一些便利的方法,使流处理更容易,并使用收集器编写复杂的查询
-
全新的 HTTP 客户端 API:HTTP/2标准是HTTP协议的最新版本,新的 HTTPClient API 支持 WebSocket 和 HTTP2 流以及服务器推送特性
2018年3月30日,Java 10 正式发布。新特性及更新修改:
-
局部变量的类型推断——var关键字
-
GC改进和内存管理 并行全垃圾回收器 G1
-
垃圾回收器接口
-
线程-局部变量管控
-
合并 JDK 多个代码仓库到一个单独的储存库中
-
新增API:ByteArrayOutputStream
-
新增API:List、Map、Set
-
新增API:java.util.Properties
-
新增API:Collectors收集器
2018年9月26日,Java 11 正式发布。新特性及更新修改:
-
本地变量类型推断
-
字符串加强
-
集合加强
-
Stream 加强
-
Optional 加强
-
InputStream 加强
-
HTTP Client API
-
化繁为简,一个命令编译运行源代码
2019年3月19日,JDK12 发布。2019年9月13日,JDK 13 发布,主要特性包括:
-
重新实现传统套接字API
-
switch 表达式预览版
-
增强 ZGC 将未使用的堆内存返回给操作系统
2020年3月17日,JDK14 发布。主要特性包括:
-
switch 表达式最终版
-
增强 ZGC 收集器支持 Window/ Mac
-
弃用 ParallelScavenge + SerialOld 的 GC 组合等
到目前为止 Java 的诞生已经20多年了,但是它的地位还是无可动摇的,仍然具有很大的吸引力,随着时间的更新换代,Java 也在不断的发展,技术也在不断的更新当中。虽然出现了很多相媲美的Java编程语言,但是Java的地位还是无可撼动,有其中有很多原因。
一边工作,一边快乐学习!
本期编辑:kryszna
新朋友搜索微信公号 “ **挨踢日常 **” 字样,或扫描二维码关注