Java开发每日一课:21世纪最流行的语言,Java为什么这么火?

news2024/11/23 8:18:56

自从进入21世纪以来,Java在TIOBE语言排行榜一直稳居前2名,占有率一直在12%以上。从国内各大招聘网站的岗位需求和培训班的畅销课程上看,Java一直稳居榜首,可以说Java是21世纪最流行的语言。

作为一个1995年才推出的语言,能够这么流行,是Oracle公司一开始没有想到的。那么为什么Java会这么流行呢?我感觉有下面几个重要原因:

废弃了指针、自带垃圾回收、语法简单,更适合工程开发

Java刚诞生的时候,主要的竞争对手是C++。C++是贝尔实验室的Bjame Sgoustrup等大牛在80年代设计出来的,功能非常强大,不光支持面向对象,还保持了对C的兼容。支持多继承、预算符重载等高级特性。

小编08年开始学习C++,看过侯杰写的《深入浅出MFC》,有1-2W行的C++编程经验。从11年开始就主要以Java为主,很少写C++了。我感觉C++语法过于复杂,灵活性很好,上可以面向对象,下可以用指针操作内存,但是学习成本很高,入门困难,容易出错。这也是C++为什么功能这么强大,却不是很流行的原因。

而Java在设计的时候没有历史包袱,语法简单,清晰明了。比如继承只支持单继承,不支持指针 ,降低了一小部分灵活性,但是降低了编程难度,容易入门,不容易出错。这也是为什么培训班都喜欢开Java培训的原因,培训几个月就可以干活。而C++没有几年功底是很难参与大型项目开发的。

并且Java自带了垃圾回收,不用程序员自己去管理内存,这非常关键。现在的语言比如Go都具有这个特性,但在C系列语言流行的年代,垃圾回收是没有的,需要程序员自己去分配和释放内存。有哪个地方忘了释放了,出现了野指针,整个程序就内存泄漏GG了。这也是在10年前有个很流行的观点,说一个C++项目组有49个大牛和1个菜鸟,菜鸟写的代码出现了内存泄漏,整个项目就GG了;而Java项目组,有49个大牛和1个菜鸟,菜鸟写的bug基本上只会影响他写的那一部分,整个项目不会受到太大影响。

和C++相比,Java更适合工程应用,适合团队合作进行大型项目开发。语言难度的降低,也帮企业降低了人力成本。产业界的问题本质上都能用经济学来解释,用Java来做项目可以花更少的钱干更多的活,并且系统不容易出问题,这是Java在产业界流行的根本原因。

有庞大的开源生态圈

从90年代开始,开源的浪潮越来越猛烈,可以说开源改变了整个软件产业的运作方式。Java也赶上了这波浪潮,以Spring、Struts、Hibernate为代表的开源框架都是基于Java进行开发的,这些框架大大提升了开发效率,让Java的使用更加地广泛,也促使了更多的开发者来用Java来开发开源项目。一旦生态建立起来了,雪球会越滚越大,这也是为什么现在好多新的语言从功能上已经不次于Java,却无法撼动Java地位的原因。

赶上了移动化开发和大数据的浪潮

2007年,Google正式推出了Android手机系统。2013年,运行Android系统的设备就突破了10亿台。而Android上的移动应用,Java是最主流的开发语言,这波移动开发的浪潮,让Java变得更加流行。

也差不多是从2007年,大数据变得流行,Yahoo推出了一系列的开源项目,比如Hadoop、Zookeeper、Hive、Hbase等,都是基于Java进行开发的。现在大数据开发已经成为了IT公司的标配,这也让Java的阵营变得更加强大。



喜欢的朋友记得点赞、收藏、关注哦!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2188603.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JVM(HotSpot):字符串常量池(StringTable)

文章目录 一、内存结构图二、案例讲解三、总结 一、内存结构图 JDK1.6 JDK1.8 我们发现,StringTable移入了Heap里面。所以,应该想到,StringTable将受到GC管理。 其实,1.6中,在方法区中的时候,也是受GC管…

