问题

如何通俗易懂解释 Java 语言所谓「一次编写,到处运行」的特性?

回答
想象一下,你写了一个特别棒的故事,你想让全世界的人都能读到,而且不管他们是用什么纸写的,都能看到同样精彩的内容。Java 的“一次编写,到处运行”就有那么点意思。

你写的 Java 代码,就像是那个被精心打磨过的故事。但这个故事不是用普通的文字写成的,而是用 Java 这种特殊的语言写成的。你可以把它想象成一种“通用语”。

我们都知道,电脑不像人脑那么灵活,它们有自己的“母语”,也就是机器码。不同的电脑,它们的“母语”可能还不一样。就好比有人说中文,有人说英文,有人说日文。如果你直接把中文故事给一个只懂英文的人看,他肯定看不懂。

那么,Java 是怎么解决这个问题的呢?它有一个非常聪明的中间人,叫做“Java 虚拟机”(JVM)。你可以把 JVM 想象成一个翻译官,而且是个非常非常厉害的翻译官。

首先,你写好的 Java 代码,就像那个中文故事。然后,你需要一个“编译器”,把它翻译成一种叫做“字节码”的中间语言。这个字节码就像是那个经过初步加工的故事,它不是直接的机器码,也不是原始的 Java 代码,而是介于两者之间的一种通用格式。你可以把它理解成一种“标准格式”的故事稿。

然后,当你想让某台电脑运行你的 Java 程序时,比如一台 Windows 电脑,一台 Mac 电脑,或者一部 Android 手机,你就需要在这些设备上安装一个对应这台设备操作系统的 Java 虚拟机(JVM)。这个 JVM 就是那个专门的翻译官。

当这个 JVM 拿到你那份“标准格式”的故事稿(字节码)时,它就会根据自己是运行在什么操作系统上的,把字节码翻译成这台电脑能听懂的“母语”(机器码)。就像那个英语翻译官,会把中文故事翻译成他懂的英文。

所以,你写的 Java 代码,只需要经过一次编译,变成那份“标准格式”的字节码。然后,只要有对应的 Java 虚拟机,无论这台电脑是何方神圣,都能把这个字节码翻译并运行起来。这就是“一次编写,到处运行”的神奇之处。你不用为 Windows 写一套代码,再为 Mac 写一套,更不用为手机写一套。你只需要用 Java 把故事写好,然后让 JVM 去做翻译和执行的工作。这样一来,你的故事(程序)就能轻松地跑到世界各地,被大家看到了。

网友意见

user avatar

我也来凑热闹了,这个问题前几天就看到了,懒得多说,但是居然那位写的最长的匿名的同学怒了,然后我不小心中了第一枪,这不是逼我卷袖子上场么这不是。

首先声明啊,我不打算直接就是论事,我本来就不是因为想要就事论事来回答的。


最烦这种话了,动辄就往人脑袋上扣帽子说什么屁股决定脑袋,还装模作样地表示理解,理解你个蛋蛋。还有人说要放上利益相关,特么技术的东西有什么好利益的啊,有些人眼里就只看得到屁股了是吗?而且想装平和就装像一点,装到底,不要中间暗搓搓来一枪,现在这种做法再我看来就三个字:


不过那位同学知错能改善莫大馬,我表示炉子可教(有些评论现在看不到了是因为被人举报了于是知乎删掉了谁啊那么脆弱):


嗯,言归正传。

Java能不能跨平台?当然能了。它是标准的“二进制跨平台”,就是所谓一次编译到处跑跑,在这个领域里简直毫无敌手,但问题还是在这里,作为这个领域的第一名,也几乎是唯一的一名,它还是没法突破“谁信谁傻逼”这点。

首先,二进制跨平台本身就是个很难靠谱的玩意儿,因为各个平台都有差异,这个差异要统一就要放弃很多东西,所谓Every abstraction is leaky,你二进制统一了又如何?你一次编译到处能跑又如何?用来做Client(随你SWT还是Swing了)慢得一逼丑得二逼。用来做Server,呵呵那高大上的NIO到了什么时候才在Windows上支持IOCP的?谁给查查是Java 7还是Java 8来着?要知道IOCP是NT 3.5里出现的功能啊,1994年啊,跟Java是特么的同龄人啊。

