热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Java中JAVA_HOME,PATH,CLASSPATH的作用和配置值。

Java中JAVA_HOME,PATH,CLASSPATH的作用和配置值。,Go语言社区,Golang程序员人脉社

这三个变量都可以设置在系统变量中(右键我的电脑,属性,高级系统设置,环境变量(弹出的框中上面是用户变量,下面是环境变量))
在这里插入图片描述
如图,点击新建之后,上面是变量名,如path,classpath,java_home。下面是变量的值。


  • JAVA_HOME 的值是JDK的安装目录,C:Program FilesJavajdk1.8.0_92。运行Tomcat需要设置此变量。

  • PATH:path变量的值是用户变量中的值与系统变量中的值的叠加。
    配置好JAVA_HOME后,就可以用以下方式把JDK的bin目录添加到PATH中:%JAVA_HOME%bin(注意要与前面的值用英文分号分开)。这样当更改了JDK的安装目录后,就只需改JAVA_HOME,而无需改PATH了,因为操作系统可以自动算出新的bin目录。

当我们安装好JAVA后,若没有正确配置PATH环境变量,则在命令行窗口下运行命令java -version(显示JAVA的版本)命令时,会出错。这条错误信息的意思是,你要求运行的java这条命令我不认识,不知道是个什么玩意儿。那么究竟这个java命令是何方神圣呢?在JDK的安装目录下(我的是C:Program FilesJavajdk1.8.0_92),有一个bin目录(binary:二进制可执行文件)。打开此目录,会发现大量的可执行文件(后缀名为exe的文件。Windows默认隐藏文件后缀名。要显示后缀名,见文章最后)。其中有一个可执行文件即为java.exe。实际上我们执行java命令,就是要运行java.exe这个可执行文件(我们运行其他命令,本质上也是要执行某个程序文件),javacjava编译为.class 文件,也是同理。



  • CLASSPATH:设置方法: .;%JAVA_HOME%libdt.jar;%JAVA_HOME%libtools.jar
    顾名思义,就是指要在哪里去寻找字节码文件(.class文件),因为我们知道JAVA程序的执行实际上是执行这些字节码文件。
    CLASSPATH有一点容易出错的是:若不设置,它的默认值是当前目录;而你设置后,又没有把当前目录(“.”,即英文的点)添加进去,则它就不再包含当前目录(这点与PATH不同,PATH总是包含当前目录)不加点的时候会导致找不到类的错误。因此,设置CLASSPATH时,一般先把添加当前目录,再添加其他值(不同的值之间用英文分号分开)。一般JAVA初学者不必自己设置CLASSPATH。当你需要用到第三方jar包(如JDBC驱动程序),而又没有使用eclipse、ant等开发工具,只是纯粹地使用javac、java等命令开发程序时,需要手动设置CLASSPATH。

classpath是javac编译器的一个环境变量。它的作用是指定类搜索路径,它与import、package关键字有关。当你improt.java.util.*时,编译器面对import关键字时,就知道你要引入java.util这个package中的类;但是编译器如何知道你把这个package放在哪里了呢?所以你首先得告诉编译器这个package的所在位置;如何告诉它呢?就是设置CLASSPATH啦。 如果java.util这个package在c:jdk 目录下,你得把c:jdk这个路径设置到CLASSPATH中去!当编译器面对import java.util.*这个语句时,它先会查找 classpath所指定的目录,并检视子目录javautil是否存在,然后找出名称吻合的已编译文件(.class文件)。如果没有找到就会报错!

classpath有点像cc++编译器中的include路径的设置哦,是不是?当cc++编译器遇到include 这样的语句,它是如何运作的?哦,其实道理都差不多!搜索include路径,检视文件!当你自己开发一个package时,然后想要用这个package中的类;自然,你也得把这个package所在的目录设置到CLASSPATH中去!
CLASSPATH的设定,对JAVA的初学者而言是一件棘手的事。所以Sun让JAVA2的JDK更聪明一些。你会发现,在你安装之后,即使完全没有设定CLASSPATH,你仍然能够编译基本的JAVA程序,并且加以执行

可以看出,CLASSPATH 里能包含大量备用的搜索路径。然而,使用JAR 文件时要注意一个问题:必须将JAR文件的名字置于类路径里,而不仅仅是它所在的路径。所以对一个名为grape.jar 的JAR 文件来说,我们的类路径需要包括:.;%JAVA_HOME%libdt.jar;%JAVA_HOME%libtools.jar

