搜索
首页Javajava教程详解Java环境配置与编译运行(图文)
详解Java环境配置与编译运行(图文)Mar 30, 2017 am 10:36 AM
java环境配置

这篇文章主要为大家详细介绍了Java环境配置与编译运行的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

一、开篇

通过对之前Java之路的了解之后,相信初学者们都对Java有了一个比较深印象的了解了。但是事情不能总停留在理论层面,还得多多实现,才能见真知。我觉得,学习一样东西,要遵循理论——实践——理论这样一个套路。先了解事情的基本概念,弄懂基本概念后,要想方设法的用到生活的点点滴滴上,这样能加深理论的记忆以及发现自己的盲点。在重复的实践中,我们会逐渐对其有了自己的看法、想法,对理论有了一定的深化。最后回归理论,总结出自己的东西,这样东西就真正的属于你了。所以,今天我们要开始动手配Java环境,以及利用配好的Java环境来对程序进行编译运行。要注意的是,为了能让大家能更深刻的了解Java究竟是怎么样运作,怎样编译运行的,本章不会涉及到任何IDE的使用,编码当然就是用记事本了。IDE对提高日常的开发效率,但是记事本能增加大家应聘的录取机会哟!

二、JDK下载

要进行Java开发,除了JRE(Java运行环境)以外,还需要相应的开发工具,所以我们需要下载JDK。下载JDK可以到Oracle官网:www.oracle.com/ 上,选择Downloads——Java for Developers,如下:

详解Java环境配置与编译运行(图文)

接着选择download JDK,目前可选择的最新版为8u121。

详解Java环境配置与编译运行(图文)

如果要想获取以前的版本,可将页面拉到最下面,选择Java Archive,就可以获取到历史的Java版本。

详解Java环境配置与编译运行(图文)

我们这里以下载最新的8u121为例来进行后续说明。

三、JDK安装

根据系统环境下载了对应的版本之后,就可以进行安装了。整个安装过程没有什么特别,基本可以默认下一步就行了。如果需要,可以修改一下相应的目录。

详解Java环境配置与编译运行(图文)

中途会弹出一个对话框,意思是JRE所安装的目录,选择好目录然后"下一步"就行。

详解Java环境配置与编译运行(图文)

安装成功后,如果想看API文档之类的,可以点击它的"后续教程"。

详解Java环境配置与编译运行(图文)

至此,JDK已顺利安装完成。

四、环境配置

安装成功后,怎么用呢?我们可以打开命令控制台,然后去到你安装JDK目录的bin目录下,执行java命令,如果有一大堆提示出来,证明你已经安装正确了。

详解Java环境配置与编译运行(图文)

有的同学可能会遇到下面这种情况:

详解Java环境配置与编译运行(图文)

为什么会这样子呢?细心的同学可能会发现,当前目录不一样。我一开始就说了,我们需要在你安装JDK目录的bin目录下执行java命令,才能生效。原因很简单,就是因为bin目录下有各种各样的命令,java是其中一个命令。我们用到的很多关于java的命令,如javac、javaw等,都是在其bin目录下,所以大家以后深入学习,可以先对bin目录下的工具进行学习,里面有很多很有用的工具,这是后话。

详解Java环境配置与编译运行(图文)

回答刚刚的话题,如果一定要在bin目录下才能运行java命令是很不方便的一件事,不但不方便,很多其他程序要用到java命令也用不上,因为他们不知道去哪里找java命令。这个时候,我们就需要对系统配置环境变量,以方便在什么目录下都能执行java命令。

选择"开始"——右键"计算机"——属性——高级系统设置——环境变量,即可打开环境变量的设置窗口。

详解Java环境配置与编译运行(图文)

主要对以下三个变量进行设置:

1.新增JAVA_HOME,值为JDK路径,此处为:C:\Program Files\Java\jdk1.8.0_121

