关闭

Java新手入门——环境变量

标签: javapathjdkclassexceptionimport
727人阅读 评论(2) 收藏 举报
分类:

怎么说呢,看到很多贴子,都说是建议新手从一开始尽量用“记事本+javac.exe+java.exe”编写Java程序,当时还想,用IDE写不照样嘛,能学不就可以了?但慢慢的,发现自己竟然是连最基本的import都有点搞不明白了。对于一些小程序还可以,一个包,几个class文件就搞定了,但要想重用之前的类,就不知道该怎么弄了。所以嘛,呵呵,回过头来补习一下这最基本的环境变量的配置吧!

之所以要从环境变量开始,主要还是因为一些IDE,它都是自动设置Java路径的,也就是说你装完了JDK、IDE之后就根本什么都不用管了,直接写代码就好了。但Java的包机制却是和环境变量有着密切关系的。而关于环境变量的知识我不准备讲了,哪位感兴趣的自己百度里找找吧,有很多的——毕竟这不是本文的重点嘛~

嗯,Java中相关的环境变量网上都有很多的,我找了一篇对我来说启发很大的贴下来吧——删去了其中一些废话。本来想把作者贴出来的,可惜网上文章一大抄,都不知道到底是出自谁手,我也只能是在心里对该文的作者致敬了…

Windows下JAVA用到的环境变量主要有3个,JAVA_HOME、CLASSPATH、PATH。
JAVA_HOME指向的是JDK的安装路径,如C:/JDK_1.4.2,在这路径下你应该能够找到bin、lib等目录。值得一提的是,JDK的安装路径可以选择任意磁盘目录,不过建议你放的目录层次浅一。
设置方法:
JAVA_HOME=C:/JDK_1.4.2
PATH环境变量原来Windows里面就有,你只需修改一下,使他指向JDK的bin目录,这样你在控制台下面编译、执行程序时就不需要再键入一大串路径了。设置方法是保留原来的PATH的内容,并在其中加上%JAVA_HOME%/bin (注,如果你对DOS批处理不了解,你可能不明白%%引起来的内容是什么意思;其实这里是引用上一步设定好的环境变量JAVA_HOME,你写成C:/JDK_1.4.2也是可以的;你可以打开一个控制台窗口,输入echo %JAVA_HOME%来看一下你的设置结果) :
PATH=%JAVA_HOME%/bin;%PATH%
同样,%PATH%是引用以前你设置的PATH环境变量,你照抄以前的值就行了。
CLASSPATH环境变量我放在最后面,是因为以后你出现的莫名其妙的怪问题80%以上都可能是由于CLASSPATH设置不对引起的,所以要加倍小心才行。
CLASSPATH=.;%JAVA_HOME%/lib/tools.jar
首先要注意的是最前面的".;",如果你看不清,我给你念念——句点分号。这个是告诉JDK,搜索CLASS时先查找当前目录的CLASS文件。
具体的设定方法: win2k/xp用户右键点击我的电脑->属性->高级->环境变量,修改下面系统变量那个框里的值就行了。

这样子就基本上把环境变量设置好了。

所以我随便在硬盘上任何一个地方,比如E盘根目录,建立一个HelloWorld.java文件,内容如下:

public class HelloWorld{
    
public static void main(String[] args){
        System.out.println(
"Hello,world!");
    }

}

然后在命令提示符下,键入以下语句,就可以运行程序了。

C:/Documents and Settings/LZJ>E:

E:/>javac HelloWorld.java

E:/>java HelloWorld
Hello,world!

但是,如果是我们想把这个HelloWorld文件打进一个包内呢?试着在HelloWorld的第一行加入语句 package lzj; 会出现什么结果呢?

在E盘里面建立一个文件夹,命名为lzj,然后把经过修改过后的HelloWorld.java剪切过去,编译,运行。

E:/>cd lzj

E:/lzj>javac HelloWorld.java

E:/lzj>java HelloWorld
Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorld (wrong nam
e: lzj/HelloWorld)
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClass(Unknown Source)
        at java.security.SecureClassLoader.defineClass(Unknown Source)
        at java.net.URLClassLoader.defineClass(Unknown Source)
        at java.net.URLClassLoader.access$100(Unknown Source)
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClassInternal(Unknown Source)

晕,这回却出现错误了…

为什么呢?因为现在HelloWorld是隶属于lzj包下的,所以Java在定位它的时候就应该定位成lzj.HelloWorld。于是……我们应该这么样来运行它:

E:/lzj>cd..

E:/>java lzj.HelloWorld
Hello,world!

呵呵,成功了!通过这个例子,我们明白了,包内的class文件它的名称应该是“包名.类名”这样子的。其实想想也是啊,在编程序的时候,我们不都是这样来定位一个类的吗,比如说,java.util.Calendar。——除了位于java.lang包的类和已用import把它的包整个都导入的情况。

 

——好了,这一块差不多了,时间也到了,还要去上选修课啊……晚上如果有时间的话会再来说一下怎么配置自己的工具包的,不过原理都一样,很简单的~

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:16325次
    • 积分:350
    • 等级:
    • 排名:千里之外
    • 原创:17篇
    • 转载:1篇
    • 译文:0篇
    • 评论:25条
    文章分类
    最新评论