03从零开始学Java之Java运行机制与跨平台特性
创始人
2024-05-31 04:27:30
0

博主简介

我是壹壹哥(孙玉昌),十年软件开发授课经验,CSDN博客专家、阿里云专家博主、infoQ专家博主;
关注壹壹哥(孙玉昌),带你玩转Java,轻松实现从入门到放弃,哦不,到熟悉🤭
曾任国内物流行业某独角兽企业架构师;
曾主导研发油田、广电、教育、物流等行业项目,拥有丰富的行业方案解决经验;
现从事软件开发教育工作,培养了大量入职阿里、华为、百度、IBM等名企的高薪学生;
坚持”一心做教育,做一流教育“的理念,被学生爱称为"一一哥"、"壹壹哥"。

------------------------------前戏已做完,精彩即开始---------------------------

全文大约【4000】字,不说废话,只讲可以让你学到技术、明白原理的纯干货!并带有丰富案例及配图视频,让你更好的理解和运用文中的技术概念,给你带来具有足够启迪的思考......

在上一篇文章中,壹哥给大家介绍了Java的历史由来、特性、版本等纯理论性的知识。其中我给大家提到了一个重要的”跨平台“特性,对很多入门小白来说,还是不明白”跨平台“是啥意思。所以在开始真正操作Java代码之前,壹哥还要再利用一篇文章给大家解释一下到底啥是”跨平台“,以及Java是如何实现”跨平台“的。而要真正弄清楚”跨平台“的含义,我们必须了解一下Java代码的开发步骤,以及JVM虚拟机等内容。

一. 高级编程语言分类

壹哥在上一篇文章中给大家说过,高级编程语言可以分为两大类,如下:

编译型:C、C++、Pascal等;
解释型:Basic、JavaScript、Python等。

1. 编译型语言

编译型语言在程序执行之前有一个专门的编译过程,编译器会把程序编译成针对不同CPU类型的可执行文件,之后再由机器运行这个可执行文件。运行时不再需要重新翻译,直接使用编译的结果就行。编译型语言的工作原理类似于“翻译书籍”。

在同一平台(操作系统)上,编译型语言可以一次编译,无限次运行。只要在首次执行前编译生成相应的可执行文件,以后每次运行时直接运行这个可执行文件即可,因此其运行效率高于解释型语言。

但针对不同平台(操作系统),要生成的可执行文件却并不相同,因为不同平台支持的函数、类型、变量等可能都不同。所以编译型语言写出来的代码,要想在不同类型的操作系统上运行,必须经历多次不同的编译,故难以实现在不同操作系统间随意地切换,可移植性较差。

2. 解释型语言

解释型语言则是一边转换一边执行,不会把源代码生成可执行的文件。而是会把源码翻译成中间代码,再由解释器对中间代码进行解释运行,每执行一次都要翻译一次。解释型语言的工作原理类似于“同声传译”。

解释型语言写出的代码,每次运行时都要重新转换源代码。会有一个解释器根据操作系统的不同,将源代码转换成不同的机器码。所以相同的源代码,可以实现在不同的平台上运行,即“一次编写,到处运行”。但解释型语言每次执行时都要重新转换源代码,在效率上天生低于编译型语言。

总之,编译型和解释型语言各有其优缺点!

3. Java语言特点

而我们的Java语言,确切地来说,既不是编译型语言,也不是解释型语言,而是结合了以上两种语言类型的优点。Java会先对源代码进行编译,再将编译后的字节码文件解释执行!

接下来,壹哥重点给大家说一下Java语言到底是如何对程序进行处理的。

二. Java程序开发步骤

为了讲清楚Java程序的开发步骤,我们先来看下图:

从上图可以看出,Java对代码的处理过程可以分为3个核心步骤:

