Java你不得不知道的,却总是感到迷惑的东西

关键字:环境变量 类装载器 path CLASSPATH  JDK 探秘

 

在学Java的时候,很多东西会让学习者很沮丧。比如光配以个环境遍历就让人头疼的了,还有很多莫名其妙的问题,比如明明运行java.exe没问题,可是运行javac.exe就有问题,他们不是都在一块,bin目录里面吗?其实这个边涉及到什么是path,什么是classpath。弄清楚了,这些都是很好解决的

不说这些,管一些新的名词概念也让人头疼。比如JDKJRE有什么区别?为什么我的系统有多个JRE?他们的放置情况如何?为什么我将自己的JDK目录删除了,我的Java应用程序仍然能够运行?其实这就涉及到一些基本概念以及JDK初始安装的时候应用程序背后所作的一些事情。

另外,经常提示找不到你明明就在你眼皮底下的类,暴出个什么 ClassDefNotFound的异常,让人 莫名其妙。其实这都和Java的类装载机制有关

 

如果你使用高端IDE比如eclipse,你可能就不会或者很少受这些困扰,然而让人悲哀是,凡是初学者,基本都是直接以 JDK+记事本 为开始的。这样你就不可避免的会遇到上面的种种问题。

 

好了说了上面的东东,无非是想让大家了解下我这篇文章的主旨,现在让我们开始吧。。。

 

JDK困惑之

--概念大突围

JDKJREJVM 名词快速解释

我先说下范围: JDK包含JRE,JRE包含JVM。并且他们都是依赖关系的,也就是JDK没有JRE,JRE没有JVM都不能正常工作。但是JRE可以脱离JDE独立工作,JVM也可脱离JRE而得到使用。

JDK 全名是JAVA开发套件

JRE 是 Java运行时环境

JVM 是Java虚拟机

 

JVM 到底是什么:

如果你是一个超强Windows使用者,你可以使用Windows的搜索功能,到你的系统盘下搜索jvm关键字,你便可以看到一到两个jvm.dll  有C或者C++编程经验的人一看就知道这是个共享链接库,不错。jvm是系统相关的,不同平台由不同的jvm实现。Java的类库比如swing,lang等包能使用是因为他们建立在jvm的基础上,当然由于Java类库都是由Java语言本身实现的,所以他们是平台无关的。他的平台无关是建立在Jvm的平台相关的基础上的,或者我们可以说,jvm.dll就是Java语言字节码(.class)文件的解释器,经过它,.class文件才能被计算机执行。

 

JRE到底是什么:

JRE=JVM+Java标准类库  很明白了吧。你要使用的什么什么Vector等Java核心类库实现的东西就必须JRE运行,不然JVM可就会提示什么Vector没有实现,你自己必须从新写。你唯一能用的是Java最基本的语言而已。

 

 

 

JDK是到底是什么:

JDK就是JRE+编译器。很简单,源码要成为.class文件必须有编译器。要运行.class文件必须有JRE。当然我这个解释不是很全面,因为JDK还附有很多其他的东东,当时我觉得这样理解是相当容易的。而且也没什么大的错误。呵呵

 

到底什么是Path变量:

 

系统找到相关可执行程序或者库的一个路径。比如我们执行ping www.websiteempire.cn,此时,系统怎么知道ping 命令的位置呢?你要知道程序的位置才能使用它啊。这个环境变量就是维护这些信息的东东。所以安装了JDK后,如果你要使用它就必须设置。

到底什么是CLASSPATH

 

这个东东好像是java特有的。叫“类路径”。这和Java语言本省有关,因为Java是有一堆.class文件组成的。程序运行的时候必须能找到这些class或者是jar包(jar文件其实也是class文件,只不过弄成了一个压缩包而已)。所以便有了ClASSPATH这个环境变量的存在。

那么我们来掩饰下他们是怎么设置的。

首先右键点击我的电脑,选择属性,然后在弹出的对话框内选择高级选项卡。

点击环境变量,进去新建一个JAVA_HOME 变量,填入你的主目录即可,我这里是

D:/JDK 

 

 

解释:为什么要设置这个东东呢。不是直接设置PathCLASSPATH变量就可以了吗

主要有两个原因,第一,以后你设置其他的变量,包括PathCLASSPATH时,用到D:/JDK

的时候,你都可以用%JAVA_HOME%代替。第二,有些Java应用程序,他会去找JAVA_HOME这个变量,我们提前设置,可以方便以后的程序。

 

好了我们接着设置Path.前面说了,设置这个主要是方便系统能够找到javac.ext,java.exe等懂东东,所以编辑已经存在的Path变量,我这里是在php-5.0后面添加

