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:

相关推荐
Kerwin要坚持日更2 小时前
Java小白一文讲清Java中集合相关的知识点(九)
java·开发语言
_Power_Y4 小时前
JavaSE:11、内部类
java·开发语言
小张同学(恩师白云)5 小时前
SpringDataJPA基础增删改查
java·数据库
尘浮生5 小时前
Java项目实战II基于Spring Boot的宠物商城网站设计与实现
java·开发语言·spring boot·后端·spring·maven·intellij-idea
Grey Zeng6 小时前
Java SE 23 新增特性
java·jdk·jdk新特性·jdk23
勤奋的小王同学~6 小时前
怎么修改mvn的java版本
java·开发语言
越过难题6 小时前
若依的使用
java
doc_wei6 小时前
Java小区物业管理系统
java·开发语言·spring boot·spring·毕业设计·课程设计·毕设
生产队队长6 小时前
SpringBoot2:web开发常用功能实现及原理解析-@ControllerAdvice实现全局异常统一处理
java·spring boot
一知半解搞开发6 小时前
Mysql系列-索引简介
java·数据库·mysql