Java基础学习笔记二

Java的加载与执行

Java既是编译型语言又是解释型语言

question:为什么JVM可以跨平台执行

answer :
Java虚拟机(JVM)之所以能够跨平台执行,是因为它在不同操作系统上提供了一个统一的运行环境,实现了Java程序的平台无关性。以下是几个关键原因:

字节码:Java源代码在编译时被编译器转换成字节码,而字节码是一种与具体平台无关的中间表示形式。这意味着Java程序不直接在特定平台上运行,而是运行在JVM上,JVM负责将字节码解释或编译成特定平台的机器码。

JVM实现:JVM的实现者根据不同的操作系统和硬件平台,开发了相应的JVM实现。这些实现负责在不同平台上提供与Java程序交互的接口,并将字节码转换为本地机器码。这样,只需要针对特定平台开发适当的JVM实现,就可以在该平台上执行Java程序。

JVM规范:Java虚拟机规范定义了JVM的行为和要求,包括字节码格式、内存模型、类加载机制、垃圾回收等。这个规范确保了不同的JVM实现遵循相同的规则,从而使得Java程序在不同的JVM上具有一致的行为。

运行时环境:JVM提供了一个独立于底层操作系统的运行时环境,它屏蔽了底层操作系统的差异性。JVM负责管理内存、线程、安全性等方面的任务,使得Java程序能够在不同平台上以相似的方式运行。

综上所述,JVM的跨平台执行能力是通过将Java程序编译为平台无关的字节码,并在不同平台上提供适当的JVM实现来实现的。这种设计使得Java程序可以在任何安装了相应JVM的操作系统上运行,提供了可移植性和平台无关性的优势。

在这里插入图片描述

编译阶段

.java --> 通过javac命令 --> .class

  • .java : java程序员编写的java源代码
  • javac : 专门负责编译,检查.java文件语法是否合法,如果不合法,会有错误提示
  • .class : 字节码文件,编译成功的产物。只有JVM能理解该文件(字节码文件不是机器码文件(0101010))

java

java只是一个命令,通过这个命令可以运行java程序,只要它执行,JVM就启动了

运行阶段

JVM --> 操作系统 --> 硬件


在JVM中:

  1. 类加载器(classLoader)根据CLASSPATH环境变量找到.class文件并装载进去
  2. 加载class文件到内存
  3. 连接
  4. 初始化
  5. 执行
  6. 卸载

java加载与执行

需要注意的

  1. 包含两个阶段 : 编译阶段和运行阶段
  2. 编译阶段和运行阶段可以在不同的操作系统上完成
  3. 编译后删除java源程序,不会影响程序的执行
  4. 生成的class文件如果是A.class 则 类名为A
  5. javac是负责编译的命令
  6. java是负责运行的命令
  7. JVM会把class字节码解释为机器码,这样操作系统才能看懂
  8. JDK是什么

JDK(Java Development
Kit)是Java开发工具包,它是用于开发Java应用程序的软件包。JDK包含了开发和调试Java程序所需的工具、编译器、运行时环境和类库。

JDK提供了以下主要组件:

  • 编译器(javac):JDK中的编译器将Java源代码(扩展名为.java)编译为字节码文件(扩展名为.class),这些字节码文件可以在Java虚拟机(JVM)上运行。

  • Java运行时环境(JRE):JDK中包含了完整的JRE,用于在本地机器上执行Java应用程序。JRE包括Java虚拟机(JVM)和Java类库,它提供了Java程序运行所需的基本功能和API支持。

  • 开发工具:JDK提供了一系列的开发工具,如调试器(jdb)、打包工具(jar)、文档生成工具(javadoc)等,用于开发、调试、打包和文档化Java应用程序。

  • 类库:JDK包含了广泛的Java类库,提供了丰富的API和功能,包括集合框架、输入输出、网络编程、数据库访问、图形用户界面(GUI)等。这些类库可以帮助开发者更快速地开发Java应用程序。

除了上述组件,JDK还提供了各种工具、配置文件和示例代码,以帮助开发者更好地进行Java应用程序的开发和调试。
在这里插入图片描述

  1. JRE(Java Runtime Environment)是Java运行时环境,它是Java应用程序运行所需的最小环境。JRE包括Java虚拟机(JVM)和Java类库,用于解释和执行Java字节码,并提供Java应用程序运行所需的基本功能和API支持。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/757945.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

‘‘ is not a package AttributeError: module ‘‘ has no attribute ‘__path__‘报错解决

报错: No module named ‘ldm.util’; ‘ldm’ is not a package AttributeError: module ‘ldm’ has no attribute ‘__ path__’ 原因: 1.首先这个引用没有被画横线,说明包存在,并且也在包目录底下添加了__init__.py文件 &am…

C++ Qt开发:QUdpSocket实现组播通信

Qt 是一个跨平台C图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍如何运用QUdpSocket组件实现基于UDP的组播通信…

四川易点慧电子商务抖音小店:值得信赖的购物新选择

随着互联网的飞速发展,电子商务平台如雨后春笋般涌现,为消费者提供了前所未有的购物便利。在众多电商平台中,四川易点慧电子商务抖音小店以其独特的魅力和优质的服务,赢得了广大消费者的青睐和信任。 四川易点慧电子商务抖音小店以…

C++中的Union: 内存与类型转换技巧

在C中,union是一种特殊的数据类型,允许在相同的内存位置存储不同类型的数据。union提供了一种高效地利用内存的方式,但同时也要求开发者更加小心地处理数据以避免类型错误。 1. 基本定义 union定义了一个可以存储多种类型但任意时刻只能存储…

Python之进程池、阻塞模式、非阻塞模式、进程间的通信、queue

