3.4 Java环境的搭建
工欲善其事必先利其器。在学习Java语言之前,必须了解并搭建好它所需要的开发环境。要编译和执行Java程序,JDK(Java Developers Kits)是必备的。下面将具体认识下JDK和JRE,并进行介绍下载安装JDK和配置环境变量的方法。
3.4.1 Java的跨平台
Java的跨平台是指:通过Java语言编写的应用程序在不同的系统平台上都可以运行。在这里我们要对平台进行一下解读,在菜鸟笔记 Chapter 1 计算机从0讲起中我们知道了OS的出现是为所有的开发提供了一系列的开发接口,所有现在的驱动和高级开发语言都是通过OS提供的接口来实现开发的,而无需再考虑CPU的指令集,所以这里的平台指的就是OS,Java编写的程序可以在不同的OS上运行,我们日常工作中往往是在Windows上开发的,但是部署却是在Linux上,这就是跨平台的最好解释。
原理是:Java编写的源代码经过一次编译后生成符合JVM规范的中间码,编译后的字节码采用一种针对JVM优化过的机器码形式保存。这个中间码不管编译多少次都是一样的,在需要运行的Java应用程序的平台上,JVM会将中间码解释为能够被计算机识别的机器码,所以编译只进行一次,而解释却是在程序每次运行时都需要进行的。如下图1.6所示。
图1.6 Java的跨平台性的原理
因为有了JVM,所以同一个Java程序在三个不同的操作系统中都可以执行。这样就实现了Java程序的跨平台性。也称为Java具有良好的可移植性。
Java语言是跨平台的,而JVM不是跨平台的。
3.4.2 JDK
jdk是 Java 语言的软件开发工具包,是提供给Java开发人员使用的,其中包含了java的开发工具,也包括了JRE。所以安装了JDK,就不用在单独安装JRE了。JDK包含的基本组件包括:
- javac – 编译器,将源程序转成字节码
- jar – 打包工具,将相关的类文件打包成一个文件
- javadoc – 文档生成器,从源码注释中提取文档
- jdb – debugger,查错工具
- java – 运行编译后的java程序(.class后缀的)
- appletviewer:小程序浏览器,一种执行HTML文件上的Java小程序的Java浏览器。
- Javah:产生可以调用Java过程的C过程,或建立能被Java程序调用的C过程的头文件。
- Javap:Java反汇编器,显示编译类文件中的可访问功能和数据,同时显示字节代码含义。
- Jconsole: Java进行系统调试和监控的工具
为什么JDK中包含一个JRE呢?
其一,开发完的程序,总需要运行一下看看效果。
其二,也是最重要的,JDK中的开发工具其实都是java语言编写的应用程序,为了方便使用才打包成exe文件,如果没有JRE,那么这些工具是运行不了的。
3.4.3 JRE
JRE(Java Runtime Environment,Java运行环境),运行JAVA程序所必须的环境的集合,包含JVM标准实现及Java核心类库。如果想要运行一个开发好的Java程序,计算机中只需要安装JRE即可。
简单而言:使用JDK开发完成的java程序,交给JRE去运行。
3.4.4 JDK下载
Java的JDK又称Java SE(以前称J2SE),是Sun公司的产品,由于Sun公司已经被Oracle公司收购,因此JDK可以在Oracle公司的官方网站http://www.oracle.com/index.html下载。
在Java 6 出版之后,J2SE、J2EE和J2ME正式更名,将名字中的2去掉,分别更改为Java SE、Java EE和Java ME |
下面以JDK 最新版本为例介绍下载安装JDK的方法,具体步骤如下:
n 打开IE浏览器,输入网址“http://www.oracle.com/index.html”,浏览Oracle官网,将光标移动当Downloads菜单项上,将显示下载列表下拉菜单,单击Java for Developers 超链接,如图1.7所示。
图1.7 Oracle主页
n 将跳转到JDK的下载页面,在该页面中单击最新版本JDK的超链接,即如图1.8所示的Download按钮。
图1.8 JDK的下载页
n 在进入的新页面中,需要先选中同意协议中的单选按钮,这时将显示如图1.9所示的页面,否则单击要下载的链接时不能进行下载。
图1.9 JDK最新版本的下载页面
下载时要选择适合自己操作系统平台的的安装文件,如Windows系统平台是无法安装Linux系统平台的安装文件的。如果我们需要一些旧版本的JDK则可以在进入JDK的下载链接页面后选择旧版本下载,单击进入历史页面,我们以JDK 7 为例如图1.10所示。
图1.10 历史版本的JDK下载
3.4.5 Windows系统的JDK环境
3.4.5.1 JDK的安装
我们以下载的JDK 7为例进行安装介绍,步骤如下:
JavaFX是由甲骨文宣布推出的,是一款为企业业务应用提供的先进Java用户界面(UI)平台,它能帮助开发人员无缝的实现与本地java功能及Web技术动态能力的混合与匹配。
3.4.5.2 配置JDK
在安装完JDK后需要对环境变量进行配置,具体步骤如下所示。
3.4.5.2.1 path环境变量配置的作用
- 程序的执行需要使用外部指令javac,但是javac指令仅仅能在JDK安装目录下的bin目录下时候,因此程序只能写入bin目录
- 程序开发过程中,不能将源代码写入JDK的安装目录,因此需要将源程序保存到任意位置的指定目录(英文目录),所以需要使javac指令在任意目录下可以运行
3.4.5.2.2 path环境变量配置方式
- 通过配置path环境变量,将javac指令所在目录也就是JDK安装目录下的bin目录配置到path变量下,即可使javac指令在任意目录下运行
- win7,win8系统:右键点击桌面计算机→选择属性→选择高级系统设置→选择高级选 项卡→点击环境变量→下方系统变量中查找path→双击path
- XP系统:右键点击桌面计算机→选择属性→选择高级选项卡→点击环境变量→下方系统变量中查找path→双击path将jdk安装目录下的bin目录添加到最左边并添加分号
- path环境变量的参照形配置方式
创建新的变量名称:JAVA_HOME,为JAVA_HOME添加变量值:JDK安装目录,将path环境变量中JDK目录修改,%JAVA_HOME%\bin;,path环境变量具有先后顺序
我们配置成功后发现javac和java可以到处运行
3.4.5.2.3 classpath环境变量配置方式
我们配置成功path环境变量后发现java和javac可以到处运行,那么此时我们已不必将源代码放入bin目录下了,但是我们遇到这么一个问题就是,源文件中引用的工具类找不到此时该怎么办呢?其实这是因为Java是一种面向对象的编程语言,提供了很多开发工具类,我们在自己的代码中引用了这些类,那么是不是该告诉编译器去哪了找这些工具类了,配置CLASSPATH的目的就在于此,指定寻找.class的路径
CLASSPATH_8_64=.;D:\Java\JDK\JDK-1.8-64\lib;D:\Java\JDK\JDK-1.8-64\lib\tools.jar
作用:使classpath目录中的.class文件可以在任意目录运行
- 技巧:通常将配置的目录最前面添加.配置,即便当前目录,使.class文件搜索时首先搜索当前目录,然后根据目录配置的顺序依次查找,找到后即运行,因此classpath目录中的配置存在先后顺序
小知识:rt.jar是JAVA基础类库,dt.jar是关于运行环境的类库,tools.jar是工具类库
1.rt.jar 默认就在 根classloader的加载路径里面 放在claspath是多此一举
不信你可以去掉classpath里面的rt.jar
然后用 java -verbose XXXX 的方式运行一个简单的类 就知道 JVM的系统根Loader的路径里面
不光rt.jar jre\lib下面的大部分jar 都在这个路径里
2.tools.jar 是系统用来编译一个类的时候用到的 也就是javac的时候用到,实际上tools中放置的是Java提供的一些开发工具类
javac XXX.java
实际上就是运行
java -calsspath=%JAVA_HOME%\lib\tools.jar xx.xxx.Main XXX.java
javac就是对上面命令的封装 所以tools.jar 也不用加到classpath里面
3.dt.jar是关于运行环境的类库,主要是swing的包你要用到swing时最好加上
jdk1.5版本之前必须配置classpath,jvm虚拟机才能找到.class文件,1.5版本以后jvm虚拟机会默认在当前目录去找.class文件,所以我们现在的1.7版本可以不配置classpath,因为没有意义,但建议配置,考虑向下兼容的问题。
3.4.5.2.4 path和classpath的区别
path环境变量里面记录的是可执行性文件,如.exe文件,对可执行文件先在当前路径去找,如果没找到就去path环境变量中配置的路径去找
classpath环境变量里记录的是java类的运行文件所在的目录
3.4.5.2.5 我为什么要配置环境变量
在初学Java的时候知道要配置环境变量,可是当回过头来整理笔记准备深层次学习的时候再次面对环境变量却问了自己一个问题:“我为什么要配置环境变量呢?”。
我们在未配置JDK环境变量的时候,如果想要在DOS下运行javac,那么就必须进入到jdk的bin目录下,然后才能执行编译,那么我们配置JDK的目的也就在于解决这个问题,环境变量配置后,然后执行javac,系统会通过path取寻找javac,如果我们不配置,那么是无法寻找到的,配置后系统可以很轻易寻找到javac,然后就在我们的源码下可以编译和执行我们所写的Java代码了。
我们知道Java是一种面向对象的高级编程语言,说白了,就是我们编程时是可以将一些已经写好的工具类当做对象来使用的,通过对象来帮助我们简略开发,就如同字符串的截取等,我们不用自己去写只要调用String的相应方法既可,可我们通过一些非IDE编写的代码,是没有包导入的,此时就用到了ClassPath,它告诉编译器到哪里找需要执行的.class文件。在这里我们要把.java和.class的路径区别开。
(1).何时需要使用-classpath:当你要编译或执行的类引用了其它的类,但被引用类的.class文件不在当前目录下时,就需要通过-classpath来引入类
(2).何时需要指定路径:当你要编译的类所在的目录和你执行javac命令的目录不是同一个目录时,就需要指定源文件的路径(CLASSPATH是用来指定.class路径的,不是用来指定.java文件的路径的)