Java是否还能再辉煌十年?

一、前言

Java语言,熟悉的coffee标志,一直以来在后台开发领域都是比较吃香的语言。想必有学过后台开发的同学,应该都有听说过Java衍生出来的工具和框架。为什么Java会备受人们追捧呢?它今后的发展又会是怎样的呢?能否再次辉煌十年?而最近热门的人工智能,备受欢迎的是Python语言,它相对于Java的优势所在是什么?

我们这个世界,Java这门语言究竟主要运用于什么领域?而市场上有许许多多的编程语言,Java并不是一家独大,同时有许多的编程语言正在侵蚀Java的市场。有这么多的语言,为什么我们有些人选择Java去开发呢?

本文将结合Java的应用领域和不擅长的领域中与其它编程语言的对比进行分析,讲讲Java究竟是一门怎样的编程语言?

二、如今的Java语言

2.1 位居TIOBE榜首

上图是2020年4月的TIOBE Index,

2020年4月的TIOBE Index的前十名,其中Java仍然位居榜首,但是与第二名C语言的差距非常之小,由此可见Java的受欢迎程度多么之高。

在java的基础上可以做web开发,可以做安卓开发,可以做小程序。有丰富的生态圈,已经造好的轮子有很多,可以使开发专注于业务代码的实现。而且Java代码还能跨平台运行(基于不同的JVM)。但是也是由于JVM,Java的代码运行效率明显没有C++和C语言这种编程语言高效。

2.2 革命性的语言

Java 之所以被称作革命性的语言,是因为传统的软件往往与具体的实现环境有关,一旦环境发生变化就需要对软件做出一系列改动,既费时又不省力。而 Java 语言所编写的软件,能在执行码的层次上相容,只需要计算机提供了 Java 的虚拟机环境,用 Java 语言编写的软件程序就能在其本地运行。

一次编译,到处运行。

但是,并不是Java一家独大,仍受到许多挑战。


三、Java受到的挑战

3.1 后台服务器软件的语言竞争

目前主流电商平台的编程语言,还是Java占主流,但是有另外的互联网公司,如知乎,B站,还是用GO语言等编程语言来写后台。

3.1.1 Python

目前Python在人工智能领域十分火爆,简短的代码许多的库可以导编程方式变得更加新手友好,使其越来越受编程人员的喜爱。

3.1.2 GO

说起GO语言,不得不提的是它的协程,语言级别支持协程(goroutine)并发(协程又称微线程,比线程更轻量、开销更小,性能更高),操作起来非常简单,语言级别提供关键字(go)用于启动协程,并且在同一台机器上可以启动成千上万个协程。

更简单、更高效

下面是使用GO语言的实际案例。


3.1.3 PHP

传说中世界上最好的语言

做中小型网站的一门十分热门的语言。

  1. PHP语法简单,短平快,代码易懂。(没有那么多sao操作)
  2. PHP可以支持热部署,而JAVA需要重新编译。PHP改完一段代码,发布后就可以看到结果了,这省去了不少维护的工作量。
  3. 开发环境轻量化

3.1.4 Node.js

Node.js 推出后统一了前后端

前端常用的后台语言,比如说前端自己模拟后台的数据,或者想创建自己的服务,这是十分前端程序员十分友好的编程语言。

3.6 小结

中小型网站用PHP和Node.js或者Python的比较多,为了提高性能,大型网站的后台会用到GO语言编写,而Java由于生态比较好,有各种框架,通常都适用各种网站的开发,但是效率方面肯定没有GO语言的高。

四、在Java不擅长的领域

4.1 前端领域

4.1.1 为什么JSP当不了主流的前端语言?

JSP(全称JavaServer Pages)的缺点所在:

  1. 传说中的用后台思维写前端页面。写的时候爽,后面看代码MMP。
  2. JSP调试困难,新手用断点调试不友好。
  3. 占用大量内存。

4.1.2 前端三剑客的称霸

想必学前端的同学,肯定对这三个东西十分熟悉。

4.1.3 百花齐放的前端框架

  1. 在大型超大型web应用开发上,看好Angular
  2. 小型应用上,看好vue
  3. 个性化需求、中型应用,更倾向react

