jdk知识

news2024/12/28 20:46:21

jdk,jre,jvm

jdk>jre>jvm
jdk的bin目录下有编译工具,平时写完java文件用jdk编译;
jre的lib文件夹里面是java的jar包(.class文件),用来给jvm运行编译后的.class文件。
jvm:运行.class文件,.class文件读入到虚拟机的内存当中,然后转换成机器语言并解释执行。将.class文件翻译成不同的操作系统下的机器码,不同操作系统有专属的jvm,将不同java文件翻译成每个操作系统可以看懂的机器码(java区分于其他语言,其他语言直接编译成机器码,然后运行)

jdk文件夹结构(重要)

bin目录:

里面都是.exe可执行文件。java,javac,javadoc,java编译工具,java监测工具等.exe文件都在这里。
在这里插入图片描述

include目录:

底层有用c++写的东西,这里面包含很多c语言的文件,win32是一些系统的底层。
在这里插入图片描述

jre目录:

就是jre。
在这里插入图片描述
里面的lib文件夹:就是一堆jar包,平时用的java.lang等包都在这里面。
在这里插入图片描述

java核心jar包:

lib文件夹里的rt.jar包
jar包就是压缩包,我们可以解压打开:
在这里插入图片描述

java.lang包,java.util包,java.math包都在这里:
在这里插入图片描述
在这里插入图片描述

lang包点开,里面就是我们平时用的包里的这些类,比如String类等
在这里插入图片描述

lib目录:

基本用不到不用了解

其他目录

在这里插入图片描述
解压也可以看见:
在这里插入图片描述
也是java的一些资源,和上面jre里一模一样,这是jdk里面自带的。
和jre里面区别:一个是.class,一个是.java源文件。
在这里插入图片描述

为什么装完jdk要配置环境变量

参考文章:
https://blog.csdn.net/qq_43575801/article/details/123891860?spm=1001.2014.3001.5506

学完汇编语言,知道在命令行中输入:名字.exe就是会去运行.exe程序。

如何将源文件(.java)转化为字节码文件:
我们需要使用JDK中提供的编译工具来将它转化为可执行的exe文件,名字叫做javac 它存在于我们jdk安装文件夹的bin目录下但是我们的源文件可能存在于任何一个文件夹中。

path变量:

Windows和DOS操作系统中的path环境变量,当要求系统运行一个程序而没有告诉它程序所在的完整路径时,系统除了在当前目录下面寻找此程序外,还应到path中指定的路径去找。用户通过设置环境变量,来更好的运行进程。
控制台会先在当前目录找java.exe程序,找不到会去path变量中指定的路径去找此命令,如果没有找到就不会执行。

例如:
我要在桌面上打开微信,只需要双击就可以打开了,因为它是一个快捷方式,链接到了我们微信下载的目录之下的WeChat.exe文件。
在这里插入图片描述
但咱们要是想在命令行窗口(cmd)中打开微信,直接输入WeChat.exe发现我们并不能打开它,而是需要进入到它所在的文件目录下才可以正常打开(需要输入完整的路径名)。
在这里插入图片描述
在这里插入图片描述
此时我们只需要配置一下他的PATH环境变量,就可以在命令行窗口的任何目录下去打开微信了。

所以:

我们在源文件所在的文件夹中去调用javac编译程序,系统会发现根本就找不到这个它,因为字节码文件与编译程序不在同一个文件夹,除非是特殊情况,源文件和javac编译程序在同一个文件夹。否则都会出现下图这样的错误.
在这里插入图片描述

如果我们需要在任何目录下都可以去使用编译程序,那么我们就需要去配置环境变量
我们要在Path这个环境变量当中把javac编译程序所在的位置添加进去我们都知道javac编译程序位于JDK安装路径下的bin文件夹中,所以我们都就要把bin这个路径添加到环境变量当中。这样,无论源文件在哪里,操作系统都随时能找到javac编译程序并对其进行编译。经过配置之后,bin文件夹下其他的可执行文件也能够在任何目录下被调用,其中包括**!!!!执行Java程序的java.exe。**!!!???不是jre就可以运行了吗,这也是必须需要jdk啊…???