1. 编写源程序:这一步是利用各种开发工具,如记事本、eclipse、idea等编写Java代码,生成后缀为.java的源码文件。大家注意,我们可以在任何操作系统中编写Java代码。
2. 编译源程序:这一步是Java编译器对.java文件进行编译,生成后缀为.class的字节码文件。大家注意,这里生成的.class字节码文件,和操作系统也没有关系。
3. 运行:这一步是利用JVM虚拟机,将.class字节码文件加载进虚拟机中运行。大家注意,我们如果想要将生成的.class字节码文件,在不同的操作系统中运行,需要安装对应系统的JVM虚拟机才行。

作为初学者,我们需要记住Java处理代码的以上这三个步骤,即”编写、编译、运行“,另外还要知道编写和编译阶段生成的文件后缀是什么。

壹哥只是简单地给大家展示了以上三个阶段的基本内容,但实际上这三个阶段在JVM中处理起来是非常复杂的,更多详细内容可以参考下图:

当然,对一个初学者来说,你暂时不必掌握的这么细致,这些内容我们会在以后的章节中进行更详细的讲解。了解了Java程序的处理步骤之后,我们再来学习一下什么是”跨平台“。

三. 跨平台

1. 概念

首先我们得知道这里的”平台“指的是什么。所谓的平台,其实就是指计算机操作系统,比如windows、linux、mac系统。而跨平台则是软件开发中的一个重要概念,即软件不依赖某个具体的操作系统,也不依赖某个具体的硬件环境。在一个操作系统下开发的应用,放到另一个操作系统下依然可以运行。通俗地说,我们开发出来一个软件,可以同时在windows、linux、mac等系统中运行,这就是”跨平台“!

2. 特性

Java语言具有”跨平台“的特性,是相对于其他编程语言来说的。这是因为Java语言编写出的应用程序,只需要编写一次代码,就可以在不同的系统上运行。而其他的一些高级语言,比如C语言写出的代码,如果想在不同的平台上运行,需要编译成针对不同系统平台的目标代码。比如在Windows系统中编译的C语言程序,在Linux下是不能运行的,需要重新编译成Linux下的目标程序。反之,在Linux下编译的C语言程序,在Windows下也不能运行。

而Java在不同平台上运行时,就不需要针对不同的平台多次重新编译,这样就实现了所谓的“Write Once,Run Anywhere”。

现在你可能会很好奇,为什么C、C++不能实现跨平台,而Java却可以实现跨平台?要想搞清楚这个问题,我们得了解一下什么是JVM虚拟机。

四. JVM虚拟机

1. 概念

JVM:Java Virtual Machine。这是一种抽象的计算机,是在真实的计算机中仿真模拟出各种计算机的功能。简单地说,我们可以把JVM理解成是一个”软件“,该软件相当于一个小型的”计算机系统“。虚拟机有自己完善的硬体架构,如处理器、堆栈、寄存器等,还有各种指令系统。Java虚拟机屏蔽了与具体操作系统平台相关的信息,使得Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种操作系统平台上不加修改地运行。

JVM最核心的一个模块叫Java解释器,相当于是计算机的“CPU”,可以将.class字节码解释成适合不同操作系统的可执行代码。Java解释器实际上就是特定系统平台下的一个应用程序,只要实现了这个解释器程序,Java字节码就能通过该解释器在该平台下运行,这是Java之所以可以实现跨平台的根本原因所在!

但目前并不是所有的操作系统都有自己对应的Java解释器,所以Java程序并不能在所有的操作系统下运行。它只能在已实现了Java解释器的平台中运行,比如windows、linux、mac等主流平台。

2. 种类

目前商用的Java虚拟机有很多种,其中比较主流的有如下几个:

1. 适用于JavaSE/JavaEE平台的主流JVM(按流行程度递减):HotSpot VM、J9 VM、Zing VM。
2.适用于JavaME平台的主流JVM:CLDC-HI、J9 VM;
3.适用于Android系统的主流JVM:Dalvik VM、ART VM;
4.其他。

对于以上这些虚拟机种类,我们作为初学者简单了解即可,尤其是对HotSpot VM有印象就行,这是我们进行Java开发默认使用的标准JVM。

3. 跨平台实现原理(重点)

有了以上这些知识的铺垫,我们就可以尝试着理解Java之所以可以实现跨平台的原理了!

3.1 C语言的编译过程

