) B; ^- g' G& e2 Z- g' F6 l 3、Java是编译型的 3 @# a# T* i6 \1 n( m 3 L8 v! _% T2 P' Q5 Y/ ]/ C 当运行Java程序时,它首先被编译成字节代码。字节代码非常类似于机器指令,所以Java程序非常高效。然而,字节代码并不专对一种特定的机器,所以Java程序无需重新编译便可在众多不同的计算机上执行。 ' Y9 u6 `& G7 i/ \3 F
, b9 b6 \8 A$ l% k2 |" s
Java源程序被编译成类文件,它相当于程序的字节代码表现。在一个Java类文件中,所有对方法及实例变量的参照均按名进行,并在第一次执行代码时加以分辨。这使得代码更通用,更不易受修改的影响,而仍具高效。 `% D Q0 H+ ?* C3 s 5 j9 [" @- k; L& \' }7 C5 U 4、Java是体系结构中立的 - B* T# g7 a; a1 h5 Q# P6 u, ^, R; B. A2 o5 f/ ?; a
Java语言对每种计算机都一样。比如,简单的类型都是不变的:整数总是32位,长整数总是64位。令人奇怪的是,诸如C及C++等时髦的编程语言却不是这样。由于这些语言定义如此自由,每种编译器及开发环境便各有不同了,这使程序的移植成为讨厌的问题。Java程序的移植却很容易,而且不需要进行重新编译。 ! m: |3 q T0 u' {( w
/ k. J+ L( |# Q c3 U 5、Java是健全的 1 p5 e! N' _$ k" a: D* f, [% l
& \) } h0 _# [1 N
Java程序不可能造成计算机崩溃。Java系统仔细检测对内存的每次访问,确认它是合法的,而且不致引起任何问题。 ) g8 o8 u$ k* W6 x; m8 \# Z
6 A+ |2 ?/ R; W 不过,即使Java程序也可能有错误。如果出现某种出乎意料之事,程序不会崩溃,而把该例外抛弃。程序会发现这类例外,并加以处理。 + E, H' {1 K) j3 k. V6 n: I7 j+ Y- V8 e; a
传统的程序可以访问计算机的全部内存。程序可能(无意识地)修改内存中的任何值,这就会造成问题。Java程序只能访问内存中允许它们访问的那些部分,所以Java程序不可能修改不拟修改的值。 2 ]9 [: B, b* F! c 6 T) a9 K- Q2 Z6 e6、Java是小巧的 - [' I6 r; \3 P6 M, t" _& x : `1 s) f% k9 o* } p M 由于Java的设计是要在小的计算机上运行,作为一种编程语言来说其系统是相对较小的。它能有效地在4MB以上RAM的PC机上运行。Java翻译器只占用几百KB。这种翻译器对Java的平台无关性和可移植性是可靠的。, ^. k+ z8 v j% }+ y) m8 |, q! T A. r' D
' D, J1 S- @1 Z+ K* {. P! r
由于Java很小,它对内存很小的计算机,如基于Java的PC机,以及电视机、烤箱、电话机及家用计算机等,是很理想的。, |+ g( v( ~% h 7、Java是多线程的 7 i8 G5 \) g) z1 e. K ; v- g3 V0 ?$ z; n Java程序可以执行一个以上的线程。比如,它可以在一个线程中完成某一耗时的计算,而其它线程与用户进行交互对话。所以用户不必停止工作,等待Java程序完成耗时的计算。 # ?4 A; ]- N, T" v% Y* t! Z7 A' P% m
在多线程环境中的编程通常是困难的,因为许多东西可能同时出现。但是,Java提供了易于使用的同步特性,使编程更为方便。5 L; \4 q1 Z% y7 r* _
1 I" {; o2 ?* s5 w. n% |) e
Java线程通常被映射为实际的操作系统线程,只要底层操作系统支持这种映射。因此,用Java写的应用程序可说是“MP热”。这就是说,如果它们在多处理器机器上运行,它们更将表现不凡。; C# k2 m9 G9 R) V 8、Java是可收集无用的存储单元的- W3 s$ r" [- W: P/ h& M 0 b- ?' C; ?) o! F& ^2 N0 C
用C及C++写软件的编程人员必须仔细跟踪所用的内存块。当一个块不再使用时,他们务必让程序释放它,从而方可再用。在大的项目中,这可能很困难,并往往成为出错和内存不足的根源。) R# M/ G+ j& q' I3 Y5 y0 H. Q
, [( n+ h" T4 y3 f8 ^$ i 在Java的情况下,编程人员不必为内存管理操心。Java系统有一个叫做“无用单元收集器”的内置程序,它扫描内存,并自动释放那些不再使用的内存块。( f1 }3 ~0 j9 Z: N$ W 9、Java是快速的# j! z9 i/ k4 K1 y & w. N* T) |1 Y; {# J8 f! O
Java比典型的脚本语言大为有效,但它比C慢20倍。这对大多数应用是可接受的。 ( X" C; l$ X+ S, V( l' w 8 l. ]7 q+ ^& C: w& C2 R5 u 不久的将来,代码生成器就可供利用了,这将使Java程序几近于用C或C++编写的程序那么快。 3 t) N" e6 l( k, G/ t5 p10、Java是安全的8 a8 p$ h5 r6 {& V" Y
; A7 I6 g0 a, }3 Y2 Y Java程序没有指针,而且象这样的字节代码程序强在类型上,所以在执行之前它可能验证Java程序。被验证的Java程序得以保证不突破Java语言的任何**,而且可以安全地执行。Java字节代码验证被Web浏览器用来确保小程序不含病毒。 8 J7 l! |# ?6 A3 z( U 11、Java是可扩展的3 j, S! q, y6 X# _8 n
% Y: C# K6 C$ e4 K! A3 a! _ Java程序可与用其它语言编写的现存程序库连接。由于Java数据结构与C的数据结构的类型极为相似,这是相当方便的。最大的问题在于,现有多线程程序库为数不多。9 h5 t7 H* N' ^: F
! y3 [+ A, R! V- n Java程序可以声明某些方法是内部的,然后,把这些内部方法映射成软件库所定义的功能,从而动态地链接到虚拟机。