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虚拟机实现跨平台的基本原理,在评论区给出你的答案。

相关内容

热门资讯

书信英语作文 书信英语作文(通用15篇)  在平平淡淡的`学习、工作、生活中,大家都不可避免地要接触到书信吧,书信...
我的社区英语作文带翻译 我的社区英语作文带翻译  My neighbourhood is very kind.He is f...
初一英语日记带翻译【优质6篇... 初一英语日记带翻译 篇一My First Day of Junior High School我在初中...
英语作文初中【经典6篇】 英语作文初中 篇一:如何学好英语As an important international lang...
我喜欢的食物英语作文【实用6... 我喜欢的食物英语作文 篇一My Favorite FoodAs a food lover, I ha...
英文儿歌Ten little... 英文儿歌Ten little Indians歌词 篇一Ten little Indians is a...
对比型英语作文范文大学【优选... 对比型英语作文范文大学 篇一Title: Learning in College vs. Learn...
我家乡的变化英语作文(最新6... 我家乡的变化英语作文 篇一The Changes in My HometownOver the pa...
Mid Autumn Fes... Mid Autumn Festival英语作文 篇一The Mid Autumn Festival,...
初中必考科目英语作文范文【通... 初中必考科目英语作文范文 篇一:我的暑假计划暑假是初中生活中最令人期待的假期之一。对我来说,今年的暑...
高考英语作文范文展示【优秀3... 高考英语作文范文展示 篇一My Dream JobIt is said that choosing ...
难忘的经历英语作文【优质3篇... 难忘的经历英语作文 篇一An Unforgettable ExperienceLast summer...
英语作业信件格式范文初中【优... 英语作业信件格式范文初中 篇一Dear Teacher,I hope this letter fin...
英语书信类作文句子(优质3篇... 英语书信类作文句子 篇一Dear Mr. Johnson,I am writing to expre...
二年级英语作文:明天会更好 ... 二年级英语作文:明天会更好 Tomorrow Will be Better 篇一Tomorrow i...
我的漂亮表姐作文【实用3篇】 我的漂亮表姐作文 篇一我有一个漂亮的表姐,她叫小雨。小雨是一个非常有魅力的女孩,她拥有一双大大的眼睛...
母语的重要性英语作文(精选3... 母语的重要性英语作文 篇一Title: The Importance of Mother Tongu...
英语作文:My School... 英语作文:My School Life 我的学校生活 篇一My School LifeMy scho...
美国自由行作文800字(通用... 美国自由行作文800字 篇一美国自由行是许多人梦寐以求的旅行方式。没有固定的行程安排和限制,自由行让...
面试英语情景短篇对话范文【精... 面试英语情景短篇对话范文 篇一Title: A Job Interview for a Sales ...