为什么使用Java?
网络化大潮,Java是为网络而设计。安全性、网络移动性及平台无关性都是围绕这个目标设计。
体系结构
四个独立但是相关的技术:
- Java程序设计语言
- Java class文件格式
- Java应用编程接口(API)
- Java虚拟机
Java虚拟机
Java虚拟机的主要任务是装载class文件,并且执行其中的代码。

不同的虚拟机,可能有不同的执行引擎
- 直接解释字节码。
- 即时编译。全部转换成本地代码)
- 自适应编译。把最频繁的10-20%代码编译成本地代码。
- 硬件芯片编译。
本地方法与Java方法
本地方法(JNI)用于与操作系统打交道,是平台相关的 Java方法就是纯Java实现的方法,是平台无关的
ClassLoader
解决的是安全性(隔离性)与网络移动性(动态加载class).分为两类:一类是JVM的系统加载器,称为bootstrap classloader,另一个类是用户自定义的加载器
Java class文件
在平台无关性、网络移动性更适应网络
- 平台无关性 独立于底层主机的二进制形式。以以字节码的形式,避免编译时与特定系统绑定。
- 网络移动性
- 更紧凑的格式
- 动态连接(使用时才加载)
- 动态扩展(可动态增加class)
Java API
Java API是运行库的集合,是Java平台都要实现的必要部分,可以安全地假设可以被获取到。在需要与主机资源打交道的时候,Java可以调用Java API来实现,从而避免平台相关。

Java程序设计语言
一门通用语言,并不局限与网络相关的领域。其核心思想是使得程序员更有效率,程序更加健壮,而且在于为新兴的网络为中心的计算环境提供一个工具。
- 面向对象
- 多线程
- 结构化错误处理
- 垃圾收集
- 动态连接
- 动态扩展
缺点:
- 性能的问题
- 内存管理。回收的不确定性。
- 线程调度。过于宽松的线程规范,可能导致不同平台的调度方式不同。
- 功能的最小公分母问题。这是为实现跨平台的必然困难。
- 易于反编译。这是由于为了实现动态连接性,一个类对另一个类的引用是符号引用,而不是指针或偏移量。所以,被引用的类的方法,字段等,需要详细描述。使得反编译变得容易。混淆器可以减轻这个问题。