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: