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. python8.4景区买票

    from threading import Threadimport threadinglock=threading.Lock()num=100#定义买票方法def sale(name): lock. ...

  2. 趣讲 PowerJob 超强大的调度层,开始表演真正的技术了

    本文适合有 Java 基础知识的人群 作者:HelloGitHub-Salieri HelloGitHub 推出的<讲解开源项目>系列. 写在前面的碎碎念:终于到了万众期待的调度层原理了. ...

  3. PHP7 生产环境队列 Beanstalkd 正确使用姿势

    应用场景 为什么要用呢,有什么好处?这应该放在最开头说,一件东西你只有了解它是干什么的,适合干什么,才能更好的与自己的项目相结合,用到哪里学到哪里,学了不用等于不会,我们平时就应该多考虑一些这样的问题 ...

  4. Java日志框架(二)

    最流行的日志框架解决方案 按笔者理解,现在最流的日志框架解决方案莫过于SLF4J + LogBack.其有以下几个优点: LogBack 自身实现了 SLF4J 的日志接口,不需要 SLF4J 去做进 ...

  5. python 正则表达式与JSON-正则表达式匹配数字、非数字、字符、非字符、贪婪模式、非贪婪模式、匹配次数指定等

    1.正则表达式:目的是为了爬虫,是爬虫利器. 正则表达式是用来做字符串匹配的,比如检测是不是电话.是不是email.是不是ip地址之类的 2.JSON:外部数据交流的主流格式. 3.正则表达式的使用 ...

  6. Web接口测试理论知识分享

    首先谈下接口的定义分为2类,程序接口和协议接口 1.程序模块接口,具体到程序中就是提供了输入输出的类 方法,我们可以通过传入不同的参数,来验证程序接口的功能 2.协议接口  比如HTTP/SOAP协议 ...

  7. java循环嵌套与跳转语句(break,continue)

    一 循环嵌套 嵌套循环是指在一个循环语句的循环体中再定义一个循环语句的语法结构.while.do…while. for循环语句都可以进行嵌套,并且它们之间也可以互相嵌套,如最常见的在for循环中嵌套f ...

  8. Centos搭建go环境以及go入门

    引言 本文主要聚焦于 如何在centos上搭建go环境以及go入门, 包括搭建go环境,hello world运行, 创建包等操作,初步入门go语言. 安装环境 在管理员权限下, 也就是root用户 ...

  9. 实型(浮点型):float、double

    #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<string.h> #include<stdlib. ...

  10. 【Floyd】珍珠

    [题目描述] 有n颗形状和大小都一致的珍珠,它们的重量都不相同.n为整数,所有的珍珠从1到n编号.你的任务是发现哪颗珍珠的重量刚好处于正中间,即在所有珍珠的重量中,该珍珠的重量列(n+1)/2位.下面 ...