Java作业

Java现状

依旧占据语言榜的榜首

从来自TIOBE的数据来看,Java仍然占据着排行榜第一的位置。而从目前的市场需求看,Java在服务端和客户端都还占据着非常巨大的优势和有非常巨大的需求,老大哥的位置当之无愧。

活跃的社区和不断的技术创新让Java走的更远

尽管现在最广泛应用的java版本仍然是jdk8,但是jdk版本已经出到了11,不仅增加了不少新的语法和功能,也带来了超过10%的性能提升,JDK11还支持了单源代码启动,使得编写脚本成为了可能,同时,Java的社区生态依旧活跃,Google 发布 jib,能更好地构建Java Docker镜像,GraalVM进一步提高了Java的运行效率,同时支持多语言并行(JavaScript, R…..),除了这些大的改变,无数的开发者给Java社区提供了许多开源库,这使得使用Java开发更加高效快捷。

Java擅长的领域

后端

后台依旧是java的天下,至少短期而言,但目前比较火热的服务端语言还有PHP,Nodejs,Go,他们相比Java都各有优势

PHP vs Java

PHP的相比Java最大特点是上手简单开发快,很多操作都比较简单(比如分布式部署,数据库操作)

Java比PHP的优势是Java更适合大型系统的开发,并且有完善的社区支持,SSH,SSM,SM框架可以让大型项目有更好的系统架构,更容易分离层,进行解耦合,同时Java作为一个强类型语言,比PHP更面向对象的语言,而且作为编译型语言,可以更容易的写出规范易读可维护性高的语言。

NodeJS vs Java

NodeJS Vector Logo - Download Free SVG Icon | Worldvectorlogo

NodeJS和JS使用了同一套语法标准,这带来了两个好处

  1. 语法天生灵活,上手简单开发快
  2. 可以让前端工程师写中台代码

当然也有坏处

  1. 动态语言一时爽,代码重构火葬场,NodeJs是动态语言,在开发大型项目时极容易出问题
  2. 单线程,对CPU的利用率不高,执行效率略慢于Java

目前来看,NodeJS一般在小型项目的开发和中台开发上使用较多,大型项目仍然以Java为主

Go vs Java

Go 注重减轻这些大型工程的难题,虽然会以使小型工程变得更麻烦为代价。

Go的优势如下

  1. 学习难度低,易于上手
  2. Go解决了Java中的一些很麻烦的语法写法问题,让写法更简洁
  3. 注重可维护性
  4. 编译型语言,执行快,速度接近c

当然也有缺点,就是社区没有Java成熟,但未来有可能超越甚至取代Java

Java面临挑战的领域

安卓客户端

曾经的Java是原生安卓开发的首选语言,绝大多数的原生app就是使用Java编写的,但Java已经开始面临一些挑战。

kotlin的冲击

google已经把推荐语言转向kotlin,otlin比Java更安全(尤其是空安全)简洁,但是IDE的支持和社区依旧比不上Java。

H5 app 和 Hybrid app的冲击

这是大前端发展下的产物,使用HTML + CSS + JS开发的网页,只要套个壳就能在安卓上运行,现在大部分电商app,比如淘宝,京东等都开始使用这种方式开发,他们和Java开发的原生app的优缺点比较如下

优点

  1. 支持设备范围广,可以跨平台,编写的代码可以同时在Android、IOS、Windows上运行;
  2. 开发成本低、周期短;
  3. 无内容限制;
  4. 适合展示有大段文字(如新闻、攻略等),且格式比较丰富(如加粗,字体多样)的页面;
  5. 用户可以直接使用最新版本(自动更新,不需用户手动更新)。

缺点

  1. 由于Web技术本身的限制,H5移动应用不能直接访问设备硬件和离线存储,所以在体验和性能上有很大的局限性;
  2. 对联网要求高,离线不能做任何操作,功能有限;
  3. APP反应速度慢,页面切换流畅性较差;
  4. 图片和动画支持性不高;
  5. 用户体验感较差;

Flutter和RN的冲击

Flutter是谷歌的移动UI框架,用于快速在iOS和Android上构建高质量的原生用户界面。React Native使开发者只使用JavaScript也能编写原生移动应用。这两套框架的优点都是一次开发,处处运行,跨平台性高,缺点是目前还处于不成熟的阶段,各方面的支持依旧比不上Java。

Java不擅长的领域

嵌入式

目前嵌入式的主流语言是用c语言编写,对Java非常不友好,原因如下

  1. Java目前的模式是:源代码 --> 字节码 --> JVM --> 操作系统 -> 硬件,Java有着一次编写,处处运行的特点,但Java虚拟机隐藏了操作系统,导致开发者难以对操作系统以及硬件进行操作,而嵌入式主要操作的正是硬件,这就导致Java难以胜任嵌入式开发
  2. Java虚拟机导致了一定的性能消耗,打个比方,如果你在MC(我的世界)里用红石电路搭了一个计算机,这个计算机能比你的电脑跑得快吗,答案自然是不能的,Java虚拟机也是如此,而嵌入式开发一般资源有限,对性能优化,执行效率的要求较大,供不起Java虚拟机的浪费。
  3. Java对开发者隐藏了内存,同时,Java没有指针,所以不能难以操作内存,更难以操作硬件。

(大)前端

网页端

曾经Java可以使用编写JSP的方式来编写网页,但是后来前端和后端分离开发成为了趋势,Java再难以在前端中占据一席之地,原因很简单,那就是网页的复杂化。

在仍然使用JSP生成页面的时代,页面功能及其简单,没有复杂的交互,使用JSP开发并没有太大问题,但是随着3G,4G的广泛应用,页面逐渐复杂化,提升用户体验的需求逐渐增加,一个网站动不动就成千上万行代码,如果要做到页面的解耦合,就要在前端中进行工程化,组件化,但传统的JSP难以完成改进,故渐渐被淘汰。另外JSP导致前端和后端混杂,开发效率极低且难以维护,所以,后端不再负责使用JSP编写前端的代码,前端逐渐转向使用JS进行组件化和功能化开发。

桌面客户端

在这里HTML + CSS + JS对Java的优势非常大,JS编写的网页只要套个壳,简单打包一下,就可以在桌面端使用,steam,youtube Music桌面版的很多页面正是使用了这种方式开发,网页移植到桌面端的开发方式,可以一次开发处处运行,几乎没有兼容性问题。而且开发效率快(用JavaFX和Swing构建UI是一件很痛苦的事),可以自动更新等优势。缺点是对网络要求高,响应慢,但是桌面客户端一般网络条件较好,所以影响相对安卓端会小很多。

参考资料

Go 会接替 Java,成为下一个企业级编程语言吗

点赞

发表评论

昵称和uid可以选填一个,填邮箱必填(留言回复后将会发邮件给你)
tips:输入uid可以快速获得你的昵称和头像

Title - Artist
0:00