其次,二进制跨平台本身也是个伪需求。老是有人说Java流行是因为跨平台,真是跨个蛋蛋。你有过多少需求动不动把一个项目从一个平台搬到另一个平台上啊?别看我的屁股大部分是坐在.NET上面的,我在十八摸呆过啊,我也WebSphere和Tomcat之间迁移过应用啊(当然两件事没太大联系),修修改改调调到蛋疼。我一直纠正别人说,你就直接说Java可以跑在Linux上就行了,这跟跨平台关系不大。

当然我知道很多很多很多人是在Windows上写程序然后生产环境是Linux一样,我的博客也是在Win上写,然后部署在Ubuntu上面。那么都是怎么做的呢?开发一点部署一点测试一点啊,每天甚至每次提交都在测试环境的Linux服务器上部署一份啊,谁家开发的时候是在Windows上写到底,然后直接发布到生产环境的Linux里的?比如你开发出来的NIO服务器应用,在Windows上跑得性能肯定上不去啊,没IOCP啊。

总之“二进制跨平台”在我看来本身就是不靠谱的玩意儿,你Java想要做第一你自己去,反正没人跟你争十六强。

现在靠谱的跨平台都是“源代码跨平台”,就是大家都遵守一个标准,遵守一个子集,争取相互之间可共享的利益最大化,然后充分尊重各平台上的不同之处,提供各自独特的部分,要用的时候大家各自编译去。大伙儿不求100%代码共享,就求个80%万岁,然后三个平台各实现剩下的20%,你条件编译也好,通过项目结构来组织也罢,各管各的,这才叫棒。

Mono,或者说Xamarin早就这么搞了,你们还以为Mono是跟Java一样那种跨平台法?人家早就发力到各平台的Native Binding了好么。.NET推出了Portable Class Library这个Profile了好么,.NET里的Profile概念早就出现了好么,谁像Java还设法用一个普世实现想统一全世界啊?有人还拿Android做Java跨平台的例子,简直就是呵呵呵,它只是用了Java语言和一小部分核心API好吗?整套GUI框架都是不一样的,编译出的bytecode都是不一样的,完全摆脱了“二进制跨平台”的意图,充分进入了“源代码跨平台”领域好吗?这才有现实意义。

所以什么是靠谱的跨平台方式?跟我念:“源代码跨平台”,C啊C++啊Mono啊,这种才叫靠谱的跨平台方式。

至于他说:

这简直就是典型的你和他谈跨平台,他和你谈性能,你和他谈性能,他和你谈语法,你和他谈语法,他和你谈社区,你和他谈社区,他和你谈跨平台的典型了啊

跨平台还不能谈跨平台的质量了?那位同学非要说这种跨平台多么多么了得,那么就去跨好了,蛋蛋程序员最擅长说“做完了”但其实做成渣渣也无所谓,我这种专业程序员(出身的娱乐圈人士)对质量要求高。

总之最重要的是:光说“实现了”而不管“实现质量”和“现实意义”的那就是耍流氓,说谁信谁傻逼一点没错。

PS:说完了,写代码去了,别跟我争论,没出息。