4.2 安卓软件领域

4.2.1 Java在安卓端最棘手的对手Kotlin

Kotlin 是一种在 Java 虚拟机上运行的静态类型编程语言,被称之为 Android 世界的Swift,由 JetBrains 设计开发并开源。

Kotlin 可以编译成Java字节码,也可以编译成 JavaScript,方便在没有 JVM 的设备上运行。

在Google I/O 2017中,Google 宣布 Kotlin 成为 Android 官方开发语言。有强大的官方支持

4.2.2 与JS进行对抗的Dart语言

优势所在:

  1. 由 Google 主导开发,于 2011 年 10 月公开。它的开发团队由 Google Chrome 浏览器 V8 引擎团队的领导者拉尔斯·巴克主持,目标在于成为下一代结构化 Web 开发语言

    知乎网友:等到chrome一统江山那天,就是dart君临天下的时刻!

  2. Flutter

Flutter应用程序可以使用Dart编程语言编写

作为谷歌的开源移动UI框架,Flutter可以快速在iOS和Android上构建高质量的原生用户界面,今年,Google I/O 大会宣布了 flutter 支持 web 开发。

flutter 目前的目的就是全平台开发一套代码同时运行在 iOS 、Android、web和桌面端

4.3 嵌入式开发

简介

​ 嵌入式系统是指以应用为中心、以计算机技术为基础,软件硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。举例来说,大到油田的集散控制系统和工厂流水线,小到家用VCD机或手机,甚至组成普通PC终端设备的键盘、鼠标、硬盘、Modem等均是由嵌入式处理器控制的。

4.3.1 C++

名副其实的专业造轮子的语言

对新手不友好,开发学习代价太高。

  1. 泛型编程
  2. STL库的支持
  3. 嵌入式应用中每小段内存都昂贵的情况下,C++十分吃香

4.3.2 C

C语言的应用领域

  1. 应用软件。Linux操作系统中的应用软件都是使用C语言编写的,因此这样的应用软件安全性非常高。
  2. 对性能要求严格的领域。一般对性能有严格要求的地方都是用C语言编写的,比如网络程序的底层和网络服务器端底层、地图查询等。
  3. 嵌入式设备开发。手机、PDA等时尚消费类电子产品相信大家都不陌生,其内部的应用软件、游戏等很多都是采用C语言进行嵌入式开发的。

4.3 小结

Java相对于C和C++这两种语言,在性能上还是比不过编程语言的祖师爷。

Java = C++-- ,即Java的起源。

五、总结

在技术新陈代谢十分迅速的编程世界中,没有一项语言能够完全没有缺点,都是为了实际需求而进行使用。Java的生态圈好,有成熟的框架,但也不是说最好的编程语言,只有最适合你的编程语言。

编程语言的本质也就是为了简化人类的工作,如果你现在做这项工作,用这门语言能够更适合的话,何乐而不为呢?编程语言相通的方向有许多,我们往往只需掌握其中最重要的共同点,贯通共同的编程思想。就算一门编程语言再火,其本质也是一个工具,其目的都是为了让人类更好地“偷懒”。


参考资料

https://www.zhihu.com/question/304531859/answer/877587651

https://www.cnblogs.com/qcloud1001/p/9199246.html

https://www.php.cn/php-ask-430212.html

https://www.jianshu.com/p/61570c030b90

https://www.yoytang.com/dart-intro.html

https://www.zhihu.com/question/25058236?sort=created

https://www.leiue.com/what-is-dart

