对象/服务/组件

1.多个对象协作提供服务,多个服务构成组件.


2.java.* 是j2se的标准库,是java标准的一部分,是对外承诺的java开发的接口,通常要保持向后兼容,一般不会轻易修改。所有的jdk的实现(其他厂家的,在java.*上都是一样的)

javax.*也是标准,但是没有包含在标准库中,一般属于面向标准库的扩展,通常属于某个特定领域,不是一般性的api。所以以类似扩展的方式提供api,以避免jdk的标准库过大。但也不能排除某些早期的javax,后来并入到标准库中,所有也应该属于新版本JDK的标准库。比如jmx,jdk5以前是以扩展方式提供,但是jdk5以后就做为标准库的一部分了,所有javax.management也是jdk5的标准库的一部分。

com.sun.*和org.omg.* 一般是sun的hotspot虚拟机中java.*和javax.*的实现类。但因为包含在rt中,所以我们也可以调用。但因为不是sun对外公开承诺的接口,所以根据根据实现的需要随时增减,因此在不同版本的hotspot中可能是不同的,而且在其他的jdk实现中是没有的,调用这些类,会损失掉一些一致性和向后兼容性。

3. java的动态性 Java 语言是一种具有动态性的解释型编程语言,当指定程序运行的时候, Java 虚拟机就将编译生成的 . class 文件按照需求和一定的规则加载进内存,并组织成为一个完整的 Java 应用程序。 Java 语言把每个单独的类 Class 和接口 Implements 编译成单独的一个 . class 文件,这些文件对于 Java 运行环境来说就是一个个可以动态加载的单元。正是因为 Java 的这种特性,我们可以在不重新编译其它代码的情况下,只编译需要修改的单元,并把修改文件编译后的 . class 文件放到 Java 的路径当中,等到下次该 Java 虚拟机器重新激活时,这个逻辑上的 Java 应用程序就会因为加载了新修改的 .class 文件,自己的功能也做了更新,这就是 Java 的动态性。

当 在dos下运行java -jar somejar的时候发生的事情

运行java.exe的main函数

加载jvm.dll jvm.dll中提供几个功能函数用于完jar包的搜索与加载,引导类加载器完成这项工作。


Java 运行环境为了优化系统,提高程序的执行速度,在 JRE 运行的开始会将 Java 运行所需要的基本类采用预先加载( pre-loading )的方法全部加载要内存当中,因为这些单元在 Java 程序运行的过程当中经常要使用的,主要包括 JRE  rt.jar 文件里面所有的 .class 文件。

 java.exe 虚拟机开始运行以后,它会找到安装在机器上的 JRE 环境,然后把控制权交给 JRE  JRE 的类加载器会将 lib 目录下的 rt.jar 基础类别文件库加载进内存,这些文件是 Java 程序执行所必须的,所以系统在开始就将这些文件加载,避免以后的多次 IO 操作,从而提高程序执行效率。

http://www.blogjava.net/William/archive/2006/08/25/65804.html


你可能感兴趣的:(对象/服务/组件)