当前位置: 首页 > article >正文

jdk知识

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.kler.cn/a/306044.html

相关文章:

  • [CKS] 关闭API凭据自动挂载
  • 笔记 | image may have poor performance,or fail,if run via emulation
  • AI写作(二)NLP:开启自然语言处理的奇妙之旅(2/10)
  • docker运行ActiveMQ-Artemis
  • 单例模式详解:如何优雅地实现线程安全的单例
  • AI写作(四)预训练语言模型:开启 AI 写作新时代(4/10)
  • Excel数据清洗工具:提高数据处理效率的利器
  • verilog运算符优先级
  • TCP/IP网络编程概念及Java实现TCP/IP通讯Demo
  • 论文速递!Auto-CNN-LSTM!新的锂离子电池(LIB)剩余寿命预测方法
  • WEB打点
  • Metacritic 网站中的游戏开发者和类型信息爬取
  • OpenCV-轮廓检测
  • 《深度学习》PyTorch 手写数字识别 案例解析及实现 <下>
  • 编写并运行第一个spark java程序
  • 【JavaEE】初识⽹络原理
  • 计算机毕业设计 二手闲置交易系统的设计与实现 Java实战项目 附源码+文档+视频讲解
  • python-古籍翻译
  • Leetcode面试经典150题-148.排序链表
  • 16. 池化层的基本使用 -- nn.MaxPool2d
  • 【AcWing】【Go】789. 数的范围
  • Leetcode面试经典150题-82.删除排序链表中的重复元素II
  • NISP 一级 | 5.3 电子邮件安全
  • LottieCompositionFactory.fromUrl 加载lottie的json文件
  • 《微信小程序实战(1)· 开篇示例 》
  • Python——俄罗斯方块