%JAVA_HOME%/bin

如下图

注意这里需要个分号。在Windows里面路径是以分号隔开的。所以如果你添加的位置前面没有分号,比如我这个php-5.0后面没有分号,我就价格分号。

 

好了Path就这么设置好了。

 

这个时候你去运行Java.exe,javac.exe等一般情况下是没有问题的了。但是也许还会有一些其他的问题,当然我说的是也许。呆会我们会讲到一些,这里不能讲太多,不然就跑题了。

 

接着我们开始设置能够找到JDK类库的CLASSPATH

仍然想前面一样,打开环境变量编辑器,一般如果你第一次安装JDK,是没有系统默认是没有CLASSPATH这个变量的。所以你要新建一个,在Windows里面,你在System或者User下面建立这个变量都是没有问题的,至于他们的区别,我们留在带后讨论。

CLASSPATH 变量必须以 .;  也就是 点,分号  起始,至于原因,留待下面的文章再讨论,你就先这么做着。这个时候一般需要添加两个路径,一个是JDK  lib 目录下tool.jar,我这里的全路径是D:/JDK/lib/tool.jar  另外一个是D:/JDK/lib   .tool.jar 的功能很重要,其实我们的java.exe.javac.exe他们只不过是一个exe包裹器,正真执行他们呢功能的是tool.jar包里面的那一大堆class文件。前面我讲你设置了Path 目录后虽然系统能找到这些javac.exe等东东,仍然可能会出问题的原因也就在这。好了,设置CLASSPATH 也没问题了。当然记得这两个路径也要以;分割。

我的设置如下:.;D:/JDK/lib;D:/JDK/lib/tool.jar

 

好好,这个时候你安装的JDK应该使用应该没有问题了。如果你刚设置完环境变量,你在使用它之前,最好要使用新开的cmd窗口。然后使用

Path 命令看看自己的设置是否有了显示

还有 echo %CLASSPATH%

 

 

JDK困惑之

--JDK安装程序背后做的事情

在你从sun公司下载JDK后,然后你接着安装。安装之后,JDK到底在背后做下了些什么呢?

哈哈,你也别试着回答我。你肯定没法回答全。当然我会捡一些核心的东东给你讲。

在你选择了安装目录之后(如果是1.4以上的版本的话),他会问你是否在系统盘\program File\下面再安装一个JRE,一般情况下我们选择是。在1.3版本之前,你是没有这个选择的权利的,jDK默认就会给你装上。

安装完之后,你到JDK主目录里面去看,也有一套JRE。所以在你安装完后JDK后你有了两套JRE。这个很可能便是一些问题的根源。由于两套JRE互不影响,所以假设你对他们其中的某一做了某些设置,并不会影响到另一套,所以当你运行程序的时候,在不知道系统运行到那一套JRe的情况下,很可能有不一致的结果。

那么我们如何知道系统用的是那一套JRE呢?

运行一个Java程序,说白了是调用 java XXX

所以我们必须知道是Java寻找JRE的方式。

下面是Java.exe找寻JRE的过程

 

1,自己的目录有没有JRE

2,父目录下有没有JRE子目录

3,查询 Windows registry(HKEY_LOCAL_MACHINE/Software/javasoft/java Runtime Enviroment/

 

那么又来了一个问题,根据前面我们所说的,两套JRE里面都有Java.exe,另外JDK里面的bin目录也有Java.exe,那么我们到底是用的是哪一个java.exe呢?(其实别的地方还有java,exe 比如系统盘下面的windows/system32里面也有一个java.exe,原因是该目录是windows默认的Path目录,所以你无需设置Path路径也能调用java.exe 从而运行Java程序)

本来想举个例子来说明一些问题的,可是他繁杂点了,所以打算在后续的篇章里面再举出例子。

上面问题的答案是,如果你系统默认会使用c:/winnt/system32下的Java.exe 当你执行Java程序的时候。因为通过path 命令你可看到,c:/winnt/system32是排在前面的,当你在这个目录找到java.exe后他就不会接着找了。

至于前面说两套Jre会产生的问题,我在下篇文章中也会详细讲到,并且会写出解决方案。

 

(今天暂时写到这里,欢迎大家批评指正)

 

 

——————————————————————————————

新网站上线 欢迎大家

网站交易中心 在这里你可以购买或者出售你的网站。
网站信息发布中心 在这里有各种交易信息的发布。同时提供
一些软件的免费使用(附有源码)。
网站博客系统 这里你可以注册自己的博客。一个账户无限量博客
联系方式: support@websiteempire.cn
QQ:563828566
MSN:zhuhailin123@hotmail.com
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值