2.编辑:PATH,在原变量值的最后加上";%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin"。这里稍作一下说明。值里面的%JAVA_HOME%意思就是上一条新增变量JAVA_HOME的值,可见第一条新增变量JAVA_HOME是为了方便PATH变量配置的时候不需要写得太冗长。而PATH变量自身的意思就是windows会在PATH变量值里所列出的目录中一条一条的查找要执行的命令,所以只要配置了PATH,java命令就不需要一定在JDK目录的bin目录下执行了。而至于为什么是上面那两个目录,是因为bin下面的都是java用到的命令,也可以说是一些工具。

3.新增:CLASSPATH,其值为".;%JAVA_HOME%\lib;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar"。CLASSPATH的作用是让java程序编译的时候(用javac的时候)知道去哪里找到Java的源文件,或者字节码文件(CLASS文件)。其中,dt.jar是关于运行环境的类库,tools.jar是工具类库,编译和运行的时候都需要用到。这里值得十分注意的是,整串值的开始部分有个".",一定不能漏,这代表的是当前目录的意思。

当配置完这三点,我们再在用户的目录下运行java -version命令,就能看到cmd能自动找到java程序并且运行了。

详解Java环境配置与编译运行(图文)

五、初识Java编译

在开发我们的第一个Java程序之前,首先粗略的了解一下Java代码的编译和执行的整个过程。我们经常会看到Java工程里面有这两种后缀的文件:.java和.class。这两种文件分别代表Java的源代码和字节码文件,而其中的字节码文件就是java实现"Write Once,Run Anywhere"的关键。我们可以先来看看下面两幅图[1]。

Java编译器编译Java代码的流程如下:

详解Java环境配置与编译运行(图文)

JVM执行引擎完成Java字节码的执行:

详解Java环境配置与编译运行(图文)

从上两图可以看到,Java运行程序分两步走,第一步是源码编译成字节码,第二步是字节码编译成目标代码。这就和C、C++直接编译成与机器相关的目标代码不一样了。通过字节码这一中间环节,大家可以拿着编译成功的包发布到任一有JVM环境的机器上,再由JVM来实现到机器相关的最终目标代码的编译,从而做到"Write Once,Run Anywhere",而无需与具体运行平台绑定。所以我们通常所说的对代码进行编译,就是Java源代码编译成JVM字节码的过程。

六、java与javac

在上一节我们已经说过,%JAVA_HOME%\bin目录下有大量的Java工具可以使用,我们以后也要逐渐熟悉。那作为初接触java的我们,首先应该熟悉哪个呢?无疑是java与javac了。

现在的社会节奏太快了,很多人都或多或少有点急功近利。在开发方便,这主要体现在没理解程序的底层是怎么运作的,一上来就开始IDE开发,遇到各种问题后,由于不懂底层原理,就不知道如何处理。个人认为,IDE要用,可以极大的提高我们的生产效率,但是底层原理也一定要懂,不然都不知道IDE是怎么讲你的程序编译打包运行的,遇到问题的时候就不会解决了。很经常见到的一种情况是,有些人看到服务器上没有IDE就懵了,连怎么运行jar包程序都不会。

回归正传,我们就从java与javac入手,了解怎么在命令行中编译和运行一个java程序。首先,我们分别认识这两个命令是怎么用的。

java命令:

作用:用于执行类或者执行jar文件。

在cmd控制台中输入java回车,我们可以得到java命令运行的格式如下:

详解Java环境配置与编译运行(图文)

上图没有截完整,选项(-options)后面还有的,大家可自行运行java命令来看。我们暂时忽略选项(-option)的内容,主要看必填项"类"和"jar文件"。可以看到java命令可直接运行类和jar文件。举个例子,如何有个HelloWorld.class文件里面有个HelloWorld类,则运行的命令是:java HelloWorld。这里要注意的是,java后面不是class文件(HelloWorld.class),而是对应的类(HelloWorld)。如果有个HelloWorld.jar的jar文件,运行的命令是:java -jar HelloWorld.jar。

javac命令:

作用:用于编译.java文件。

在cmd控制台中输入javac回车,我们可以得到javac命令运行的格式如下:

详解Java环境配置与编译运行(图文)