为了能让大家搞清楚Java的跨平台原理,我们还是先拿C语言的编译过程进行对比,如下图所示:

从上图可知,在windows系统下,我们编写的C语言源码文件后缀是.c,在windows平台下进行编译会生成后缀名为.exe的可执行文件,经常安装软件的同学应该对这个.exe后缀不陌生。生成.exe文件后,就可以在windows系统中运行了。

但是如果我们换一个linux操作系统,即使是同样的C语言代码,在没有进行重新编译的前提下,是无法直接运行的。windows里的.exe可执行文件,在linux中是不能执行的!所以我们需要将之前的C语言程序,针对linux平台重新编译,生成适合于linux平台的可执行文件才行。

以上就是C语言针对不同平台的编译过程,换一个平台就得编译一次,所以C语言是无法实现跨平台的!但Java却可以实现跨平台,它是怎么做到的呢?我们往下看!

3.2 Java语言的编译过程

Java之所以可以实现跨平台,最根本的原因是由于JVM虚拟机的存在!我们先来看下图:

根据上图,并结合之前壹哥给大家讲过的Java编程步骤,我们知道Java编程要经历编写、编译、执行这三个核心步骤。而在执行之前,我们会把.java源码文件编译成.class字节码文件,这里的.java文件、.class文件和具体的操作系统无关,无论是windows/linux/mac等任何系统,这些文件都是一样的。那Java到底是依靠什么,才能实现不同操作系统上跨平台的呢?从上图可以很明显的看出,关键在于JVM Java虚拟机!正是因为存在JVM虚拟机,所以Java才能实现跨平台!

那JVM又是如何实现跨平台的呢?

3.3 JVM跨平台实现机制

JVM之所以可以实现跨平台,原理其实很简单!其实JVM本身并没有实现跨平台,也就是说不同的操作系统中,需要不同的JVM虚拟机,如下图所示:

所以,如果我们想在Windows系统下开发Java项目,就需要去Oracle官网下载安装一个Windows版的JVM;如果我们想在Linux系统下开发Java项目,就需要去Oracle官网下载安装一个Linux版的JVM;其他系统以此类推。也就是说,.java文件、.class文件,无论在哪个系统上都是一样的,但JVM是不一样的,基于此实现了跨平台!如下图所示:

从上图可知,Java源程序编译后生成的.class字节码,.class字节码文件运行在JVM虚拟机上,并不直接运行在具体的Windows系统上,而JVM虚拟机又分为Windows版、Linux版、Mac版。JVM充当了中间人的角色,把.class文件和操作系统分割并联系了起来,.class文件不和操作系统直接交互,而是由JVM和操作系统进行交互。

我们可以在Windows、Linux、Mac等任意系统中编写Java程序,并生成.class字节码文件,但要想实现跨平台,则需要安装Windows、Linux、或Mac等系统自己版本的JVM虚拟机。然后把字节码文件放到不同系统下的JVM虚拟机中运行,这样就实现了所谓的跨平台。这样我们程序员就只需要去编写和编译Java代码,至于跨平台的事情,是JVM要做的,我们不关心!

所以说,Java跨平台的根本原理,就是通过JVM虚拟机来实现的!但你要知道,Java语言是跨平台的,JVM却不是跨平台的,不同的操作系统有不同版本的JVM!

-----------------------------正片已结束,来根事后烟----------------------------

五. 结语

至此,壹哥就重点把跨平台的实现原理给各位讲解了,现在你知道Java为什么可以实现跨平台了吗?如果你还有不明白的地方,可以在评论区给壹哥留言或私信哦。

在下一篇文章中,壹哥会正式带各位搭建Java开发环境,这可是学习Java之前的必备内容哦,请你一定不要错过,敬请期待哦!

如果你独自学习觉得有很多困难,可以私信壹哥,加入壹哥的学习互助群,大家一起交流学习。

六. 配套视频

如果你不习惯阅读技术文章,或是对文中的技术概念不能很好地理解,可以来看看壹哥帮你筛选出的视频教程,本文配套的Java学习视频链接如下:

