首页 > 代码库 > Java补漏(一)

Java补漏(一)



第一章前言

        在学长的建议下,为了弥补之前学Java漏下的或者不是很清楚的知识点,买了本蛮好的教科书-Java学习笔记(JDK6)》,正式重新学习,为了记下一些让我恍然大悟的知识,写了本文档。

第二章Java入门

2.1 JVM的认识

        说到底Java是一种计算机高级语言,一般高级语言如果需要在操作系统上运行,那么它必须编译成机器语言,比如C语言,它的编译过程就是从C语言到汇编语言到机器语言。而Java的神奇之处在于Java的编译没有直接变成机器语言,而是一种中间语言,那么中间语言要在机器上执行就必须一个转换环境,这就是Java虚拟机即JVM扮演的角色。

这样做不是很麻烦吗?为什么不直接编译成机器语言,而是变成中间语言?这样做不是提高了Java开发的成本吗,还要安装一个虚拟机?

        的确,C语言的开发在一些系统中甚至不需要下载编译器,比如Linux系统下的C语言只需要写一个.c文本文件,然后在终端上直接输入gcc xxx.c指令即可编译成功。

        但是这样做的好处在于,通过建立不同操作系统下的JVM版本,可以使得Java编译后的中间语言通过不同系统版本的JVM直接运行。也就是说我们不需要在编译同一个Java程序多次,一次编译成功的.class中间语言文件即可在多个平台上运行。而你在windows系统下c语言编译得到的.exe文件却不能在linux系统下执行。你需要将原来的c语言源代码拿来,在linux系统下再编译一次。

    仔细想想,这有点像司马光砸缸的故事。是让人离开水还是水离开人?是重新编译多次还是下载安装一次虚拟机?

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2.2 JDKJRE的区别

        JRE全称JavaRuntime Environment,即Java运行环境,它是JVM的具体实现,当你下载好JDK的时候,你会发现名为jre的一个文件夹,打开后是这样一个目录。

2.1 jre文件夹目录

        bin文件夹中是一些可执行文件,lib文件夹中是执行class文件所需的类库。

        JDK,全名JavaDevelopment Kit,即Java开发包。它本身自带一个jre,主要用来开发测试之用。这个jre与公共jre的区别在于有没有server选项。

        

2.2 jdk文件目录

2.3 JDK环境配置中的path系统变量和classpath系统变量

        以前配置环境的时候一直没理解path变量和classpath变量的作用。蹭这个机会好好理解一遍。

2.3.1 Path变量

        Path变量是用来在cmd上添加指令的

        比如说现在你有一个英雄联盟的游戏,你希望在cmd上直接打开,这时候你可以在Path变量中添加英雄联盟游戏exe可执行文件所在目录地址

2.4 Client.exe双击便开始游戏

2.5Client所在目录地址添加到Path变量中

 

2.6cmd上输入Client指令

 

2.7输入发现游戏启动了

 

从上面的步骤可以看出Path变量的作用。配置Jdk环境时在Path系统变量中添加Jdk文件夹下的bin文件夹的地址的目的就是为了让操作系统找到指定的工具程序(以windows来讲就是找到.exe文件)。

2.3.2 Classpath变量

        设置Classpath的目的是让Java执行环境找到指定的Java程序,即.class文件。在配置Java环境的时候,这个变量设置为jdk/lib文件夹中的tools.jarrt.jar文件的绝对地址。jar文件中其实是一堆的.class文件,用压缩文件管理器打开tools.jarrt.jar,可以看到一堆的.class文件。

2.8 tools.jar文件解压后目录

 

jar格式压缩文件Java执行环境是可以直接运行的,运行是寻找其中的主方法。

假设你有一个.class文件在桌面上,而你把桌面目录的地址添加到了Classpath变量中,那么会发生什么呢?

2.9Classpath中添加一个地址

2.10cmd上使用Java指令直接运行Test.class文件

 

        发现如果在Classpath中设置了一个目录地址,或者一个jar文件的地址,那么该目录中或者该jar文件中的class文件是可以直接运行的。