类似的话题

  • 回答
    想象一下,你写了一个特别棒的故事,你想让全世界的人都能读到,而且不管他们是用什么纸写的,都能看到同样精彩的内容。Java 的“一次编写,到处运行”就有那么点意思。你写的 Java 代码,就像是那个被精心打磨过的故事。但这个故事不是用普通的文字写成的,而是用 Java 这种特殊的语言写成的。你可以把它.............
  • 回答
    想象一下,我们想用计算机搭建一座座奇妙的建筑,从一座简单的小木屋到一座功能齐全的摩天大楼。那么,这些我们常听到的编程语言和标记语言,就像是建造这些建筑的不同材料、工具和设计图纸。C 语言,你可以把它想象成一块非常结实的,但需要你一点点打磨和塑形的石头。它的优点是纯粹,直接,能让你非常深入地控制计算机.............
  • 回答
    好的,我们来尝试用最通俗易懂的方式,一步步地拆解卷积,并且讲得详细一些。想象一下你正在做一件很有趣的事情,我们把这个过程叫做“信息融合”或者“特征提取”。卷积就是一种实现这种“信息融合”或“特征提取”的强大工具。 核心思想:滑动和相乘,然后求和卷积最核心的操作可以用一个简单的比喻来概括:就像你用一把.............
  • 回答
    好的,让我们用最通俗易懂的方式来解释遗传算法,并举一些例子,尽量讲得详细一些。什么是遗传算法?想象一下大自然中的进化过程,也就是“物竞天择,适者生存”。遗传算法就是模拟了这个过程,来解决一些非常复杂的问题。简单来说,遗传算法就是一种“模拟自然选择和遗传机制来搜索最优解”的方法。它就像我们在训练一个团.............
  • 回答
    好的,我们来用最通俗易懂的方式,并且详细地解释一下「协方差」和「相关系数」这两个概念。想象一下,我们有两个小伙伴,一个叫小明,一个叫小红。我们想知道小明和小红这两个人的成绩(假设是数学成绩)之间有没有什么联系,或者说他们俩的成绩是“一起变动”还是“各自变动”的。 第一步:理解“一起变动”的意思 – .............
  • 回答
    你有没有想过,为什么有些公司或者组织,明明一开始很有闯劲,却慢慢变得越来越“保守”,甚至有点“僵化”,做事畏首畏尾,不像以前那样有活力了?这背后可能就藏着一个叫做“尺蠖效应”的道理。咱们用一个大家都可能经历过的场景来打比方:想象一下,你刚开始学习一门新技能,比如做蛋糕。刚开始,你可能特别兴奋,上网搜.............
  • 回答
    好的,我们来聊聊银行在评估贷款风险时会用到的一些“工具”,分别是“信用风险附加法模型”和“信用度量术模型”。别被这些专业名词吓到,其实它们背后是有很朴素的道理的。想象一下,你要借钱给一个朋友,你会怎么做?你肯定会想: 他靠谱吗?会不会借了钱就不还了?(这就是“违约”的可能性) 万一他不还,我.............
  • 回答
    话说,你有没有遇到过这样的情况:朋友急需一笔钱周转,但又拿不出什么抵押物,怎么办?这时候,他可能会找到一个愿意“帮忙”的中间人,这个人手里有钱,但他也不能白白把钱借出去,毕竟借出去的钱是有风险的。“融资性贸易”听起来好像很高大上,但其实骨子里,它就像是朋友之间一个有点“绕”但又彼此都能接受的解决方案.............
  • 回答
    想象一下,我们都活在一个有点像你家后院那么大的世界里。在这个世界里,你想从院子的一头走到另一头,可能花上几分钟。如果你骑自行车,那速度会更快,可能就几十秒。我们都知道,物体在空间中移动是有速度的,而这个速度是有限的。现在,把你的后院想象成整个宇宙。你走到另一头的时间,就变成了光从一个地方传到另一个地.............
  • 回答
    “五毛”这个词,估计你肯定听过,尤其是在网上冲浪的时候。它有点像是一个江湖名号,但背后却藏着挺有意思的故事和一些现实情况。“五毛”到底是个啥?简单来说,“五毛”最早指的是一种报酬。具体来说,就是有人在网上发表一条支持政府、歌颂党或者批评反对派的言论,然后能拿到“五毛钱”的报酬。当然,这个“五毛钱”是.............
  • 回答
    没问题,咱们来聊聊“外微分”这个概念,保证听起来就像是邻家大妈在给你讲故事,一点也不枯燥。想象一下,我们生活在一个三维世界里,对吧?我们有长度、宽度、高度。我们可以量一个东西有多长(一维),也可以算一块地有多大(二维),还能知道一个房间有多大的体积(三维)。外微分,说白了,就是一种给“形状”打微分的.............
  • 回答
    话说,踢足球这事儿,可不是光靠蛮力往前冲就行。得有门道,得有人各司其职,还得讲究个怎么站。这就像咱们平时生活,有老板、有员工、有会计,各司其职才能把事儿办好。足球场上,球员们也有各自的“工种”,这就是位置。而把这些“工种”们排个队,摆个阵,就是阵型。咱们一个个来看,就像咱们拆个大礼包一样,一层层揭开.............
  • 回答
    你知道吗,咱们平时听歌的时候,经常会在歌名后面看到一个“feat.”,比如“周杰伦 feat. 蔡依林”或者“Taylor Swift feat. Ed Sheeran”。这玩意儿到底是个啥意思?其实,它很简单,就像是给歌曲加了个“特别嘉宾”。咱们把它拆开来看,“feat.”是“featuring”.............
  • 回答
    好,咱们今天就来聊聊一个听起来挺玄乎,但其实挺有意思的东西——粒子的“自旋”。你先别被“自旋”这俩字儿给吓住,它可不是说粒子真的像个小陀螺那样,在原地不停地转悠。这只是个比喻,一个帮助我们理解粒子内在性质的比喻。想象一下,你手里有一个小弹珠。这个弹珠,它本身没有什么“转”或者“不转”的概念,对吧?但.............
  • 回答
    “电网的运行方式”,这说白了,就像一个城市里的交通系统,不过它控制的是我们用电的“流动”。咱们来好好聊聊,把它掰开揉碎了讲明白。想象一下,我们城市里的交通,是不是有很多指挥交通的信号灯、交警,还有高速公路、普通街道,各种车辆川流不息? 电网也差不多,只不过它的“车辆”是电,而“道路”就是那些粗粗细细.............
  • 回答
    想象一下,一个国家就像一个大户人家,这个家庭日常生活的方方面面,都要用到钱。而“外汇储备”,就像是这个家庭“私房钱”里,专门存起来用于和外面人打交道的那一部分。什么是“外汇”?咱们先说说“外汇”是什么。外汇,简单来说,就是“外国的钱”。比如,你是中国人,你手里拿着人民币。但如果你要去美国旅游,你就需.............
  • 回答
    咱们今天就来聊聊法国那位有点神秘又有点难懂的心理学家,拉康,他提出的那三个听起来有点绕口,但其实特别有意思的“世界”:实在界、想象界和象征界。别怕,我尽量用大白话给你讲清楚,就像咱们平时聊天一样,不搞那些学术名词,让你一听就明白。想象一下,我们每个人,从刚出生那个懵懵懂懂的小婴儿开始,就是一个个独立.............
  • 回答
    你想知道 Base64 是怎么回事是吧?别担心,这东西听起来有点高科技,但拆开了看,其实挺好玩的。咱们就用大白话聊聊,保证你听了就明白。想象一下,我们有一样东西,比如一张图片,或者一段文字。咱们的电脑处理文字和数字可溜了,比如 A、B、C,或者 1、2、3,它都能明白。但要是遇到一些特别的字符,比如.............
  • 回答
    想象一下,你是个指挥家,手里拿着一堆乐谱,上面密密麻麻地写满了音符、节奏和指挥的提示。你的任务是把这些乐谱变成美妙的音乐,让乐队按照你的指示演奏。脚本,就像是计算机世界的“乐谱”。它不是随随便便写几句话就能让电脑做什么事情,而是用一种特定的语言,把一系列的“动作”或者“命令”按照顺序写下来。这些动作.............
  • 回答
    想象一下,我们平时看到的世界,一切都是那么规矩,东西有确定的位置,运动也有确定的轨迹。比如你扔一颗球,你知道它会飞多远,落在哪。但量子力学呢,它研究的就是那些小得不能再小的东西,比如构成我们身体、桌子、空气的最基本的粒子们——电子、光子等等。在那个微观世界里,事情就变得有点“不讲道理”了。1. 粒子.............

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2025 tinynews.org All Rights Reserved. 百科问答小站 版权所有