首先我们都知道java语言是跨平台执行语言,那么为什么这么说呢?首先跨平台执行是什么意思,意思就是同一段代码A在windows上可以执行也可以在linux上执行。那么java是怎么做到的呢,简单的来说是因为jvm的存在,大家打开官网的下载jdk的时候会发现有windows版本也有linux版本,这就是问题的关键,上面说的代码A可以两处执行的前提就是对应系统上安装了适合自己对应的jvm,而这个jvm就充当着翻译员的作用,代码A的.java文件被编译为A的.class文件之后就交给jvm了,剩下的windows的jvm就利用这个class文件和windows操作系统打交道,linux的jvm就和linux操作系统打交道,所以说java是跨平台执行语言。
这个过程中就有几个问题了,什么是操作系统,什么又是编程语言,编程语言又是如何操作计算机的。
1.操作系统其实就是一个程序软件,安装在硬盘之中,运行与内存之中
2.编程语言是一种人和计算机说话的语言,人为什么要和计算机说话,因为人需要通过计算机完成一些事情,比如我现在在写博客,就是需要计算机帮我输出这些文字。
那么java就能和计算机说话吗,其实不是,编程语言有一个进化史,首先是机器语言(二进制0和1组成)->汇编语言(字母组成)->高级语言(字母组成但是语意更接近人类语言)
2.1 而这其中可以被计算机直接识别并且执行的只有机器语言。而机器语言是与具体机器息息相关的,windows的机器语言和linux的机器语言肯定是不一样的,意思就是同是0101,但是可能在windows上表示是开而在linux上表示关。
2.2 汇编语言虽然不能被计算机直接识别,但是它和机器语言存在着对应关系,也就是汇编语言编译完了之后就是机器语言了
2.3 高级语言也不能被计算机直接识别,也是需要被编译成机器语言才能被识别执行,那么问题来了,汇编语言和高级语言的区别在哪里? 举个例子:定义一个变量,高级语言是x=10;汇编语言是mov 10h,#10(基于硬件A),这里括号里面为什么要注释基于硬件A,因为如果换成硬件B了,汇编语言中该定义方式需要改变,所以说汇编语言是对硬件有强依赖关系,而高级语言没有,导致高级语言的移植性要好很多。
2.4 我们知道java文件会被编译成class文件,而class文件是二进制文件,而这个class文件是机器语言吗?答案当然不是,因为它并不能直接被计算机识别执行,它只是能直接被jvm识别的二进制文件,记住一条就行,能直接被计算机直接识别和执行的文件一定不是跨平台的,因为硬件不同,那么它同一个指令的指令码肯定是不一样的。
3.编程语言是如何操作计算机的,具体应该是说机器语言是如何操作计算机的?
我们知道CPU只干三件事:与,或,非
与:真真为真,其中只要有一假就为假
或:只要有一真,即为真
非:真为假,假为真
真假对应1和0;
编程语言被编译为机器语言之后的10组合就形成了高低电平组合,而计算机本身就是一个庞大的设计好的用高低电平组合控制的开关组,当给这个开关组输入一个高低电平组合,就会导致它内部出现复杂的开关动作,最后输出另外一组高低电平组合,而这个输出结果能被相应的硬件执行对应的操作。