配置path变量

微信

在win下设置中搜索“环境变量”,然后弹出以下这个窗口,点击环境变量按钮。
在这里插入图片描述
然后在系统变量中找到Path变量,点击编辑。(稍后讲解上面的用户变量和系统变量的区别)
在这里插入图片描述
然后点击新建,把微信所在当前目录的路径写上(意思就是操作系统在任何目录下运行WeChat.exe找不到这个程序的时候,就会往这个Path里面去找),此时,不管在哪输入WeChat.exe,Path下有这个路径,就能找到并运行它。
在这里插入图片描述
点击确定后,在命令行重新输入WeChat.exe, 微信是成功运行的。
在这里插入图片描述
2.用户变量与系统变量的区别
说白了其实用户变量就是只针对当前这个用户有用的变量,而系统变量相当于全局变量,针对所有用户都有效。

刚才举的例子,我们修改的是系统变量,其实也可以修改用户变量的Path,此时这个Path只针对你当前用户生效(每个计算机可以创建很多用户,一般来说如果电脑是自己用的话,当前用户只有一个就是你自己)。

jdk

1.配置JDK的Path变量
和上一节一样,直接在系统变量或者用户变量的Path里面新建,并输入你下载的JDK的绝对路径(注意只写到bin目录就行)。
在这里插入图片描述

2.配置JAVA_HOME变量

为了减少手写出错,用单词替代。

先上图:
在用户变量或者系统变量里面点击新建
在这里插入图片描述
然后按着如图所示步骤输入
在这里插入图片描述
首先,为什么要配置这个变量呢?
它是用来告诉操作系统,JDK安装在了哪个位置。
一是为了方便引用,比如,你JDK安装在C:\Program Files\Java\jdk1.5.0目录里,则设置JAVA_HOME为该目录路径, 那么以后你要使用这个路径的时候, 只需输入%JAVA_HOME%即可, 避免每次引用都输入很长的路径串;

二则是归一原则, 当你JDK路径被迫改变的时候, 你仅需更改JAVA_HOME的变量值即可, 否则,你就要更改任何用绝对路径引用JDK目录的文档, 要是万一你没有改全, 某个程序找不到JDK, 后果是可想而知的----系统崩溃!

三则是第三方软件会引用约定好的JAVA_HOME变量, 不然, 你将不能正常使用该软件, 等你以后用JAVA久了就会知道的~~:)~~~, 要是某个软件不能正常使用, 不妨想想是不是这个问题。

看不懂上面的一大坨?没关系
您可以认为,当设置完这个变量,那么%JAVA_HOME% 就是 D:\JDK17\jdk-17.0.2,我们这时候在Path中修改一下
在这里插入图片描述
这串变量和 D:\JDK17\jdk-17.0.2\bin 是一样的,你可以把它认为是一个宏替换。
改成这样之后,咱以后要是更新JDK版本,就只需要修改JAVA_HOME里面的路径就行了,不需要再改Path里面的路径了。

**classpath变量:

参考文章:
https://blog.csdn.net/qq_42250281/article/details/123662746?spm=1001.2014.3001.5506

用来找.class文件位置的。

通常是新建的变量。在编译、运行java程序时会在它指定的目录下去找你所要用到的class,也是先在本目录下找,然后在指定目录下找,都找不到就会报错了。**

要想执行(上面都是编译)Java程序,第一步就是先找到.class文件,所以必须让虚拟机知道.class文件的位置

虚拟机是怎样知道.class文件的位置的?
它要根据CLASSPATH环境变量去找
。我们在CLASSPATH环境变量当中首先会添加”.”(一个英文的点号),这个”.”就表示当前路径。配置了”.”之后,虚拟机在寻找.class文件的时候会在当前路径下进行搜索。
我们通常还会把JDK安装路径下的lib文件夹下的dt.jar和tools.jar这两个文件的位置也加入到CLASSPATH环境变量中。