个人理解说明:其实从上面可以看出,如果你用记事本来写java程序(在Window下),并用cmd命令窗口中输入javac,java命令,如果你的代码中用到了其它的jar或者你自己的写的类,但又和你的主程序没在一个包下,这时你就要在classpath中设置你要用到的jar或者自己写的类的路径,让Java在编译器可以找到你要用的东西,如上面例子所示。 在我们用一些工具时,如eclipse中,我们可以把一些Jar包什么的添加进来,然后搜索路径的事工具帮我们做了,所以不用在手动加进去。所以在eclipse实际的开发中,没有用到系统配置的classpath,而是自己会生成一个.classpath的文件;只有用cmd javac 编译时会用到系统的classpath

摘录自 https://blog.51cto.com/legend2011/553255



Window文件显示后缀名:
在桌面双击我的电脑(计算机)—> 工具—> 文件夹选项 —> 查看 —>把隐藏已知文件类型的扩展名前面对的勾取消—>确定(或者应用)让你的设置生效 ,见下图。)
在这里插入图片描述


推荐阅读
  • golang常用库:配置文件解析库/管理工具viper使用
    golang常用库:配置文件解析库管理工具-viper使用-一、viper简介viper配置管理解析库,是由大神SteveFrancia开发,他在google领导着golang的 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 本文深入探讨了Linux系统中网卡绑定(bonding)的七种工作模式。网卡绑定技术通过将多个物理网卡组合成一个逻辑网卡,实现网络冗余、带宽聚合和负载均衡,在生产环境中广泛应用。文章详细介绍了每种模式的特点、适用场景及配置方法。 ... [详细]
  • 深入解析JVM垃圾收集器
    本文基于《深入理解Java虚拟机:JVM高级特性与最佳实践》第二版,详细探讨了JVM中不同类型的垃圾收集器及其工作原理。通过介绍各种垃圾收集器的特性和应用场景,帮助读者更好地理解和优化JVM内存管理。 ... [详细]
  • 本文详细分析了JSP(JavaServer Pages)技术的主要优点和缺点,帮助开发者更好地理解其适用场景及潜在挑战。JSP作为一种服务器端技术,广泛应用于Web开发中。 ... [详细]
  • 本文详细探讨了Java中的24种设计模式及其应用,并介绍了七大面向对象设计原则。通过创建型、结构型和行为型模式的分类,帮助开发者更好地理解和应用这些模式,提升代码质量和可维护性。 ... [详细]
  • 本文详细介绍了 Dockerfile 的编写方法及其在网络配置中的应用,涵盖基础指令、镜像构建与发布流程,并深入探讨了 Docker 的默认网络、容器互联及自定义网络的实现。 ... [详细]
  • 深入理解Java中的volatile、内存屏障与CPU指令
    本文详细探讨了Java中volatile关键字的作用机制,以及其与内存屏障和CPU指令之间的关系。通过具体示例和专业解析,帮助读者更好地理解多线程编程中的同步问题。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • DNN Community 和 Professional 版本的主要差异
    本文详细解析了 DotNetNuke (DNN) 的两种主要版本:Community 和 Professional。通过对比两者的功能和附加组件,帮助用户选择最适合其需求的版本。 ... [详细]
  • 使用Python在SAE上开发新浪微博应用的初步探索
    最近重新审视了新浪云平台(SAE)提供的服务,发现其已支持Python开发。本文将详细介绍如何利用Django框架构建一个简单的新浪微博应用,并分享开发过程中的关键步骤。 ... [详细]
  • 深入理解Java泛型:JDK 5的新特性
    本文详细介绍了Java泛型的概念及其在JDK 5中的应用,通过具体代码示例解释了泛型的引入、作用和优势。同时,探讨了泛型类、泛型方法和泛型接口的实现,并深入讲解了通配符的使用。 ... [详细]
  • 并发编程:深入理解设计原理与优化
    本文探讨了并发编程中的关键设计原则,特别是Java内存模型(JMM)的happens-before规则及其对多线程编程的影响。文章详细介绍了DCL双重检查锁定模式的问题及解决方案,并总结了不同处理器和内存模型之间的关系,旨在为程序员提供更深入的理解和最佳实践。 ... [详细]
  • 本文详细介绍了Java中org.eclipse.ui.forms.widgets.ExpandableComposite类的addExpansionListener()方法,并提供了多个实际代码示例,帮助开发者更好地理解和使用该方法。这些示例来源于多个知名开源项目,具有很高的参考价值。 ... [详细]
  • 本文详细介绍了 org.jdesktop.swingx.JXTitledPanel 类中的 setUI() 方法,探讨其功能、使用场景,并提供了多个实际代码示例。 ... [详细]
author-avatar
手机用户2502861123
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有