https://player.bilibili.com/player.html?bvid=BV1FK4y1x7Ny&p=6&page=6

注意:本节视频中后半段内容讲解的是跨平台原理,前半段是doc命令操作,大家可以直接快进观看跨平台原理!

七. 今日作业

1. 第一题

请简述编译型语言和解释型语言的区别,请在评论区给出你的答案。

2. 第二题

简述Java程序的开发步骤有哪些?每个阶段生成的文件后缀是什么?评论区给出你的答案吧。

3. 第三题

请简述JVM虚拟机实现跨平台的基本原理,在评论区给出你的答案。

相关内容

热门资讯

感恩的心串词21篇 感恩的心串词21篇  一、串词的构成要素  1、思想的深刻性;  2、知识的广泛性;  3、宣传主题...
闭幕式主持词 【必备】闭幕式主持词3篇  借鉴诗词和散文诗是主持词的一种写作手法。在当今社会生活中,主持成为很多活...
简短的上台领奖致感谢词 简短的上台领奖致感谢词(精选5篇)  获奖能在台上致感谢,不仅是一份荣誉,更是一份激励。以下是小编为...
读书会的主持词 关于读书会的主持词  主持词分为会议主持词、晚会主持词、活动主持词、婚庆主持词等。在各种集会、活动不...
档案培训班开班仪式主持词   档案管理培训班开班仪式主持词  (请大家安静,我们现在举行培训班开班仪式)  各位领导,各位学员...
学校教师团拜会主持词 学校教师团拜会主持词  主持词是主持人在节目进行过程中用于串联节目的串联词。在现今人们越来越重视活动...
培训开班仪式致辞 培训开班仪式致辞(精选19篇)  无论是在学校还是在社会中,大家肯定对各类致辞都很熟悉吧,致辞是指在...
舞蹈串烧节目主持词 舞蹈串烧节目主持词  舞蹈串烧节目应该怎么进行主持呢?以下是小编整理的舞蹈串烧节目主持词,欢迎参考阅...
元旦节目主持词 2023元旦节目主持词范文(通用16篇)  主持词是主持人在台上表演的灵魂之所在。随着中国在不断地进...
结婚典礼新郎父亲致辞 结婚典礼新郎父亲致辞(精选13篇)  在平平淡淡的学习、工作、生活中,大家对致辞都不陌生吧,致辞具有...
美剧经典台词摘选 美剧经典台词摘选  Men are not prisoners of fate, but priso...
富有诗意的开学典礼的致辞 富有诗意的开学典礼的致辞范文(通用10篇)  在日常的学习、工作、生活中,大家都不可避免地要接触到致...
女方婚礼出阁宴主持词 女方婚礼出阁宴主持词范文(通用9篇)  主持词可以采用和历史文化有关的表述方法去写作以提升活动的文化...
公司春节团拜会主持词 公司春节团拜会主持词  主持词需要富有情感,充满热情,才能有效地吸引到观众。现今社会在不断向前发展,...
灾害急救知识及技能竞赛主持词 灾害急救知识及技能竞赛主持词  主持词要注意活动对象,针对活动对象写相应的主持词。在现在的社会生活中...
赌侠经典的台词 赌侠经典的台词  刘德华,周星驰试图将《赌神》和《赌圣》的名牌发扬光大的作品,这部《赌侠》也是他们早...
小学生开学典礼主持词 小学生开学典礼主持词  主持词需要富有情感,充满热情,才能有效地吸引到观众。在当下的社会中,主持人在...
酒鬼酒著名广告词 酒鬼酒著名广告词发布时间:2017-04-01  1.酒鬼背酒鬼,千斤不嫌赘;酒鬼喝酒鬼,千杯不会醉...
优秀班会主持词 2017年优秀班会主持词  班会是班主任做好班级管理工作的一条有效途径。主持词要怎么说呢?下面是小编...
婚宴主持人词 婚宴主持人词  婚宴开始  尊敬的各位来宾,尊敬的各位亲朋好友,大家晚上好!在这天地之合的喜庆之日,...