!!!注意:从JDK1.4之后Java运行时环境(JRE)有了自动搜索当前文件夹下.class文件,并自动加载dt.jar和tools.jar类库文件的功能可以不用配置CLASSPATH环境变量了 !

命令行操作编译运行总结

在存放写好的.java文件的文件夹下打卡命令行:
路径位置一样:
在这里插入图片描述
编译:
在这里插入图片描述
运行:
这时候不用写class了运行的就是.class:
在这里插入图片描述

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

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

相关文章

JVM 垃圾回收机制和GC案例分析

1. 引言 Java 虚拟机(JVM)的垃圾回收(Garbage Collection, GC)机制,是自动内存管理的重要组成部分。它通过回收不再使用的对象,避免手动释放内存的麻烦。然而,随着系统复杂性的增加&#xff0c…

C/C++——野指针处理

在C++中,“野指针”(dangling pointer)指的是指向已释放或无效内存的指针。使用野指针可能导致程序崩溃或产生未定义行为。避免野指针的关键在于确保指针始终指向有效内存。下面是一些避免野指针的方法和最佳实践: 1、释放内存后置空指针 当释放掉分配的动态内存后,将指…

文本到3D生成

文本到3D生成是一种通过文本描述直接创建三维数字模型的技术。这种技术能够将语言描述转换成可视化的三维模型,使得内容创作者和设计师可以直接从概念阶段跳转到三维可视化,大大加快创作流程并提供更直观的设计和修改过程。 该技术的核心应用之一是基于…

【乐吾乐大屏可视化组态编辑器】使用手册

1 总览 开始设计:大屏可视化设计器 - 乐吾乐Le5le 1.1 画布 画布即绘画区域,将图形拖拽到画布进行编辑,绘制大屏。 1.2 菜单栏 顶部菜单导航,一级菜单可设置Logo、公司名称、文件编辑、常用编辑、查看、帮助,设置大…

MySQL篇(SQL - 分类)(持续更新迭代)

目录 简介 一、DDL 1. 简介 2. 数据库操作 2.1. 查库 查询所有数据库 查询当前数据库 2.2. 创库 2.3. 删库 2.4. 切库 3. 表操作 3.1. 查询 查询当前数据库所有表 查看指定表结构 查询指定表的建表语句 3.2. 创表 3.3. 改表 添加字段 修改数据类型 修改字段…

unity3d入门教程六

unity3d入门教程六 15.1预制体15.2编辑预制体15.3在场景中编辑15.4动态创建实例15.5实例的销毁16.1(练习)子弹发射16.2定时器16.3键盘事件 15.1预制体 火神山10天建成,使用了预制体技术 一个个小房间都是事先建造好的,最后吊车装…

Acrobat 2022 安装

软件介绍 Adobe Acrobat 是由Adobe公司开发的一款PDF(Portable Document Format,便携式文档格式)编辑软件。借助它,可以以PDF格式制作和保存文档,以便于浏览和打印,同时还可以使用一些高级工具来创建、编辑…

黑马十天精通MySQL知识点

一. MySQL概述 安装使用 MySQL安装完成之后,在系统启动时,会自动启动MySQL服务,无需手动启动。 也可以手动的通过指令启动停止,以管理员身份运行cmd,进入命令行执行如下指令: 1 、 net start mysql80…

Autosar E2E通信保护简介

文章目录 前言一、E2E基本概念二、为什么要做E2E?三、E2E保护的三种不同实现方式E2E TransformerE2E Protection Wrapper(E2EPW)COM E2E Callout四、E2E ProfileE2E Profile 01 机制E2E Profile 02 机制E2E Profile 04 机制E2E Profile 05 机制E2E Profile 06 机制E2E Profi…

828华为云征文|部署在线文件管理器 Spacedrive

828华为云征文|部署在线文件管理器 Spacedrive 一、Flexus云服务器X实例介绍1.1 云服务器介绍1.2 产品优势1.3 计费模式 二、Flexus云服务器X实例配置2.1 重置密码2.2 服务器连接2.3 安全组配置 三、部署 Spacedrive3.1 Spacedrive 介绍3.2 Docker 环境搭建3.3 Spac…

