
1.2 Java语言的特点
Java程序设计语言是新一代语言的代表,它强调了面向对象的特性,可以用来开发不同种类的软件,它具有支持图形化的用户界面、支持网络以及数据库连接等复杂的功能。Java语言主要有以下特点。
1. 简单且易于学习
Java语言很简单。Java语言的简单性主要体现在以下3个方面:①Java的风格类似于C++,因为它的语法和C++非常相似,因而C++程序员非常熟悉。从某种意义上讲,Java语言是C及C++语言的一个变种,因此C++程序员可以很快地掌握Java编程技术。②Java摒弃了C++中许多低级、困难、容易混淆、容易出错或不经常使用的功能,例如运算符重载、指针运算、程序的预处理、结构、多重继承以及其他一系列内容,并且通过实现自动垃圾收集大大简化了程序设计者的内存管理工作,这样有利于Java初学者的学习。③Java提供了丰富的类库。
2. 面向对象
面向对象可以说是Java最重要的特性。Java语言的设计完全是面向对象的,它不是类似C语言面向过程的程序设计技术。Java语言的设计集中于对象及其接口,它提供了简单的类机制以及动态的接口模型。对象中封装了它的状态变量以及相应的方法,实现了模块化和信息隐藏;而类则提供了一种对象的原型,并且通过继承机制,子类可以使用父类所提供的方法,实现了代码的复用。
3. 分布式
Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java.net包),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。
4. 高性能
用Java语言编辑的源程序的执行方法是采用先经过编译器编译、再利用解释器解释的方式来运行的。它综合了解释性语言与编译性语言的众多优点,使其执行效率较以往的程序设计语言有了大幅度的提高。如果解释器速度不慢,Java可以在运行时直接将目标代码翻译成机器指令。Java用直接解释器每秒钟内可调用300 000个过程。翻译目标代码的速度与C/C++的性能没什么区别。
5. 安全性
Java通常被用在网络环境中,为此Java提供了一个安全机制以防止恶意代码的攻击。除了Java语言具有的许多安全特性以外,Java对通过网络下载的类具有一个安全防范机制(类ClassLoader),例如分配不同的名字空间以防替代本地的同名类、字节代码检查,并提供安全管理机制(类SecurityManager)让Java应用设置安全哨兵。
6. 多线程
Java的多线程机制使应用程序中的线程能够并发执行,且其同步机制保证了对共享数据的正确操作。通过使用多线程,程序设计者可以分别用不同的线程完成特定的行为,而不需要采用全局的事件循环机制,这样就很容易在网络上实现实时交互行为。Java的多线程功能使得在一个程序里可同时执行多个小任务。线程有时也称小进程,是一个大进程里分出来的小的独立的进程。在Java语言中,线程是一种特殊的对象,它必须由Thread类或其子(孙)类来创建。通常有两种方法来创建线程:一是使用Thread(Runnable)的构造方法将一个实现了Runnable接口的对象包装成一个线程;二是从Thread类派生出子类并重写run方法,使用该子类创建的对象即为线程。值得注意的是,Thread类已经实现了Runnable接口,因此任何一个线程均有它的run方法,而run方法中包含了线程所要运行的代码。线程的活动由一组方法来控制。Java语言支持多个线程的同时执行,并提供多线程之间的同步机制(关键字为synchronized)。
7. 可移植性(与平台无关性)
Java源程序经过编译器编译,会被转换成一种称为字节码(byte-codes)的目标程序。“字节码”的最大特点便是可以跨平台运行,即程序设计人员常说的“编写一次,到处运行”,正是这一特性成为Java得以迅速普及的重要原因。与平台无关的特性,使Java程序可以方便地被移植到网络上的不同机器。同时,Java的类库中也实现了与不同平台的接口,使这些类库可以移植。另外,Java编译器是由Java语言实现的,Java运行时系统由标准C实现,这使得Java系统本身也具有可移植性。
8. 动态
Java的动态特性是其面向对象设计方法的扩展。它允许程序动态地装入运行过程中所需要的类,这是C++语言进行面向对象程序设计无法实现的。在C++程序设计过程中,每当在类中增加一个实例变量或一种成员方法后,引用该类的所有子类都必须重新编译,否则将导致程序崩溃。
Java采用如下措施来解决这个问题。
Java编译器不是将对实例变量和成员方法的引用编译为数值引用,而是将符号引用信息在字节码中保存并传递给解释器,再由解释器来完成动态连接,然后将符号引用信息转换为数值偏移量。这样,一个在存储器生成的对象不在编译过程中决定,而是延迟到运行时由解释器确定。因此,对类中的变量和方法进行更新时就不会影响现存的代码。解释执行字节码时,这种符号信息的查找和转换过程仅在一个新的名字出现时才进行一次,随后代码便可以全速执行。在运行时确定引用的好处是可以使用已被更新的类,而不必担心会影响原有的代码。如果程序连接了网络中另一系统中的某一类,该类的所有者也可以自由地对该类进行更新,而不会使任何引用该类的程序崩溃。
Java还简化了使用一个升级的或全新的协议的方法。如果用户的系统运行Java程序时遇到了不知怎样处理的程序,Java能自动下载用户所需要的功能程序。