二、初懂Java

初懂java

一、java跨平台原理

​ Java程序并非是直接运行的,Java编译器将Java源程序编译成与平台无关的字节码文件(class文件),然后由Java虚拟机(JVM)对字节码文件解释执行。所以在不同的操作系统下,只需安装不同的Java虚拟机即可实现java程序的跨平台。

首先,我们使用文本编辑器编写 Java 源程序(.java文件)。

然后,使用 Java 编译器(javac)对源程序进行编译。编译器会检查代码的语法和语义错误,并将 Java 代码编译成字节码(.class文件)。

接下来,在运行时,Java 虚拟机(JVM)加载并解释执行字节码。

某些情况下,JVM 也会采用即时编译(Just-In-Time Compilation,JIT)技术。JIT 会在程序运行时,将一些频繁执行的字节码段编译成本地机器码,使得后续对这些代码段的执行变为直接执行机器码,从而大大提高程序的执行速度。

最终,通过 JVM 的这些工作,将我们编写的 Java 代码转换为 CPU 能够识别和执行的机器指令,从而完成程序的运行。具体过程如下:java程序的创建和运行

具体演示过程如下:

以下列代码为例:(编译器:notepad++)

import java.util.Scanner;
public class Demo1{
public static void main(String[] args) {
	Scanner sc = new Scanner(System.in);
        System.out.println("请输入您的期末成绩:");
		 int score =sc.nextInt();
		 if (score==100){
			 System.out.println("奖励一辆BMW");
			 
		 }else if(score>80&&score<=99){
			 System.out.println("奖励一台iphone xs max");
			 
		 }else if(score>=60&&score<=80){
			 System.out.println("奖励一个 iPad"); 
		 }else{
			 System.out.println("还想要奖励,吃屁去吧!");
		 }
		 
           }
}

在编译器中输入上述代码并保存在一个文件夹里。
保存代码
控制台找到文件

输入“javac 文件名.java”回车

之后在java文件夹生成后缀为class的字节码文件。

生成后缀为class的字节码文件
字节码文件
输入“java 文件名”回车

编译

按程序要求输入

输出效果

  • JVM:JVM 是一个虚拟的计算机,它负责将字节码解释成对应平台的机器指令。在解释执行过程中,JVM 会根据需要进行一些优化工作,以提高执行效率。

  • class文件:ava字节码类文件(.class)是Java编译器编译Java源文件(.java)产生的“目标文件”。它是一种8位字节的二进制流文件, 各个数据项按顺序紧密的从前向后排列, 相邻的项之间没有间隙, 这样可以使得class文件非常紧凑, 体积轻巧, 可以被JVM快速的加载至内存, 并且占据较少的内存空间(方便于网络的传输)。字节码是一种与平台无关的中间代码格式。***

    Java源文件在被Java编译器编译之后, 每个类(或者接口)都单独占据一个class文件, 并且类中的所有信息都会在class文件中有相应的描述, 由于class文件很灵活, 它甚至比Java源文件有着更强的描述能力。
    class文件中的信息是一项一项排列的, 每项数据都有它的固定长度, 有的占一个字节, 有的占两个字节, 还有的占四个字节或8个字节, 数据项的不同长度分别用u1, u2, u4, u8表示, 分别表示一种数据项在class文件中占据一个字节, 两个字节, 4个字节和8个字节。 可以把u1, u2, u3, u4看做class文件数据项的“类型” 。详细介绍参考https://www.jianshu.com/p/247e2475fc3a

  • JIT:在计算机技术中,即时编译(英语:just-in-time compilation,缩写为JIT;又译及时编译、实时编译),也称为动态翻译或运行时编译,是一种执行计算机代码的方法,这种方法涉及在程序执行过程中(在执行期)而不是在执行之前进行编译。通常,这包括源代码或更常见的字节码到机器码的转换,然后直接执行。实现JIT编译器的系统通常会不断地分析正在执行的代码,并确定代码的某些部分,在这些部分中,编译或重新编译所获得的加速将超过编译该代码的开销。
    JIT编译是两种传统的机器代码翻译方法——提前编译(英语:ahead-of-time compilation)(AOT)和解释——的结合,它结合了两者的优点和缺点。大致来说,JIT编译将编译代码的速度与解释的灵活性、解释器的开销以及额外的编译开销(而不仅仅是解释)结合起来。JIT编译是动态编译的一种形式,允许自适应优化(英语:adaptive optimization),比如动态重编译和特定于微架构的加速[nb 1]——因此,在理论上,JIT编译比静态编译能够产生更快的执行速度。解释和JIT编译特别适合于动态编程语言,因为运行时系统可以处理后期绑定(英语:Late binding)的数据类型并实施安全保证。
    详细介绍参考:https://blog.csdn.net/weixin_42626412/article/details/123958458

    知识补充 JVM,JDK,JRE三者的关系
    JVM:java虚拟机
    JRE:java运行环境,包括JVM和java核心类库
    JDK:java开发工具,包含JRE和开发工具
    JRE是Java程序运行必备的条件。


#####JDK=JRE+开发工具
JRE=JVM+核心类库
核心:JRE


在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值