大家好,今天小编关注到一个比较有意思的话题,就是关于java 语言缺点的问题,于是小编就整理了4个相关介绍Java 语言缺点的解答,让我们一起看看吧。
- java语言采用多种机制来保证可移植性,其中最主要的是?
- 我听很多人说JAVA已经过时了,下一个要淘汰的语言就是JAVA,真的是这样吗?
- java为什么总是需要抛各种异常?
- Java都到16了,为什么感觉都还在用8,是越做越差了吗?
JAVA语言***用多种机制来保证可移植性,其中最主要的是?
对于程序可移植性最直接最有效的支持是与平台无关。对于J***A语言来时使用了多种机制来保证可移植性,最主要的是使用虚拟机(virtual machine)和使用虚拟机使用的J***A字节码。由于保证J***A语言的高可移植性,其程序的运行效率被降低,为了弥补这种缺陷,将J***A字节码的设计最大限度接近于机器码。
我听很多人说J***A已经过时了,下一个要淘汰的语言就是J***A,真的是这样吗?
哪门语言被淘汰都不稀奇,淘汰j***a那就省省吧,看看j***a的生态,懂的自然全都懂。黑j***a的喷j***a的唱衰j***a的,十几年来数不胜数,别的语言可没实力。j***a是过时了,但j***a生态一直在与时俱进呀,且越来越不可取代了。j***a就算被取代,别的语言也没啥好高兴的,因为大概率是被其他jvm语言取代了
先说结论:J***a正在过时,并且可能会被淘汰。
每次有人唱衰J***a的时候,都会有一群J***a程序员愤怒地出来反驳,我也曾是其中的一员。但是现在我更喜欢尊重事实,拿数据说话。
从TIOBE网站每月提供的编程社区指数,我们可以清晰地看到,J***a的占比从2001年6月的26.49%逐渐减少到今年(2021)6月的11.54%,20年间下降了15%。这个排行榜是根据互联网上有经验的程序员、课程和第三方厂商的数量,并根据各大搜索引擎的搜索热度以及Wikipedia、Amazon、YouTube统计出的排名数据,可以说能够客观反应出各编程语言的热门程度。因此,我们可以得出结论:J***a正在逐渐走向衰落。
下面我将试着分析J***a市场份额逐渐减少的原因,以及J***a语言的优缺点,希望能对你有所帮助。
J***a占比减少的原因:
- 各种新语言的崛起。J***a鼎盛的时候,市场的竞争对手很少。而这些年,随着计算机硬件的发展以及互联网的普及,各种编程语言也随之井喷式地出现。每种相对热门语言出现和发展都会吸走一部分热度,并带起新的一波唱衰J***a的节奏。这些语言的代表早期有C#,最近有Go。
- JVM体系中一些“Better J***a”的出现。由于J***a语言本身的一些弊病(下文会详细说),JVM上出现了一些语言,如Scala、Groovy、Kotlin,它们打着“Better J***a”的旗号,***用和J***a互通的形式发展。一些对J***a体验不满的团队,可能会选择转向这些语言。
- 互联网热点的切换。前些年服务器端编程可能是互联网领域的主流,近年来由于机器学习、大数据等概念的兴起,对这些概念支持更好的语言得以兴起,如python、R、Scala等。
- J***a语言自身的缺陷。
J***a语言的缺陷:
- 语言特性不够丰富。J***a具有跨平台和向下兼容这两大卖点,但它们同时也是J***a语言沉重的包袱。带着这些包袱,J***a只能缓慢保守地增加语言特性。一些其他成熟语言具备的特性,J***a只能选择不支持或通过替代的方式支持。如J***a中没有函数的数据类型,使用“类型擦除”的方式实现泛型等。
- 语法过于啰嗦。J***a的样板代码可能是所有编程语言里最多的。Python程序员100行代码可以搞定的事情,J***a程序员可能要写上500行代码。
- 应用场景不是刚需。J***a虽然在服务器编程方面找到了统治地位,但是这种统治地位并不牢固。具有服务器编程能力的语言太多了,如php、python、Go、dart等,甚至js这种浏览器端的语言也来凑个热闹,搞了node.js专门用于服务端编程。
- 对多线程的支持不友好。J***a对多线程的支持设计得非常不友好,即使经验丰富的程序员,也容易编写出产生致命缺陷的代码。
J***a语言的优势:
- 上手简单。J***a的语法少,并且非常符合直觉,非常适合作为新人的入门语言。
- 生态完整,社区活跃。有海量的第三方框架和依赖包,基本上各个领域都能找到成熟的解决方案。
- 跨平台。对各个平台的支持比较完善,基本可以实现“一次编写,到处运行”。
- 存量项目多。J***a运行在数以亿计的硬件设备上,这些系统的维护工作足以养活一大批J***a开发的程序员。
J***a程序员何去何从?
- 首先不要过分焦虑,J***a被淘汰不会是一两天的事情。
- 其次不要把鸡蛋放在一个篮子里,多掌握一些技术,技多不压身。
- 最后提高对自己的要求,多修炼内功,从原理上理解编程,这样就可以不受语言的限制,随时能够适应新的领域的工作。
J***a 是一种非常流行的编程语言,它在企业和开发者社区中都有很高的普及率,并且被广泛应用于各种领域。从这个意义上说,它确实没有被“淘汰”。
然而,随着新的编程语言和技术的不断出现,J***a 也面临着挑战。新的语言和技术,如 Python、Scala、Kotlin、Rust、Golang 等语言,正在吸引着越来越多的开发人员。同时,随着数据科学和机器学习领域的发展,Python 等语言也逐渐成为了主流。
不过,J***a作为历史悠久的编程语言,仍然具有很强的生命力,在很多领域仍然有着广泛的应用。例如,企业应用程序、移动应用程序、游戏开发、云计算、大数据等领域中都有J***a的存在,还有就是J***a最为稳固的生态,这也就保证了J***a在未来也将继续保持其重要地位。
另外, J***a的企业版本 J***aEE 以及 Spring 框架在微服务领域有着不错的表现,在新兴的微服务[_a***_]中,J***a也保持着重要的地位。
总的来说,想要取代J***a也并非一朝一夕之事,J***a 不会因为新的语言和技术的出现而迅速淘汰,它仍然是一种非常重要的编程语言,未来也将继续保持其重要地位。
j***a为什么总是需要抛各种异常?
在软件项目中,发生异常不可怕,无法定位到问题才可怕,故障定位和解决时间过长才可怕;如果 J***a 方法不能按照正常的流程执行,那么可以通过另外一种途径退出,就是抛出一个封装了错误信息的对象,这个就是 J***a 的异常;异常的作用就是为了当程序发生问题的时候,方便开发人员定位和解决问题。
J***a 的异常可以分为 Error 和 Exception :
- Error 是指 J***a 运行时系统内部的错误,或者说它代表了 JVM 本身的错误,通常都是比较严重的错误, 比如内存溢出, 虚拟机错误等等;Error 通常和硬件或 JVM 有关,和程序本身无关,所以不能被代码捕获和处理。
- Exception 又可以分为运行时异常和检查异常;
- 运行时异常 RuntimeException:这类异常在编译期间不强制代码捕捉,但是可能在在 JVM 运行期间抛出异常;出现此类异常,通常是代码的问题,所以需要修改程序避免这类异常。常见的运行时异常,比如:NullPointerException、ClassCastException 等等。
- 检查异常 CheckedException:这种异常发生在编译阶段,J***a 编译器会强制代码去捕获和处理此类异常;比如:ClassNotFoundException、IllegalAccessException 等等。
在J***a 项目中,如何优雅地处理异常呢?
- 不要试图通过异常来控制程序流程,比如开发一个接口,正确的做法是对入参进行非空验证,当参数为空的时候返回“参数不允许为空”,而不应该捕捉到空指针的时候返回错误提示。
- 仅捕获有必要的代码,尽量不要用一个 try...catch 包住大段甚至整个方法内所有的代码,因为这样会影响 JVM 对代码进行优化,从而带来额外的性能开销。
- 很多程序员喜欢 catch(Exception e),其实应该尽可能地精确地指出是什么异常。
- 不要忽略异常,捕捉到异常之后千万不能什么也不做,要么在 catch{...} 中输出异常信息,要么通过 Throw 或 throws 抛出异常,让上层代码处理。
- 尽量不要在 catch{...} 中输出异常后,又向上层代码抛出异常,因为这样会输出多条异常信息,而且它们还是相同的,这样可能会产生误导。
- 不要在 finally{...} 中写 return,因为 try{...} 在执行 return 之前执行 finally{...} ,如果 finally{...} 中有 return,那么将不再执行 try{...} 中的return。
作者:会点代码的大叔 ,一个写代码的架构师,专注程序员的学习和成长,关注并私信我数字“1”,送你一份程序员大礼包。
无论是什么编程语言,总会有未知异常的出现,比如说经典的文件流操作,你所加载的路径或许或许根本不存在文件,这时候jvm在执行中就会抛出异常,告诉你没有找到文件,这时你就知道你程序在哪里出错了,所以抛异常是为了让你知道自己的程序哪里出现了错误,结合日志框架log4j使用效果会更佳。
在J***a中你还可以自定义异常,来实现你想要的操作,可以说J***a的异常机制可以解决系统的大多数问题,比如说在oom的时候,你可以通过异常信息快速定位错误所在,加快效率!
综上诉求,异常不是J***a的设计缺陷,而是J***a的灵魂所在。
如果想要更深入的了解J***a的各种内在机制,那么下面的书是你必须要看的。
J***a都到16了,为什么感觉都还在用8,是越做越差了吗?
企业级现在还停留J***a8版本。大企业用什么版本才有影响力。因此导致感觉好像还在用8。
这里很大的误解是企业保守落后,其实企业版的J***a8和Oracle或者openjdk版本的J***a8区别非常大,不能混淆的。
先说缺陷修复和优化。
企业版本吸收了所有世面上能看到的缺陷,当然也包括16版本的。也就是普通版本说很多修复是普通版本16才包含的,远远落后企业版本的修复速度。
再说新特性。
这么说吧,J***a的新版本特性各大厂企业员工影响和贡献极大,说大企业不关注新特性是外行,就是人家弄的还说人家不懂是完全没道理的。
知道这些就明白了。所谓16是品牌宣传用的。企业使用都自己做优化了。
我们还在用JDK6呢,一个公司开始使用一个东西后升级是很大代价的,本来运行稳定你这一升级很多都可能有问题,而且这些问题是没办法测试出来的,如果不是有些功能必须要用到高版本的JDK,我们根本不会考虑升级,因为相应一些三方插件也要处理,而且可能不一定有对应的版本,像转PDF,转EXCEL等,再加上現在J***A升級有多大的意义呢?j***a6其实可以满足几乎所有需求。
恰恰相反,J***a随着版本号的更新,是越来越好了。不管是底层的虚拟机,还是上层的新语法新类库,都让J***a这门语言生机勃勃,J***a生态繁荣向好。
就拿刚刚发布的J***a 16来说,千呼万唤的Record终于也正式成型,加入到了J***a标准中,以后我们在编写J***a Bean的时候,不用再一个一个手动定义字段,也不再需要lombok自动生成字段, 只需要使用这一官方特性,就可以轻松地生成完整的类。
这样的新特性和语法糖在新版本的J***a中比比皆是,凡是用过的程序员都说好。我也实在想不通,这么一门优秀的语言是怎么被人说是越做越烂的,真是奇了怪了😅😅
再说回为什么现在大量项目还在使用J***a 8甚至更老的J***a,其实原因很简单,这和现在大部分公司的管理模式相关。现在大部分公司基本上都是以项目为驱动,简单来说就是项目做出来就算成功。只要项目能够保持稳定运行,那么就不要动它,就算有什么安全漏洞也别管。在此基础上, 就算有一些程序员有动力去升级版本,但是升级成功以后老板也不会给你加钱,万一出了问题还要倒扣钱,在这种环境下,大家当然是得过且过,一个项目版本用到死。
另一方面这也和J***a新的更新策略有关。原来J***a更新是很慢的,基本上每一次大版本号更新都是长期支持版,相应的每次大版本号变动就非常慢,给了很多公司升级的空间。不过自从J***a 9开始,Oracle修改了更新策略,差不多每10个月J***a就会更新一次大版本,几次更新中只有一次是长期支持版。一般商用项目自然都是在长期支持版上运行,不会一直跟着大版本号走。目前J***a最新的长期支持版是J***a 11,下一次长期支持版是J***a 17.如果你所在的公司技术很牛逼,那么现在你用的J***a应该就是11了,等到下一次切换版本应该就是明年的J***a 17了。
J***a当年要不是一直社区开源运维,还不早被C#打懵了。现在8以上的新版本被Oracle商业公司把持着,你觉得除了大数据之类的生态,J***a还有啥特别的大优势?
对于企业来说如果用Oracle的jdk那么8是最好的选择,因为11已经开始服务化收费了,如果非要11的话用阿里巴巴的jdk或者亚马逊的jdk也是可以的,但是openjdk确实是存在问题的,生产环境慎用
到此,以上就是小编对于j***a 语言缺点的问题就介绍到这了,希望介绍关于j***a 语言缺点的4点解答对大家有用。