一、JDK的安装
1、Java-Package choose
上述文档翻译:
-
JDK:针对Java开发者(Java developers)。包括了一个完整的JRE附加包工具,该专用JRE附加包的目的是提供开发,调试和模拟Java应用程序。
JDK:Java SE Development Kit,Java开发环境。
Server JRE:针对的是在服务器上运行Java应用程序的管理员。用于在服务器上部署Java应用。包括了在服务器应用上所需要的JVM监控和公共工具,但是不包括浏览器集成(Java 插件)、自动更新、安装。
-
JRE:针对的是在一个桌面环境上运行Java的最终用户。覆盖了大多数的最终用户的需求,包含了在系统上运行Java程序所需要的一切。
JRE:Java Runtime Enviroment,Java运行环境。
2、3种安装包解压后的目录结构及说明
详见: JDK和JRE目录结构
-
JDK目录结构
- java_dir | - jdk1.8.0 | - bin | - lib | - db | - src.zip | - jre // 专用JRE | - bin | - lib | ... | - jre1.8.0 // 公共JRE | - bin | - lib
针对
/java_dir/jdk/
目录进行说明:- bin:存放开发工具的可执行文件。
- java,解释器
- javac,编译器
- javadoc,文档工具,把API注释提取成HTML文档
- jar,归档工具,把包结构打包成.jar文件
- lib:开发工具所需要的类库。
- dt.jar
- tools.jar
- db:纯Java开发的数据可 Derby,是一个开源的100%Java开发的关系数据库
- src.zip:所有java核心库的源代码
- jre:java运行环境 - JVM
- bin:存放JVM的执行命令。
- java,解释器
- lib:JVM运行所需要的核心类库。
- rt.jar,引导类。(IDE中API的所在包)
/java_dir/jre
目录和java_dir/jdk/jre
目录的内容是一样的,都是用来运行Java程序的,即JVM。
-
Server-JRE目录结构
- server-jre_dir | - jdk1.8.0 | - bin | - lib | - db | - src.zip | - jre // 专用JRE | - bin | - lib | ...
-
JRE文件树
- jre_dir | -jre1.8.0 // 公共JRE | - bin | - lib
3、JDK和JRE的结构辨析
图示说明:
Java概念图将Java组件技术分级分类。
- JDK所包含的组件:
- Java语言
- 工具和工具API
- 部署
- 用户界面工具包
- 集成库
- 其他基础库
- Lang和Util基础库
- Java虚拟机
- JRE所包含的组件:
- 部署
- 用户界面工具包
- 集成库
- 其他基础库
- Lang和Util基础库
- Java虚拟机
- Java SE API 所包含的内容:
- 用户界面工具包
- 集成库
- 其他基础库
- Lang和Util基础库
**分析: **
官方文档中,可知JDK与JRE相比,独有的部分是Java Language和Tools、Tools API。也就是说,JRE不具备Java应用程序开发的功能。
JDK = Server-JRE + JRE 。
- 对于最终用户:只需要Java运行环境来运行其电脑上的java程序;因此,只安装JRE就可以了。
- 对于服务器:需要编译、运行Java应用,而不需要访问Java应用;因此,只使用Server-JRE进行编译、解释。
- 对于Java开发者:开发Java程序时要编译、解释,同时作为用户要运行其他Java应用;因此使用JDK。
- 平常所说的Java自动更新,是指公共JRE的更新,以便适应网站的技术更新;而不是JDK的自动更新。
javac和java命令:
在jdk/bin
目录下有javac和java命令(编译、解释);而在jdk/jre/bin
或jre/bin
目录下只有java命令(解释)。
二、环境变量(Enviroment variable)的设置及作用
环境变量: 分为用户变量和系统变量。
1、用户变量(user variable)
只对当前用户有效(windows下作用不大,linux下用处大),是为了减低自己所做的修改对他人造成的影响。
一般系统变量的路径排在用户变量之前,如果双方都有的路径,会使用系统变量中的值。
2、系统变量(System variable)
1、JAVA_HOME变量(约定名称,供JDK、其他软件使用)
顾名思义: 这是Java的家,就是JDK文件夹的所在位置(安装路径)。
新建JAVA_HOME路径:C:\Program Files\Java\jdk1.8.0_131
作用: 指向JDK的安装目录:
- 1、像eclipse/intellij等软件可以借助该变量自动定位JDK
- 2、tomcat等软件只认定这个变量来定位JDK
- 3、使用变量,修改JDK位置更加灵活(CLASSPATH、PATH的引用)
2、CLASSPATH变量(约定名称,专为JDK而使用)
顾名思义: 这是要查找的类/class文件的所在路径,就是执行javac
命令时:要查找的类的位置和相关的类库位置。
已经不需要新建CLASSPATH路径了!!!:.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;
手工编译.java文件的几种情况:
假设
C:\User\14002\Desktop\Print.java
是我们要编译的java源文件。
情况一:Print.java只是继承于Object类,且不需要引入外部.jar文件。
-
1、绝对路径编译:
打开DOS,处于任意路径下,输入:
javac C:\User\14002\Desktop\Print.java
即可完成编译。 -
2、相对路径编译:
进入ODS,进入该文件所在目录后,输入:
javac Print.java
即可。
情况二:Print.java继承其他类,或者要引入其他.jar文件。但是都在同一个目录下。
- 编译方式和情况一相同。
情况三:Print.java继承某个父类,如MyObject.java类。或者引用某个.jar文件,如MyJar.jar。但是都不在同一个目录下。
-
1、MyObject.class不在当前目录中(
C:\test\MyObject.class
),需要手动指定该class文件所在目录:javac -classpath C:\test\ C:\User\14002\Desktop\Print.java
。 -
2、MyJar.jar不在当前目录中(
C:\test\MyJar.jar
),需要指定位置:javac -classpath C:\test\MyJar.jar C:\User\14002\Desktop\Print.java
。
为什么javac命令能执行?
因为在PAHT路径中配置的
%JAVA_HOME%\bin
路径帮助我们找到了该目录下的javac.exe
执行命令。
CLASSPATH路径的作用?
以下内容来自《Java编程思想》。
1、Java 解释器的工作程序如下:
首先,java.exe找到环境变量CLASSPATH。
CLASSPATH 包含了一个或多个目录,它们作为一种特殊的“根”使用,从这里展开对.class 文件的搜索。
从那个根开始,解释器会寻找包名,并将每个点号(句点)替换成一个斜杠,从而生成从CLASSPATH 根开始的一个路径名(所以package foo.bar.baz 会变成foo\bar\baz 或者foo/bar/baz;具体是正斜杠还是反斜杠由操作系统决定)。
随后将它们连接到一起,成为CLASSPATH 内的各个条目(入口)。
以后搜索.class 文件时,就可从这些地方开始查找与准备创建的类名对应的名字。
此外,它也会搜索一些标准目录——这些目录与Java 解释器驻留的地方有关。
2、CLASSPATH是Java编译器(javac.exe)的一个环境变量。
它的作用是指定类搜索路径,它与import、package关键字有关。
当你写下
improt java.util.*
时,编译器面对import关键字时,就知道你要引入java.util这个package中的所有类。但是编译器如何知道你把这个package放在哪里了呢?
所以你首先得告诉编译器这个package的所在位置。如何告诉它呢?就是设置CLASSPATH啦~
如果java.util这个package在c:\jdk\ 目录下,你得把c:\jdk\这个路径设置到CLASSPATH中去!当编译器面对
import java.util.*
这个语句时,它先会查找CLASSPATH所指定的目录,并检视子目录java\util是否存在,然后找出名称吻合的已编译文件(.class文件)。如果没有找到就会报错!
当你自己开发一个package时,如果想要用这个package中的类;自然,你也得把这个package所在的目录设置到CLASSPATH中去!
然而,使用JAR 文件时要注意一个问题:必须将JAR文件的名字置于类路径里,而不仅仅是它所在的路径。所以对一个名为grape.jar 的JAR 文件来说,我们的类路径需要包括:
CLASSPATH=.;D:\JAVA\LIB;C:\flavors\grape.jar
CLASSPATH的设定,对JAVA的初学者而言是一件棘手的事。所以Sun让JAVA2的JDK更聪明一些。你会发现,在你安装之后,即使完全没有设定CLASSPATH,你仍然能够编译基本的JAVA程序,并且加以执行。
可以看出,CLASSPATH 里将会包含大量备用的搜索路径。
但是,在JDK 1.5之后,就没有必要配置CLASSPATH了:
因为1.5版本以上JDK:
- 1、它会自动搜索当前路径下的类文件
- 2、而且使用Java的编译和运行工具时,系统可以自动加载dt.jar(是关于运行环境的类库,主要是swing的包)和tools.jar(是关于一些工具的类库)文件中的Java类
详见: JDK官方安装、配置说明
3、PATH变量
**path变量的作用: **
windows系统根据环境变量中的PATH变量查找命令并执行,如果找不到则出现“XXX不是内部或外部命令,也不是可运行的程序或批处理文件”错误。
path变量名不分大小写,应用程序或DOS界面会遍历path的路径来查找命令并调用。
path变量的应用举例:
path路径的作用是为DOS命令(cmd)预设一大串的可供搜索命令来匹配 的目录路径,比如在命令行想要调用mysql来登录操作或者是使用git。
- 想在DOS中使用mysql:
mysql.exe的路径为:
C:\Program Files\MySQL\MySQL Server 5.7\bin\mysql.exe
。我们在PATH中添加一段路径
C:\Program Files\MySQL\MySQL Server 5.7\bin
;那么,我们在cmd中直接就可以调用mysql -u root -p
来进行进行登录了。
因为有对应的PATH路径存在,这条命令实际上找到了路径下的mysql.exe来执行我们的命令。
- 想在DOS中使用git:
git.exe的路径为:
C:\Program Files\Git\cmd\git.exe
。我们在PATH中添加的路径值为
C:\Program Files\Git\cmd
,同理,我们可以使用git
命令来执行。
举一反三 :
- 在DOS中启动chrome:
你可以在用户变量中的Path变量中加入chrome浏览器的路径
C:\Program Files (x86)\Google\Chrome\Application
。那么你在cmd中输入chrome,回车。即可启动chrome浏览器。
因为chrome.exe的路径是:C:\Program Files (x86)\Google\Chrome\Application\chrome.exe
配置JDK需要的PATH路径
顾名思义: path就是路径了,是在开发中调用相关命令如 javac
和java
的所在位置。
作用: 是在任何目录下都能调用与java开发相关的命令。
追加PATH路径:%JAVA_HOME%\bin;
4、路径配置图解:
- jdk1.8.0 (1、JAVA_HOME)
| - bin (3、PATH)
| - jre
| - lib
| - dt.jar --> [2、CLASSPATH]
| - tools.jar --> [2、CLASSPATH] . --> [2、CLASSPATH]
注意: 现在已经不需要配置CLASSPATH路径了。
5、MS-DOS下手动编译、执行java文件
Dos界面: 就是windows下的MS-DOS
方式,cmd是command的缩写。可以执行一些命令。
1、在.../user/desktop/
桌面上生成Print.java
文件:
public class Print {
public static void main(String[] args){
for (int i = 0; i < args.length; i++) {
System.out.println(args[i]);
}
}
}
作用:打印传入的每个参数。
String[] args
的作用是:在Docs界面,把执行.class 文件时附带传进的所有参数(以空格隔开)分别存入args这个字符数组中;之后可以使用args这个数组中的参数。
2、在Dos界面
- 进入.java文件所在目录。
-
javac
命令编译Print.java
文件,得到Print.class
文件。 -
java
命令执行.class文件,并传入4个参数 - 输出java程序运行结果
3、JDK的环境变量总结
在windows下:
-
对于JDK:其实只需要设置PATH路径即可,把
xx/jdk/bin
目录追加进去。其专用JRE(
xx/jdk/jre
)可以自动被xx/jdk/bin/
中的命令调用。其公共JRE(
xx/jre
)自动被注册到系统的注册表当中,供其他应用程序调用。 -
对于JRE:不需要设置PATH路径,直接使用即可。
因为JRE在安装时就自动被注册到系统的注册表当中了。
因此,公共JRE会被自动注册到系统的注册表之中,无需配置。
查看系统注册表:
- 1、Win + R,输入regedit。
- 2、在
[HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft]
下有Java相关的注册表记录。
小结论:
-
不管是在windows下还是linux下,配置PATH变量的目的,都是为了在DOS界面/CMD界面可以直接调用
xx/jdk/bin
目录中的java命令,也就是为了在java编程时使用IDEA等工具能正确编译、执行java程序。所以PATH变量的目的是用于java开发。
当需要运行Tomcat服务器时,由于Tomcat需要JRE环境,所以它根据系统的环境变量来寻找JRE的位置。详见Tomcat官方安装、配置说明
- 安装JDK的情况下,设置
JAVA_HOME
即可,Tomcat使用JAVA_HOME/jre
的JRE环境。或者设置JRE_HOME
来指定公共JRE的位置。 - 只安装JRE的情况下,设置
JRE_HOME
为JRE所在目录即可。
- 安装JDK的情况下,设置
三、Linux下JDK环境变量的设置
一般来说,我们解压JDK的tar包的位置可能有:
-
/usr/local/
目录,这里存放用户的应用程序和文件,类似windows的program files
目录。 -
/opt/
目录,这是给主机额外安装软件的目录。
假设现在的JDK路径为:
/opt/java8/jdk1.8.0
目录。
环境变量的配置:
1、所有用户的shell都有权访问的环境变量,这种做法在多人情况下可能带来安全性问题。
1、打开配置文件:vim /etc/profile
。
2、输入如下内容:
export JAVA_HOME=/opt/java8/jdk1.8.0 # Tomcat运行需要JRE环境
export PATH=$JAVA_HOME/bin:$PATH # 开发java时需要
# export是把变量导出为全局变量
3、读取、执行配置文件:source /etc/profile
。
4、查看JDK安装:java -version
。
2、用户级别的环境变量的控制,也是最靠谱的方法。
如果需要给某个用户权限使用这些环境变量,只需要修改其个人用户家目录下的.bash_profile
文件就可以了。
1、打开用户家目录下的.bash_profile
文件:vim .bash_profile
。
2、输入以下内容:
# 同上一致
3、重新登录
JDK的卸载:
进入JDK的安装目录的
_uninst
目录,在shell终端执行命令:./uninstall.sh
即可。