非阻塞模式 # 当需要创建的子进程数量不多时,可以直接利用multiprocessing中的Process动态成生多个进程 # 但如果是上百甚至上千个目标,手动的去创建进程的工作量巨大,此时就可以用到multiprocessing模块提供的Pool方法. # 初始化Poo1时&…

Gif动态闪图如何制作?教你1分钟快速制作

动态文字闪图是一种独特而有趣的图像效果,通过将文字以闪烁、跳动或变换的方式呈现,给人一种动态感和视觉冲击力。如果你想制作自己的动态文字闪图,下面是一些简单的方法来帮助你完成这个任务。使用在线闪图制作网站-GIF5工具网,无…

【09】进阶JavaScript事件循环Promise

一、事件循环 浏览器的进程模型 何为进程? 程序运行需要有它自己专属的内存空间,可以把这块内存空间简单的理解为进程 每个应用至少有一个进程,进程之间相互独立,即使要通信,也需要双方同意。 何为线程? 有了进程后,就可以运行程序的代码了。 运行代码的「人」称之…

算法之位运算

常见的位运算操作: 首先先熟悉一下常见的位运算操作: 1. 基础位运算 左移<<, 右移>>, 按位与&, 按位或|, 按位异或^, 按位取反~ 注意: 异或其实是一种无进位相加. 2. 给定一个 n, 确定它的二进制表示中第x位是 0 还是 1 n & (1<<x) 或者 (n>…

软件工程-第11章 内容总结

如果不想读这本书&#xff0c;直接看这一章即可。 11.1 关于软件过程范型 11.2 关于软件设计方法

微信小程序开发学习笔记——4.4常见的导航栏api接口

>>跟着b站up主“咸虾米_”学习微信小程序开发中&#xff0c;把学习记录存到这方便后续查找。 课程连接&#xff1a;https://www.bilibili.com/video/BV19G4y1K74d?p29&vd_source9b149469177ab5fdc47515e14cf3cf74 一、属性 界面 / 导航栏 / wx.showNavigationBar…

Vue3+.NET6前后端分离式管理后台实战(四)

1&#xff0c;Vue3.NET6前后端分离式管理后台实战(四)已经发布&#xff0c; 程序源码已打包&#xff0c;感兴趣的可以关注下载。 2&#xff0c;源码打包可以下载&#xff1a;

leecode1793 | 好子数组的最大分数 | 求给高度矩阵最大值

题目我就不念了&#xff0c;就一个字难理解&#xff0c;给的题总是这么难懂&#xff0c;总感觉出题人的语文是体育老师教的&#xff1f; 还有就是思维转变&#xff0c;才能能好的理解&#xff1f;一味的钻牛角尖死理解&#xff0c;效果不好 思维的转变 >悟性&#xff1f;&am…

幼儿教育管理系统|基于jsp 技术+ Mysql+Java的幼儿教育管理系统设计与实现(可运行源码+数据库+设计文档)

推荐阅读100套最新项目 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 2024年56套包含java&#xff0c;ssm&#xff0c;springboot的平台设计与实现项目系统开发资源&#xff08;可…

深入理解Ubuntu22:探索Linux操作系统的功能与应用

一、linux &#xff08;一&#xff09;、安装 1、电脑可以安装双系统&#xff0c;即在一套硬件上只能同时运行一个操作系统&#xff0c;例&#xff1a;C盘安装win&#xff0c;D盘安装linux。 2、虚拟机 虚拟机需要硬件支持&#xff0c;并需开启VT-x. 如&#xff1a;Virtual…

气象ARWpost、grads 等使用的ctl和dat格式的grd 二进制文件

气象ARWpost、grads 和 Fortran使用的ctldat格式的grd 二进制文件&#xff0c;在Python中可以用xgrads包来读取或者转成nc 格式使用。 xgrads包官网说明地址&#xff1a;https://xgrads.readthedocs.io/en/latest/ 示例1&#xff0c;打开多个空间场相同&#xff0c;时间不同的 …

安防监控视频汇聚平台EasyCVR接入海康Ehome设备,设备在线但视频无法播放是什么原因?

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快&#xff0c;可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等&#xff0c;以及支持厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安…

51单片机-蜂鸣器

1.蜂鸣器的介绍 无源蜂鸣器不能一直通电&#xff0c;无源蜂鸣器内部的线圈较小&#xff0c;易烧坏 蜂鸣器的驱动 达林顿晶体管&#xff08;npn型&#xff09; 应用&#xff1a; 按下独立按键同时蜂鸣器响起提示音&#xff0c;数码管显示对应的独立按键键码 #include <REG…

不确定性建模:传感器噪声与输入输出扰动/干扰

鲁棒性在控制系统设计中是至关重要的&#xff0c;因为实际的工程系统容易受到外部干扰和测量噪声的影响&#xff0c;而且在设计中使用的数学模型和实际中的实际系统之间总是存在差异。通常需要一个控制工程师设计一个控制器&#xff0c;使闭环系统稳定&#xff0c;并在存在干扰…

Spring的事务传播机制有哪些?

Spring的事务传播机制用于控制在多个事务方法相互调用时事务的行为。 一、问题解析 在复杂的业务场景中&#xff0c;多个事务方法之间的调用可能会导致事务的不一致&#xff0c;如出现数据丢失、重复提交等问题&#xff0c;使用事务传播机制可以避免这些问题的发生&#xff0c…

面试算法-66-二叉树的层序遍历

题目 给你二叉树的根节点 root &#xff0c;返回其节点值的 层序遍历 。 &#xff08;即逐层地&#xff0c;从左到右访问所有节点&#xff09;。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;[[3],[9,20],[15,7]] 解 class Solut…