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时&…

HTTPS 为什么比HTTP安全?

HTTPS(Hyper Text Transfer Protocol Secure)比 HTTP(Hyper Text Transfer Protocol)更安全,主要是因为 HTTPS 在 HTTP 的基础上添加了 SSL/TLS 协议,用于对数据进行加密,保证数据在传输过程中的…

数据库中SQL语句where 1=1和where 1=0

1、 背景 在实际的数据库查询中,常常会看到一些特殊的SQL语句构造,如WHERE 11、WHERE 10等,它们虽然看起来有些奇特,但在实际应用中确实有一些妙用。 其中WHERE 11用于动态构建查询条件,而WHERE 10通常用于强制不返回…

[C++] 实现Union

前几天学了replacement new写的小玩意 #include <iostream> #include <functional> #include <string>// 可能因为const char*类型的缘故 // 用const ArgsT&&...会报错// 测试用类 struct Test {Test(){std::cout << "constructed"…

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

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

国内外15款AI搜索引擎汇总

AI大模型的一个痛点就是训练数据有截止日期&#xff0c;例如chatgpt的训练数据截止日期是2021年10月。这导致模型回答截止日期之后产生的新闻事件或者专业知识时不够准确。 将AI和搜索引擎结合起来&#xff0c;似乎是一种解决方式。 目前&#xff0c;国内外公布了不少AI搜索引…

JNI入门学习 数据类型[一]

基本数据类型&#xff1a; Java 中的 int 对应 JNI 中的 jint。Java 中的 boolean 对应 JNI 中的 jboolean。Java 中的 float 对应 JNI 中的 jfloat。Java 中的 double 对应 JNI 中的 jdouble。Java 中的 byte 对应 JNI 中的 jbyte。Java 中的 short 对应 JNI 中的 jshort。Jav…

【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…

算法练习第二十七天|39. 组合总和、40.组合总和II、131.分割回文串

leetcode题目链接 39. 组合总和 40.组合总和II 131.分割回文串 组合总和 class Solution {List<Integer> path new ArrayList();List<List<Integer>> result new ArrayList();public List<List<Integer>> combinationSum(int[] candidates, i…

“未等待完成”在异步操作还没有完成时,就进行下一次操作,可能导致数据不一致或逻辑错误。

等待异步操作完成就进行下一次操作可能会导致数据不一致或逻辑错误&#xff0c;这在异步操作频繁、互相独立而又不可忽略的场景中尤为常见。下面&#xff0c;我来举个例子帮助解释。 假设我们需要通过异步操作获取用户信息并渲染页面&#xff0c;页面上还需要显示用户的最新发…

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;可…