一 JDK的下载
百度搜索JDK直接进入官网下载即可
官网链接 https://www.oracle.com/technetwork/java/javase/downloads/index.html
二 JDK的版本
目前的JDK的版本已经更新到了13.x的版本,Java语言最早发布的时候肯定是提出的1.x版本,当1.x版本更新出来以后,程序员需要去使用Java,使用的时候会出现问题,Java官方不断的去修改
当JDK更新到5.x的版本,是一个大更新,更新了非常多的东西,例如:泛型,增强for循环,可变参数,注释....,目前开发人员喜欢使用的是JDK 8.x版本,因为这个版本比较稳定,没有太多的Bug
三 JDK的安装
JDK安装成功以后,桌面不会有任何的快捷方式,怎么检测安装成功,JDK默认安装到 C:Program FilesJava 路径下,当在该目录下,有这2个文件夹代表安装成功
四 Java运行机制
Java语言的运行分为编译和运行2个阶段
编译阶段:
通过javac.exe命令将.java文件编译成.class文件
运行阶段:
通过java.exe命令调用JVM去运行.class文件
五 使用CMD命令提示符进行Java编译和与运行
第一步:创建记事本 编辑内容,修改文件类型为.java
第二步: 配置环境变量
配置方式可以百度,以下推荐一篇
https://blog.csdn.net/renlianggee/article/details/90023464
第三步:通过javac.exe命令编译.java文件 生成.class文件
第四步:通过java.exe命令运行.class文件
六 JDK的目录结构
java的结构
jdk的目录结构
jre的目录结构
七 JDK安装以后为何里面会有2套JRE
一套存在 C:Program FilesJavajdk1.8.0_101jre 路径下,另一套存在 C:Program FilesJavajre1.8.0_101,这是2套运行环境,我们在安装JDK的时候,安装包会提示我们是否安装一套JRE,那么这2套一般什么用呢,当我们运行Java代码的时候,需要通过javac.exe和java.exe去进行编译和运行2个阶段,那么这个javac.exe和java.exe是一个包装器,它相当于一个快捷方式,类似于我们的电脑如果打开一个软件,需要点击桌面的快捷方式,那么这个javac.exe和java.exe去相当于这个快捷方式,我们通过它去掉用工具去运行我们写的代码,那么真正运行我们的代码的东西是放在 C:Program FilesJavajdk1.8.0_101lib 路径下的 tools.jar, 你可以尝试把这个jar包改个名,然后重新运行,会报错Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/tools/javac /Main. 这个tools.jar是由Java代码写的,它运行也需要一套运行环境,所以2套JRE,一套用来运行我们自己写的代码,一套用来运行那些负责编译和运行的工具
如果是开发人员,电脑最少需要有一套JRE 一套JDK,当然我们在安装的时候,一般建议把2套JRE都安装了,如果你是普通的用户,电脑有一套JRE就可以运行代码了
八 JDK JRE JVM
JDK(java development kit)
JDK是Java开发工具包,是整个Java的核心,包括了Java运行环境JRE、Java工具和Java基础类库。
JRE( java runtime environment)
JRE是java的运行环境,包含JVM标准实现及Java核心类库。
JVM(java virtual machine)
JVM是java虚拟机,是整个java实现跨平台的最核心的部分,能够运行以Java语言写作的软件程序。
3者的关系
JDK = JRE + 开发工具
JRE = JVM + 类库
九 JDK下3个lib区别
JDK下的lib包括java开发环境的jar包,是给JDK用的,例如JDK下有一些工具,可能要用该目录中的文件。例如,编译器等。
JRE下的lib只是运行java程序的jar包,是为JVM运行时候用的。包括所有的标准类库,和扩展类。
JDK下的JRE下的lib是开发环境中,运行时需要的jar包。最典型的就是导入的外部驱动jar包。因为编译时,系统找的是jdk下的jre。而不是最外层的jre
十 JAVA实现跨平台的原因
Java 能够跨平台运行的核心在于 JVM 。不是 Java 能够跨平台,而是它的 jvm 能够跨平台。我们知道,不同的操作系统向上的 API 肯定是不同的,
那么如果我们想要写一段代码调用系统的声音设备,就需要针对不同系统的 API 写出不同的代码来完成动作。
而 Java 引入了字节码的概念,jvm 只能认识字节码,并将它们解释到系统的 API 调用。
针对不同的系统有不同的 jvm 实现,有 Linux 版本的 jvm 实现,也有 Windows 版本的 jvm 实现,但是同一段代码在编译后的字节码是一样的。
引用上面的例子,在 Java API 层面,我们调用系统声音设备的代码是唯一的,和系统无关,编译生成的字节码也是唯一的。但是同一段字节码,
在不同的 jvm 实现上会映射到不同系统的 API 调用,从而实现代码的不加修改即可跨平台运行。