01 排列选票

题目&#xff1a; 桶排序&#xff1a; #include<bits/stdc.h> using namespace std; #define M 100005 int a[M];int main() {int n,m;cin>>n>>m;for(int i1;i<m;i){int temp;cin>>temp;a[temp];}for(int i1;i<n;i){for(int j1;j<a[i];j){co…

OpenVINO基本操作流程

环境配置&#xff1a; conda env list:可以查看有哪些环境 conda activate intel:启动某个环境 pip list&#xff1a;可以查看此环境下都下载了哪些软件包 from openvino.inference_engine import IEcore#从OpenVINO推理引擎中导入IECore类 import numpy as np import cv2 1&…

基于GitLab 的持续集成环境

一.技术基础 Gitlab: 是一个用于仓库管理系统的开源项目&#xff0c;使用Git作为代码管理工具&#xff0c;并在此基础上搭建起来的Web服务 GitRunner:用于运行您的作业并将结果发送回GitLab。它与GitLab CI一起使用&#xff0c;GitLab CI是GitLab随附的开源持续集成服务&…

SpringCloud微服务搭建实战

文章目录 前言Nacos配置和项目结构图示数据库和脚本准备seata数据库transaction_database数据库 一、Spring Boot、Spring Cloud、Sping Cloud Alibaba二、seata安装seata配置修改Nacos新建配置文件seata-server.properties 三、创建Microservice-Project项目四、创建api-modul…

【HTML5】html5开篇基础(5)

1.❤️❤️前言~&#x1f973;&#x1f389;&#x1f389;&#x1f389; Hello, Hello~ 亲爱的朋友们&#x1f44b;&#x1f44b;&#xff0c;这里是E绵绵呀✍️✍️。 如果你喜欢这篇文章&#xff0c;请别吝啬你的点赞❤️❤️和收藏&#x1f4d6;&#x1f4d6;。如果你对我的…

使用MTVerseXR SDK实现VR串流

1、概述​ MTVerseXR SDK 是摩尔线程GPU加速的虚拟现实&#xff08;VR&#xff09;流媒体平台&#xff0c;专门用于从远程服务器流式传输基于标准OpenXR的应用程序。MTVerseXR可以通过Wi-Fi和USB流式将VR内容从Windows服务器流式传输到XR客户端设备, 使相对性能低的VR客户端可…

芯片公司产品简介

台湾新唐科技:ARM内核-nuvoTon stc&#xff08;宏晶&#xff09;&#xff1a;STC 8051 系列、STC32 8051系列、STC32 ARM系列 兆易&#xff1a;Arm Cortex-M内核和RISC-V内核 意法&#xff1a; 乐鑫科技&#xff1a; MCU厂家 GPU厂家 MCU与MPU 引用链接&#xff1a; http://…

AutoCAD学习

AutoCAD学习 最基本操作 命令用途说明空格键确认键也可以是重复刚才的命令回车键也是确认键鼠标右键也可以选择确认LINE、L直线命令绘制直线DLI线性尺寸标注DIMLINEAR鼠标滚轮滚动放大缩小视图界面鼠标中键按住移动视图DAL对齐线性标注DIMALIGNED F8 正交模式ORTHOMODE Tab 切换…

漆包线称重系统/自动称重/项目合作

万界星空科技漆包线行业称重系统实现自动称重的方式主要依赖于现代数字电子称重技术、计算机网络技术以及相关的软件系统的集成。以下是对该系统如何实现自动称重的详细解释&#xff1a; 一、硬件基础 称重设备&#xff1a; 系统采用高精度的电子秤作为称重设备&#xff0c;这…

TOGAF框架中的最佳实践与实施技巧:推动企业数字化转型的实战指南

企业的数字化转型已经成为全球商业界的一大趋势&#xff0c;而实现这一转型不仅需要技术的创新&#xff0c;还需要清晰的架构规划和实施策略。TOGAF&#xff08;The Open Group Architecture Framework&#xff09;作为全球广泛应用的企业架构标准&#xff0c;为企业提供了行之…

Pikachu-File Inclusion- 本地文件包含

前端每次挑选篮球明星&#xff0c;都会通过get请求&#xff0c;传了文件名&#xff0c;把页面展示出来&#xff0c;由于文件名时前端传给后台;并且查看源码&#xff0c;没有对参数做限制&#xff1b; 尝试直接从前端修改filename 参数&#xff1b; filename../../../../../../…

24-10-3-读书笔记(二十三)-《一个孤独漫步者的遐想》上([法] 让·雅克·卢梭 [译]陈阳)

文章目录 《一个孤独漫步者的遐想》上&#xff08;[法] 让雅克卢梭 [译]陈阳&#xff09;卢梭生平大事年表总结 《一个孤独漫步者的遐想》上&#xff08;[法] 让雅克卢梭 [译]陈阳&#xff09; 十月第三篇&#xff0c;看书看个爽&#xff0c;今天是法国哲学家卢梭晚年的著作《一…

【C++】—— vector模拟实现

vector 接口预览 namespace HL {template<class T>class vector{//迭代器iteratortypedef T* iterator;typedef const T* const_iterator;public://默认成员函数vector();vector(size_t n, const T& val T());vector(int n, const T& val T());vector(const v…

【学习资源】人在环路的机器学习

说明&#xff1a;本文图片和内容来源 Human-in-the-Loop Machine Learning Human-in-the-Loop Machine Learning Active learning and annotation for human-centered AI by Robert (Munro) Monarch, June 2021 介绍Human-in-the-Loop的目标&#xff0c;学习过程&#xff0c…

Redis:通用命令 数据类型

Redis&#xff1a;通用命令 & 数据类型 通用命令SETGETKEYSEXISTSDELEXPIRETTLTYPEFLUSHALL 数据类型 Redis的客户端提供了很多命令用于操控Redis&#xff0c;在Redis中&#xff0c;key的类型都是字符串&#xff0c;而value有多种类型&#xff0c;每种类型都有自己的操作命…

DMA 正点原子版

就是介绍一下dma&#xff0c;只能内存到外设&#xff0c;外设到内存&#xff0c;内存到内存&#xff0c;不能外设到外设这样进行数据传输 这个是 可以看这个表来查&#xff0c;哪个dma的哪个通道用来传输什么数据&#xff0c;这个是芯片固定好的&#xff0c;只能看表查&#xf…

Geogebra基础篇002—关于Geogebra软件的介绍及与MatLab的区别

为什么要学Geogebra&#xff1f; 因为和MatLab的科学计算相比&#xff0c;GeoGebra重点突出教学展示&#xff0c;对于教师、学生人群来讲再合适不过了&#xff0c;尤其是可以融入到PPT里边呈现交互式动画&#xff0c;想想听众的表情&#xff01;这不就弥补了看到PPT播放数学公…

Python+Matplotlib-高等数学上-P7-例如部分可视化

import numpy as np import matplotlib.pyplot as plt# 设置中文字体&#xff0c;确保中文显示正确 plt.rcParams[font.sans-serif] [SimHei] # 用黑体显示中文 plt.rcParams[axes.unicode_minus] False # 正常显示负号# 设置图形和子图 fig, (ax1, ax2) plt.subplots(2, …

Qt 5开发步骤及实例

目录 界面设计编写相应的计算圆面积代码 界面设计 创建桌面应用程序 得到这样一个树形视图 双击界面文件中的dialog.ui 直接双击控件label改名&#xff0c;然后修改最后一个label的属性 修改这个标签的样式&#xff0c;把frameshape改成Panel&#xff0c;frameshadow改…