oen【引导】(先关注我呀!
首先,我们为了能够编译和运行java程序,需要在PATH环境变量中把java.exe所在的目录设置为 PATH变量的一部分,目的是为了能够通过命令行运行javac和java命令成为可能。
当你在命令行中输入javac ...或者java ...的时候,如果提示你一个错误:'javac' 不是内部命令或外部命令,也不是可运行的程序或批处理文件。这时候说明操作系统没有找到你通过命令行输入的javac这个命令。
为什么呢?因为操作系统并 不知道你的javac.exe这个文件在哪里,所以无法执行对应的文件。
那么为了能够让操作系统找到这个可执行文件,我们就需要把javac.exe这个 可执行文件所在的目录作为PATH环境变量的一部分设置起来,这样当你在命令行输入一个命令的时候,操作系统就会自动搜索PATH变量中所指定的所有目录 了。
在Windows系统中PATH变量中的所有路径采用分号分割,如果在Linux系统中采用冒号分割。
PS,如果你设置好了环境变量,在命令 行中还是出现同样的错误,那么有两种可能,一种就是你的设置不正确,另一种就是你的设置没有生效,一般你可以关闭命令行窗口再重新打开就可以了。
two【概述】(萌新求关注呀!
①环境变量就是一个系统的路径,当用到相关的东西,它会从环境变量中来查找需要的东西.
首先简单的说明如何设置环境变量
1.安装JDK后,假设把JDK安装在D:\Java\jdk1.5.0_06
2.然后在我的电脑上单击鼠标右键→选择属性→选择高级→环境变量
(win10 在控制面板(win+x)→系统与安全→系统→高级系统设置→环境变量)
3.新建用户变量 CLASSPATH 变量值 .;D:\Java\jdk1.5.0_06\lib\tools.jar;
(“.”意味在当前目录下找被编译的类,后文有解释)
4.新建系统变量 JAVA_HOME 变量值 D:\Java\jdk1.5.0_06
5.编辑系统变量 Path 变量值 %JAVA_HOME%\bin;
PS将 PATH的内容修改为:...;%JAVA_HOME%\bin是因为,当你的系统中重新安装JDK,并改变过目录的话,你只要修改 JAVA_HOME的内容就可以了,PATH则不需要修改。
此外,JAVA_HOME变量还会有一些其他用途,比如Eclipse这个IDE,它本身是由 java程序编写的,那么在运行的时候必然需要虚拟机的存在,所以Eclipse在启动时需要查找虚拟机,如果有JAVA_HOME这个变量,那么 Eclipse就会利用这个变量找到虚拟机的路径。
PSS具体想知道为什么,新建用户变量 CLASSPATH,新建系统变量 JAVA_HOME往后看
设定path是告诉系统,执行档程式位于什么地方。主要是执行JAVAc和JAVA这两个程式时使用的,也就是当你在命令列打入JAVAC xxx.java和JAVA xxx时,系统要去哪那里找JAVAc和JAVA这两个执行档。
②path&classpath
path:用来制定java虚拟机(JVM)所在的路径,设定path就是告诉系统,执行档程式位于什么地方。也就是我们经常用来编译java源程序的javac.exe和执行编译后生成的.class的java.exe;(path主要是执行JAVAc和JAVA这两个程式时使用的,也就是当在命令列打入JAVAC xxx.java和JAVA xxx时,告诉系统去哪里找JAVAc和JAVA这两个执行档。)
classpath:用来指定自己所写的和要用到类文件(.jar)的路径。
Path :Path指定一个路径列表,用于搜索可执行文件,执行一个可执行文件时,如果不能在当前路径下找到,则依次寻找path中的每一个路径,直到找到。以便正确快速运行.java程序。
(PS,设置path是因为window xp是多用户操作系统,支持不同用户的个性化系统定制,这里设置的信息只影响当前用户,而不会影响其他用户。假如只有一个用户,只是运行.class文件,则也不需要设置path环境,因为JDK安装之后会把java.exe等几个关键文件复制到c:\windows\system32目录中,而此目录已经存在于path变量,所以说用户变量path随不同用户而设置的,设置路径:“D:\jdk1.5\bin ”。)
ClassPath:指定JAVA的类文件存放路径。classpath就是指定这样一个路径,即你运行程序所需要的class文件的位置。
(设置classpath是为了将要使用到的class文件与Java中得类库文件关联起来,用以运行一些特殊的java程序,如以.jar为后缀的文件或者是javac运行java程序
设置方法是:(安装jdk是的目录为:d:\jdk1.5) 那么就在“变量值”文本框中键入“.;D:\jdk1.\lib\dt.jar;D:\jdk1.5\lib\tools.jar ”;)
three【详解】(给个赞呀
①Path和classpath区别:
1.path的作用
path是系统用来指定可执行文件的完整路径,即使不在path中设置JDK的路径也可执行JAVA文件,但必须把完整的路径写出来,如C:\Program Files\Java\jdk1.6.0_10\bin\javac TheClass.java。path是用来搜索所执行的可执行文件路径的,如果执行的可执行文件不在当前目录下,那就会依次搜索path中设置的路径;而java的各种操作命令是在其安装路径中的bin目录下,所以在path中设置了JDK的安装目录后就不用再把java文件的完整路径写出来了,它会自动去path中设置的路径中去找;
2.classpath的作用
classpath是指定你在程序中所使用的类(.class)文件所在的位置,就如在引入一个类时:import javax.swing.JTable这句话是告诉编译器要引入javax.swing这个包下的JTable类,而classpath就是告诉编译器该到哪里去找到这个类(前提是你在classpath中设置了这个类的路径);所以如果你没有设定,那JAVA就会跟你说它找不到。就算你是在JTable.javax.swing所在的路径指向这个命令,也要在 classpath 里面跟 Java 说要到目前所在的路径寻找JTable.javax.swing。否则JAVA还是找不到的。另外 如果 JTable.javax.swing 里面用到 b.class 時,在 classpath设定中也要包含 b.class 所在的路径。
PS.如果你想要编译在当前目录下找,就加上“.”,如:.;C:\Program Files\Java\jdk\,这样编译器就会到当前目录和C:\Program Files\Java\jdk\去找javax.swing.JTable这个类;
PSS.大多数人都是用Eclipse写程序,不设classpath也没关系,因为Eclipse有相关的配置;
path是os用
classpath java用
path里面不光有Java的bin,还可以包含许多其他的,tc啊,masm阿,只要在path中设了这些环境的路径,你在dos下的任何路径上都可以调用这些路径下的命令。
classpath是java专用的查找类的路径
②系统变量是环境变量区别
系统变量是环境变量的一种,环境变量一种仅本用户适用,另一种即系统变量整个系统的用户都适用,两者都可以在使用应用程序时提供快捷.一般在编辑java文件或者C#文件时需要修改,设计到多个文件夹之间的切换时也可以根据自己的需要设置.
简单的说就是,如果设置系统变量和用户变量,都叫做设置环境变量,设置系统变量时,该系统的所有帐号的用户都可以使用,但是设置用户变量时,其他的帐号登陆时就不一定可以使用。
下面以java环境变量为例设置方法:
1、如果是Win95/98,在\autoexec.bat的最后面添加如下3行语句:
JAVA_HOME=c:\j2sdk1.4.1
PATH=%JAVA_HOME%\bin;%PATH%
CLASSPATH=.;%JAVA_HOME%\lib
看好了CLASSPATH中第一个".",这个代表当前目录,很多人HelloWorld没有运行起来大多是这个原因。
2、如果是Win2000或者XP,使用鼠标右击"我的电脑"->属性->高级->环境变量
系统变量->新建->变量名:JAVA_HOME 变量值:c:\j2sdk1.4.1
系统变量->新建->变量名:CLASSPATH 变量值:.;%JAVA_HOME%\lib
系统变量->编辑->变量名:Path 在变量值的最前面加上:%JAVA_HOME%\bin;
CLASSPATH前面的那个"."和上面的意义是一样的。
3、如果是Linux用户
在你的环境中,通常我加在.bashrc文件中,你可以加在你的Profile文件中。
/usr/local/jdk 为你安装jdk的目录。
export JAVA_HOME=/usr/local/jdk
export CLASSPATH=.:$JAVA_HOME/lib
export PATH=$PATH:$JAVA_HOME/bin
HelloWorld.java经典测试代码:
public class HelloWorld{
public static void main(String args[]){
System.out.println("hello world !")
}
}
命令行输入:javac HelloWorld.java
生成HelloWorld.class
命令行输入:java HelloWorld
屏幕上打印"hello world !"
for【不建议大家设置CLASSPATH这个环境变量】
我们继续来谈论CLASSPATH的问题,很多书上在讲解java程序的时候建议大家设置CLASSPATH这个环境变量,我们这里不建议大家设置。原因 我们会在稍后的时候看到。讲到CLASSPATH,
我们首先来看编写java程序时一直在用的两个命令javac和java。
javac的命令语法是这样的:
javac <选项> <源文件>
我们常用的情况是这样的:
javac -classpath <类路径> <要编译的java源文件>
这里的类路径输入什么呢?这里的类路径是指要编译的java源文件中所用的非java的基础API中的类在那个目录下,路径可以是多个目录,用分号隔开 来。比如说我们要编译App.java这个文件,而这个文件中用到了com.util这个包中的MyDate这个类,现在我们假设MyDate这个类存在 目录是:d:\mylib\com\util\MyDate.class,那么我们如何编译App这个类呢?我们的命令如下:
javac -classpath d:\mylib App.java
注意这里的classpath的内容,我们只是指定路径到package所在目录,并不能把package一起指定进去,而且MyDate.class必 须在com\util这个目录中,因为这个类定义了package为com.util。
我们再来看java这个命令,这个命令的语法是这样的:
java [选项] 类 [参数]
比如说以上面的例子,我们假设App这个类位于com.app这个package中,它的存放目录是:d:\dev\myapp\com\app\App.class,那么我们该如何运行这个类呢?命令如下:
java -classpath d:\dev\myapp;d:\mylib com.app.App
从命令中我们可以看到,在classpath后面我们指定两个目录,分别是App这个类的package所在的目录和MyDate这个类的package 所在的目录,这里的类路径要给定的是要运行的类和这个类用到的所有类的package所在的目录,多个目录之间用分号隔离开来,最后指定要运行的类的时候 必须加上package。
如果我们在系统环境变量中设置了CLASSPATH的话,在命令行中通过 java运行的时候如果再不指定CLASSPATH参数,那么就会导致java虚拟机只是按照CLASSPATH环境变量中的目录搜索类,而不在你的当前 目录下搜索类,结果自然会出现Exception in thread "main" java.lang.NoClassDefFoundError,所以当你看到这个错误的时候请查看一下你的系统环境变量,如果没有设置 CLASSPATH,那么在检查一下你的当前目录。为了确保万无一失,按照上面讲述的例子进行操作是不会发生任何错误。
叔叔出品,必为精品。
呐,祝大家写代码愉快,我是程序媛,我为自己代言hhh