我们暂时忽略选项(-option)的内容,可以看到javac最简单的格式就是跟一个源代码文件。举个例子,如果有一个HelloWorld.java文件需要对其编译,则运行的命令为:javac HelloWorld.java,就可以在当前目录下生成一个HelloWorld.class的字节码文件。

七、第一个Java程序

了解完java和javac命令以后,我们就可以开始第一个Java程序了,当然,我们是用记事本来开始我们的第一个Java程序。微软自带的记事本功能比较少,用户体验也不是十分好,个人比较喜欢用Notepad++,大家可根据自己的习惯来选择喜欢的记事本。

第一部分:

创建HelloWorld类,保存在HelloWorld.java文件中。

详解Java环境配置与编译运行(图文)

在cmd控制台中,运行javac HelloWorld.java命令对其编译,则会自动生成HelloWorld.class文件。

详解Java环境配置与编译运行(图文)

然后运行java HelloWorld命令,则会显示Hello World。这里一定要注意,不是运行java HelloWorld.class,java后面跟的是要运行的类,即HelloWorld。

详解Java环境配置与编译运行(图文)

这就完成了从代码编写,到编译,再到运行的整个过程了,是不是很简单呢?其实一切复杂的事情都是从简单做起,只要打好了基础,学习上层的东西就很简单了。

第二部分:

有人会问了,那如果要引用其他的jar包或者类的话,那怎么办呢?别急,我们尝试一下。首先建个User类(只是随便建个类,大家别太在意),它有个说出内容的方法,存在User.java文件中,代码如下:

详解Java环境配置与编译运行(图文)

修改HelloWorld类,代码如下:

详解Java环境配置与编译运行(图文)

User.java放在otherclass目录睇下,不在HelloWorld.java同一个目录:

详解Java环境配置与编译运行(图文)

然后我们尝试用上面的方法进行编译,会发现提示找不到User类,这就是因为javac不知道去哪里找User类的缘故了。

详解Java环境配置与编译运行(图文)

遇到这些情况,我们一定要会看帮助提示,看看javac可以提供什么参数。这不单单为了解决目前的问题,还为了以后解决各种各样更多的问题,只要能做到举一反三,没有什么问题能难得到你。

详解Java环境配置与编译运行(图文)

我们可以看到,只要增加-classpath参数,就可指定要查找的类的文件位置,这样我们就可以给javac指定User的位置了,所以我们可以写成:

详解Java环境配置与编译运行(图文)

则会成功编译HelloWorld.java和User.java,在对应目录中生成HelloWorld.class和User.class。

这时候我们可以执行java HelloWorld看看能否出结果,但可惜的是,又说没找到User类:

详解Java环境配置与编译运行(图文)

聪明的同学可能会想到,java应该也有个-classpath参数。恭喜你,开始开窍了,那我们赶紧试试看:

详解Java环境配置与编译运行(图文)

又不行,崩溃中!!呵呵,别急,java跟javac有点不同,java带着-classpath参数会是java只会在classpath所在的目录里找类,所以如果HelloWorld实在当前目录下,要把当前目录加上,也就是加一".",如下:

详解Java环境配置与编译运行(图文)

这就成功运行了。

第三部分:

这时候,有些人又不爽了,为什么每次编译运行都要执行这么一大串东西,那多麻烦,如果类多起来,那岂不是输个命令都要输半天,有没有一些方便一点的方法,供以后执行用呢?那当然有,这就是将所有类打包成一个可执行的jar包,以后直接运行jar包就可以了。这里用到的命令是jar命令,我们先看看它的格式与内容:

详解Java环境配置与编译运行(图文)

这里我们主要用到的是以下四个选项:

-c 创建新的归档文件

-v 在标准输出中生成详细输出

-f 指定归档文件名

-e 为捆绑到可执行 jar 文件的独立应用程序

指定应用程序入口点

这里我们根据提示的格式,用以下命令将User.class和HelloWorld.class打包成HelloWorld.jar包。

详解Java环境配置与编译运行(图文)

这就生成了一个HelloWorld.jar的文件。如果大家想看HelloWorld.jar里面有什么内容,告诉大家一个小技巧,可以将jar包拖到winrar等压缩软件中,就可以看到具体的内容。

