昨晚无意中看天才知道发现了这么个题目大概是这样:
java是一种跨平台语言,它组成的2个部分是什么?
思考了一下,又看一次基础:
java语言是一种基于“面向对象”思想的程序设计语言,一次编译随处运行~~
java语言的特点:
java具有:跨平台、面向对象、多线程、安全性、编译与解释合二为一等优势,
java的特点有以下几点:
1,跨平台性:既“与平台 无关性”,用java编写的程序可以在任何硬件体系与操作系统上执行。
2,支持面向对象:面向对象思想使得程序更加便于人类思维方式的理解。
3,多线程:多线程机制使得程序可以同时执行多条路径,做不同的事情。
CPU大家都知道,如果计算机是人,那CPU就是人的大脑,它既负责思维运算,又负责身体各部件的命令控制。CPU的种类很多,除去我们熟知的Intel与AMD外,还有比如上面说到的SUN的Sparc,比如IBM的PowerPC等等,这些各个公司生产的CPU使用或相同或不同的指令集。指令集就是cpu中用来计算和控制计算机系统的一套指令的集合。指令集又分为精简指令集(RISC)与复杂指令集(CISC),每种cpu都有其特定的指令集。开发程序,首先要知道该程序在什么CPU上运行,也就是要知道CPU所使用的指令集。
下面说操作系统,操作系统是充当用户和计算机之间交互的界面软件,不同的操作系统支持不同的CPU,严格意义上说是不同的操作系统支持不同CPU的指令集。例如 windows和liunx都支持Intel和AMD的复杂指令集,但并不支持PowerPC所使用的精简指令集,而早期的MAC电脑使用的是PowerPC处理器,所以也就无法在MAC下直接安装windows,直到05年MAC改用了Intel的CPU,才使在MAC下安装windows成为可能。但问题来了,原来的MAC 操作系统也只支持PowerPC,在Intel上也不能安装,怎么办?所以苹果公司也得重写自己的MAC操作系统以支持这种变化。最后总结下,我们要知道,不同的操作系统支持不同的CPU指令集,现在的windows,liunx,mac,solaris都支持Intel与AMD的CPU指令集。
java的应用领域:
1,由于java语言具有跨平台性,使得可以进行不同硬件体系与操作系统间的数据通讯。
2,java语言可以设计出质量很高的图形,因此比较适合开发图形或多媒体软件。
3,由于java语言支持applet程序,所以比较适合开发Internet程序。
网络计算机模式的一个特点就是,网络中的计算机是异构的,既硬件体系与操作系统的差异。在java之前的计算机语言只适用于指定硬件体系中的指定操作系统,没有办法移植到另一种类型的计算机中去。java语言编写的程序可以在任何硬件体系与操作系统上执行。
java语言本身提供了操作系统接口,使得开发基于操作系统的应用软件非常容易。
JDK : Java Development ToolKit(Java开发工具包)。JDK是整个JAVA的核心,包括了Java运行环境(Java Runtime Envirnment),一堆Java工具(javac/java/jdb等)和Java基础的类库(即Java API包括rt.jar)。
最主流的JDK是Sun公司发布的JDK,除了Sun之外,还有很多公司和组织都开发了属于自己的JDK,例如国外IBM公司开发了属于自己的JDK,国内淘宝也开发了属于自己的JDK,各个组织开发自己的JDK都是为了在某些方面得到一些提高,以适应自己的需求,比如IBM的JDK据说运行效率就比SUN的JDK高的多。但不管怎么说,我们还是需要先把基础的Sun JDK掌握好。
JDK有以下三种版本:
J2SE,standard edition,标准版,是我们通常用的一个版本J2EE,enterpsise edtion,企业版,使用这种JDK开发J2EE应用程序J2ME,micro edtion,主要用于移动设备、嵌入式设备上的java应用程序
我们常常用JDK来代指Java API,Java API是Java的应用程序接口,其实就是前辈们写好的一些java Class,包括一些重要的语言结构以及基本图形,网络和文件I/O等等 ,我们在自己的程序中,调用前辈们写好的这些Class,来作为我们自己开发的一个基础。当然,现在已经有越来越多的性能更好或者功能更强大的第三方类库供我们使用。
JRE:Java Runtime Enviromental(java运行时环境)。也就是我们说的JAVA平台,所有的Java程序都要在JRE下才能运行。包括JVM和JAVA核心类库和支持文件。与JDK相比,它不包含开发工具——编译器、调试器和其它工具。
JVM:Java Virtual Mechinal(JAVA虚拟机)。JVM是JRE的一部分,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。JVM有自己完善的硬件架构,如处理器、堆栈、寄存器等,还具有相应的指令系统。JVM的主要工作是解释自己的指令集(即字节码)并映射到本地的 CPU 的指令集或 OS 的系统调用。Java语言是跨平台运行的,其实就是不同的操作系统,使用不同的JVM映射规则,让其与操作系统无关,完成了跨平台性。JVM对上层的 Java 源文件是不关心的,它关注的只是由源文件生成的类文件( class file)。类文件的组成包括 JVM指令集,符号表以及一些补助信息。
简单来说 :它是整个java实现跨平台的最核心的部分,所有的java程序会首先被编译为.class的类文件,这种类文件可以在虚拟机上执行,也就是说class并不直接与机器的操作系统相对应,而是经过虚拟机间接与操作系统交互,由虚拟机将程序解释给本地系统执行。。
java的工作流程如下:
源文件 ->编译器-> 字节码文件 ->java虚拟机-> 机器代码
java虚拟机要根据不同的处理器与操作系统进行不同的实现。
java虚拟机的组成结构:
java虚拟机由5个逻辑成分所组成:
1,指令集
2,寄存器
3,栈
4,垃圾回收堆
5,方法区域
代码安全性检测机制:
java程序安全性较高,但是为此要付出的代码就是过多的限制。java负责执行时的安全检测,比如applet不允许访问本地文件系统。java进程不允许访问其他进程的数据。
下图很好的表面了JDK,JRE,JVM三者间的关系:
の
1、为什么Sun要让JDK安装两套相同的JRE?
这是因为JDK里面有很多用Java所编写的开发工具(如javac.exe、jar.exe等),而且都放置在 \lib\tools.jar 里。从下面例子可以看出,先将tools.jar改名为tools1.jar,然后运行javac.exe,显示如下结果: Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/tools/javac /Main 这个意思是说,你输入javac.exe与输入 java -cp c:\jdk\lib\tools.jar com.sun.tools.javac.Main 是一样的,会得到相同的结果。从这里我们可以证明javac.exe只是一个包装器(Wrapper),而制作的目的是为了让开发者免于输入太长的指命。而且可以发现\lib目录下的程序都很小,不大于2 9K,从这里我们可以得出一个结论。就是JDK里的工具几乎是用Java所编写,所以也是Java应用程序,因此要使用JDK所附的工具来开发Java程序,也必须要自行附一套JRE才行,所以位于C:\Program Files\Java目录下的那套JRE就是用来运行一般Java程序用的。
2、如果一台电脑安装两套以上的JRE,谁来决定呢?
这个重大任务就落在java.exe身上。Java.exe的工作就是找到合适的JRE来运行Java程序。 Java.exe依照底下的顺序来查找JRE:自己的目录下有没有JRE;父目录有没有JRE;查询注册表: [HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment] 所以java.exe的运行结果与你的电脑里面哪个JRE被执行有很大的关系.
对于java开发web实际是这样:JDK(调用JAVA API)开发了属于我们自己的JAVA程序后,通过JDK中的编译程序(javac)将我们的文本java文件编译成JAVA字节码,在JRE上运行这些JAVA字节码,JVM解析这些字节码,映射到CPU指令集或OS的系统调用。
总结: jdk是我有方法我有类,jre就是我有运行环境,必须有我程序才可以运行。
开发Java需要由源文件到中间文件的解释器;运行Java需要对应平台的解释器。
SUN也得提供两个组件:
第一,把源程序翻译为中间码的编译器;
第二,相应平台的解释器。
SUN把这两个组件包含在一个工具包中,我们把它叫做JDK(Java Developent ToolKit),所以答案相信大家都知道了吧 。