第六讲
由于本人不是计算机专业,但是找工作要找这方面,以前也没有系统的看过书,现在看书,还是发现以前迷糊的其实有很多是基础知识,比如说今天又看到了jdk,,jre,,
当初作为一个白痴实习生,在安装jdk的时候废了很大力气,纠结于安装了jdk 到底还要不要安装jre...其实目前我还是有点迷茫的,
为什么需要jdk?
JDK是java软件开发包的简称,要想开发java程序就必须安装JDK。没有JDK的话,无法编译Java程序。
JDK包含的基本组件包括:
javac – 编译器,将源程序转成字节码
jar – 打包工具,将相关的类文件打包成一个文件
javadoc – 文档生成器,从源码注释中提取文档
jdb – debugger,查错工具
java – 运行编译后的java程序(.class后缀的)
appletviewer:小程序浏览器,一种执行HTML文件上的Java小程序的Java浏览器。
Javah:产生可以调用Java过程的C过程,或建立能被Java程序调用的C过程的头文件。
Javap:Java反汇编器,显示编译类文件中的可访问功能和数据,同时显示字节代码含义。
Jconsole: Java进行系统调试和监控的工具
JRE - java程序运行环境
java.exe和javaw.exe的区别
相同点:二者都是Java的虚拟机,用来执行Java程序
区别:javaw.exe运行程序时不会输出控制台信息,
如果是双击打开jar文件的话(假设已经设置好了打开方式),
那么根本就不会出现控制台窗口,主要用来运行带窗体的应用程序,
其中的“w”就是window的意思,所以用它来运行控制台程序时虽不会报错,
但不会输出任何结果。而java.exe无论运行控制台程序,还是运行窗体程序都没有任何问题。
具体http://www.cnblogs.com/liuxianan/archive/2013/01/22/2871158.html
为什么要配置jdk的环境变量?
jdk需要配置的环境变量一般有三个:JAVA_HOME、path和CLASSPATH
1、JAVA_HOME:它指向jdk的安装目录。
作用(大神总结):
一是为了方便引用,比如,JDK安装在C:\jdk1.6.0目录里,则设置JAVA_HOME为该目录路径, 那么以后要使用这个路径的时候, 只需输入%JAVA_HOME%即可, 避免每次引用都输入很长的路径串;
二则是归一原则, 当JDK路径改变的时候, 仅需更改JAVA_HOME的变量值即可, 否则,就要更改任何用绝对路径引用JDK目录的文档, 要是万一没有改全, 某个程序找不到JDK, 后果是可想而知的----系统崩溃!
三则是第三方软件会引用约定好的JAVA_HOME变量, 不然, 你不能正常使用该软件.
2、path:作用是指定命令的路径。即告诉操作系统javac和Java这些相关命令在哪个目录下放着。当设置好path这个环境变量的时候,就可以在任何目录下执行javac和Java命令了。
3、CLASSPATH:作用是指定类的搜索路径。 当我们在开发java程序时需要引用别人写好的类时,要让java解释器知道到哪里去找这个类。通常,sun为我们提供了一些额外的丰富的类包,一个是dt.jar(也就是所谓的java内部包),一个是tools.jar,这两个jar包都位于jdk\lib目录下,所以通常我们都会把这两个jar包加到我们的classpath环境变量中
(注意,CLASSPATH 中最前面是有个 “.”的,表示当前目录,这样当我们运行java AClass的时候,系统就会先在当前目录寻找AClass文件了。)
说说jdk,,,jre,,,JVM的关系。。
jdk(Java Development Kit:java 开发工具包):JDK是整个JAVA的核心,包括了Java运行环境JRE(Java Runtime Envirnment)、一堆Java工具(javac/java/jdb等)和Java基础的类库(即Java API 包括rt.jar)。即jdk=jre+Java工具+Java基础库类
JRE(Java Runtime Envirnment:Java运行环境):包含了Java virtual machine(JVM),runtime class libraries和Java application launcher,这些是运行Java程序的必要组件。即JRE=JVM+java核心库类
JVM(java virtual machine:java虚拟机):它是整个java实现跨平台的最核心的部分,所有的java程序会首先被编译器(javac.exe)编译为.class文件(字节码文件),字节码文件可以单独拿去运行,这也就是Java的厉害所在,即一次编译到处运行。Java虚拟机(JVM)将这些字节码文件解释为机器码,然后在计算机上运行。
此外Java 程序的字节码文件可以放到任意装有 JRE 的计算机运行,再由不同 JRE 的将它们转化成相应的机器代码,这就实现了 Java 程序的可移植性。因为这种性质,一个项目结束的时候可以只给他你的字节码文件,然后安装一个jre既可以了。(个人理解,不知道对不对)
JVM、javac.exe、java.exe的关系。。
javac编译后得到的class文件是二进制指令,但不是机器指令,而是java虚拟机可识别的指令。这样class文件就有了可移植行。你可以把class文件拿到windows、linux或者solaris等不同的系统上去,在jvm上执行。
java是启动jvm,jvm负责对class文件的内容进行处理,将字节码文件解释或者编译为机器指令,执行。