详解Java环境配置与编译运行(图文)

可以看到里面除了要打包的内容外,还多了一个META-INF文件夹,里面有一个MANIFEST.MF文件,这是一个清单文件,里面有相关的清单信息。我们需要对其进行编辑,增加Class-Path:参数,就如告诉java命令classpath是什么一样。下图中高亮的为增加的内容:

详解Java环境配置与编译运行(图文)

最后,我们通过java -jar HelloWolrd.jar命令,则可运行其程序。以后我们拿着这个jar包就可以随处显示"Hello World",比之前要弄一大串选项方便多了。

详解Java环境配置与编译运行(图文)

八、总结

本文从jdk的下载、安装,环境的配置,程序的编写、编译以及执行,从头到尾做了很详尽的介绍,为的是让大家对这个过程有个深刻的了解。环境配好了,用上IDE了,以后大家就可能很少接触这一过程的了。但这一过程不能丢,这是一个基础,正如我前面说的,如果你不了解基础,遇到问题的时候,都不知道从何解决。上层东西学多了,但却不了解底层究竟是怎么一回事,心里没有底,人家换个包装,你又重新学习,而做不到举一反三,那是事倍功半啊!

以上是详解Java环境配置与编译运行(图文)的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
带你搞懂Java结构化数据处理开源库SPL带你搞懂Java结构化数据处理开源库SPLMay 24, 2022 pm 01:34 PM

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于结构化数据处理开源库SPL的相关问题,下面就一起来看一下java下理想的结构化数据处理类库,希望对大家有帮助。

Java集合框架之PriorityQueue优先级队列Java集合框架之PriorityQueue优先级队列Jun 09, 2022 am 11:47 AM

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于PriorityQueue优先级队列的相关知识,Java集合框架中提供了PriorityQueue和PriorityBlockingQueue两种类型的优先级队列,PriorityQueue是线程不安全的,PriorityBlockingQueue是线程安全的,下面一起来看一下,希望对大家有帮助。

完全掌握Java锁(图文解析)完全掌握Java锁(图文解析)Jun 14, 2022 am 11:47 AM

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于java锁的相关问题,包括了独占锁、悲观锁、乐观锁、共享锁等等内容,下面一起来看一下,希望对大家有帮助。

一起聊聊Java多线程之线程安全问题一起聊聊Java多线程之线程安全问题Apr 21, 2022 pm 06:17 PM

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于多线程的相关问题,包括了线程安装、线程加锁与线程不安全的原因、线程安全的标准类等等内容,希望对大家有帮助。

Java基础归纳之枚举Java基础归纳之枚举May 26, 2022 am 11:50 AM

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于枚举的相关问题,包括了枚举的基本操作、集合类对枚举的支持等等内容,下面一起来看一下,希望对大家有帮助。

详细解析Java的this和super关键字详细解析Java的this和super关键字Apr 30, 2022 am 09:00 AM

本篇文章给大家带来了关于Java的相关知识,其中主要介绍了关于关键字中this和super的相关问题,以及他们的一些区别,下面一起来看一下,希望对大家有帮助。

Java数据结构之AVL树详解Java数据结构之AVL树详解Jun 01, 2022 am 11:39 AM

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于平衡二叉树(AVL树)的相关知识,AVL树本质上是带了平衡功能的二叉查找树,下面一起来看一下,希望对大家有帮助。

一文掌握Java8新特性Stream流的概念和使用一文掌握Java8新特性Stream流的概念和使用Jun 23, 2022 pm 12:03 PM

本篇文章给大家带来了关于Java的相关知识,其中主要整理了Stream流的概念和使用的相关问题,包括了Stream流的概念、Stream流的获取、Stream流的常用方法等等内容,下面一起来看一下,希望对大家有帮助。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前By尊渡假赌尊渡假赌尊渡假赌

热工具

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

功能强大的PHP集成开发环境

EditPlus 中文破解版

EditPlus 中文破解版

体积小,语法高亮,不支持代码提示功能

螳螂BT

螳螂BT

Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

mPDF

mPDF

mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),