Java是否还能再辉煌十年?的更多相关文章

  1. java时间还在用date和calender?换LocalDateTime吧!

    java在时间计算上一直为人所诟病,在社区强烈反应下,java8推出了线程安全.简易.高可靠的时间包.并且数据库中也支持LocalDateTime类型,所以在数据存储时候使时间变得简单. LocalD ...

  2. Java实习生常规技术面试题每日十题Java基础(八)

    目录 1.解释内存中的栈(stack).堆(heap)和静态区(static area)的用法. 2.怎样将GB2312编码的字符串转换为ISO-8859-1编码的字符串? 3.运行时异常与受检异常有 ...

  3. Java实习生常规技术面试题每日十题Java基础(七)

    目录 1. Java设计模式有哪些? 2.GC是什么?为什么要有GC? 3. Java中是如何支持正则表达式. 4.比较一下Java和JavaSciprt. 5.Math.round(11.5) 等于 ...

  4. Java实习生常规技术面试题每日十题Java基础(六)

    目录 1.在Java语言,怎么理解goto. 2.请描述一下Java 5有哪些新特性? 3.Java 6新特性有哪些. 4.Java 7 新特性有哪些. 5.Java 8 新特性有哪些. 6.描述Ja ...

  5. Java实习生常规技术面试题每日十题Java基础(五)

    目录 1.启动一个线程是用run()还是start()? . 2.线程的基本状态以及状态之间的关系. 3.Set和List的区别,List和Map的区别? 4.同步方法.同步代码块区别? 5.描述Ja ...

  6. Java实习生常规技术面试题每日十题Java基础(三)

    目录 1.是否可以从一个static方法内部发出对非static方法的调用? 2.Integer与int的区别? 3.Overload和Override的区别.参数列表相同,返回值不同的方法,是否是重 ...

  7. Java实习生常规技术面试题每日十题Java基础(一)

    目录 1.Java 的 "一次编写,处处运行"如何实现? 2.描述JVM运行原理. 3.为什么Java没有全局变量? 4.说明一下public static void main(S ...

  8. Java程序员必须熟知的十项技术

    1.语法 Java程序员必须比较熟悉语法,在写代码的时候IDE的编辑器对某一行报错应该能够根据报错信息知道是什么样的语法错误并且知道任何修正. 2.命令 必须熟悉JDK带的一些常用命令及其常用选项,命 ...

  9. Java Spring Boot VS .NetCore (十) Java Interceptor vs .NetCore Interceptor

    Java Spring Boot VS .NetCore (一)来一个简单的 Hello World Java Spring Boot VS .NetCore (二)实现一个过滤器Filter Jav ...

随机推荐

  1. 代码生成器插件与Creator预制体文件解析

    前言 之前写过一篇自动生成脚本的工具,但是我给它起名叫半自动代码生成器.之所以称之为半自动,因为我觉得全自动代码生成器应该做到两点:代码生成+自动绑定.之前的工具只做了代码生成,并没有做自动绑定,所以 ...

  2. C#设计模式之6-适配器模式

    适配器模式(Adapter Pattern) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/399 访问. 适配器模式属 ...

  3. C#LeetCode刷题之#819-最常见的单词(Most Common Word)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3969 访问. 给定一个段落 (paragraph) 和一个禁用单 ...

  4. MySQL元数据信息

    一.查看数据库清单 show databases; 二.查看数据库下表清单 方法1) show full tables from ${schema名}; 方法2) use ${数据库名}; show ...

  5. 图论算法(二)最短路算法:Floyd算法!

    最短路算法(一) 最短路算法有三种形态:Floyd算法,Shortset Path Fast Algorithm(SPFA)算法,Dijkstra算法. 我个人打算分三次把这三个算法介绍完. (毕竟写 ...

  6. redis读写分离及可用性设计

    Redis缓存架构设计 对于下面两个架构图,有如下想法: 1)redis主从复制模式,为了解决master读写压力,对master进行写操作,对slave进行读操作. 2)而在分片集群中,如果对部分分 ...

  7. PMI-ACP认证,你了解多少?

    PMI-ACP ®(敏捷管理专业人士)认证是由美国项目管理协会(PMI ®)于2011年推出的一门敏捷项目管理考试科目,全称Agile Certified Practitioner.PMI-ACP®证 ...

  8. 你怎么改造和重新设计一个ATM银行自动取款机

  9. CodeQL CLI入门

    一.CodeQL CLI 安装和配置 1.下载CodeQL CLI 压缩包 https://github.com/github/codeql-cli-binaries/releases 2.创建Cod ...

  10. Redis的数据类型及使用场景

    1.redis 的数据类型 String 字符串 Hash 哈希 List 列表 Set 集合 ZSet(Sorted Set) 有序集合 2.使用场景 2.1 String 用户token 可以用r ...