38900 机动车安全检测

参考文章:https://www.zhihu.com/question/458001000 机动车检查 《道路交通安全法实施条例》有关规定第十六条:机动车应当从注册登记之日起,按照下列期限进行安全技术检验: (一)营运载客汽车5年以内每年…

CSS 圆角渐变边框

<div class"contact-box"><div class"contact-item">联系我们</div> </div>.contact-item{width: 194px;height: 48px;border-radius: 20px 20px 20px 20px;background-color: #000000;color: #BDBDBD;font-weight: 500;font-size…

828华为云征文 | 华为云X实例服务器上部署知识图谱项目的详细指南

前言 知识图谱作为数据整合、语义分析和人工智能的重要基础&#xff0c;逐渐被广泛应用于各类领域。其通过结构化数据和关系映射&#xff0c;帮助用户更好地理解数据背后的意义。要成功构建和部署知识图谱项目&#xff0c;强大的计算资源和高效的存储查询能力至关重要。华为云X…

网易codeWave——新手如何使用多表头Excel导入数据

需求是需要将下面&#xff08;示例&#xff09;的多表头Excel表格&#xff0c;上传到服务器&#xff0c;展示在codeWave的表格组件内&#xff1a; 第一步下载官方插件&#xff1a; 可以先行查看文档再来 第二步&#xff1a; 选择一个上传组件 第三步&#xff0c;编写上传…

(1)LT9211学习笔记

文章目录 前言一、MIPI接口是什么&#xff1f;二、LT9211框图及应用1&#xff0c;作为MIPI发射机&#xff1a;2&#xff0c;作为双端口Lvds发射机3&#xff0c;作为TTL输出4&#xff0c;作为MIPI接收机&#xff1a;5&#xff0c;作为双端口Lvds接收机6&#xff0c;作为TTL输入 …

STM32(十三):通信协议——USART串口协议

通信接口 通信的目的&#xff1a;将一个设备的数据传送到另一个设备&#xff0c;扩展硬件系统。 通信协议&#xff1a;制定通信的规则&#xff0c;通信双方按照协议规则进行数据收发。 TX &#xff08;Transmit exchange&#xff09; 数据发送角 RX &#xff08;Receive ex…

GIS在线监测SF6密度微水传感器免焊接格兰头航插插头

概述 GIS&#xff08;气体绝缘金属封闭开关设备&#xff09;中的SF6&#xff08;六氟化硫&#xff09;气体密度微水传感器航插技术是指在GIS设备中安装SF6气体密度和微水传感器&#xff0c;以实现对SF6气体状态的在线监测。这些传感器能够实时监测SF6气体的密度、微水含量以及其…

通过SQL语句判断奇偶数的几种方法

文章目录 1. 准备数据2. 使用 % 判断奇偶数3. 使用 MOD 判断奇偶数4. 使用按位与运算符 & 1. 准备数据 假设我们有一张测试表test_numbers -- 创建测试表 CREATE TABLE test_numbers (number_value INT );-- 插入测试数据 INSERT INTO test_numbers (number_value) VALUE…

效率神器来了:AI工具手把手教你快速提升工作效能

随着科技的进步&#xff0c;AI工具已经成为提升工作效率的关键手段。本文将介绍一些实用的AI工具和方法&#xff0c;帮助你自动化繁琐的重复性任务、优化数据管理、促进团队协作与沟通&#xff0c;并提升决策质量。 背景&#xff1a;OOP AI-免费问答学习交流-GPT 自动化重复性任…

数论-快速幂

快速幂 模板代码推导过程 求 A^B mod C&#xff0c;时间复杂度 O(logB) 模板代码 using ll long long; // 可以在头文件中添加这行ll qmi(ll a, ll b, ll c) {ll ans 1; // 初始化结果为 1a % c; // 将 a 取模 c&#xff0c;确保 a 小于 cwhile (b) …