Java语言的特点

Java的特点


 Java语言一正式发表就立刻受到欢迎, 除了它适应形势发展的趋向之外, 必然还有优秀的特点. Java语言的特点主要体现在简单 (simple), 面向对象(object-oriented), 分布式(distributed), 解释性 ( interpreted ), 强壮 ( robust ), 安全 (secure), 结构中立( architecture-neutral ), 可移植( portable ), 高性能( high-performance ), 多线程(multithreaded), 动态(dynamic), 通用(general-purpose)等. 下面对这些特点作些解释.

1. 简单性

    由于设计者的仔细考虑, 使得Java语言简单有效, 使用者可以很容易地进行程序设计而不需要接受严格的训练. 第一点, Java的语法格式与C++相似. 设计者考虑到原来C++应用很广, 大多数程序员都熟悉C++, 所以让Java程序的外观看起来很象C++的风格, 这样大家自然容易接受. 第二点, Java中去掉了C++中较困难以及有问题的部分, 如指针(pointer)和内存管理(memory management)等. 熟悉C++的人都知道, 指针是C++中较复杂的数据类型, 稍不注意会引起程序出错, 而且由程序员考虑存储器管理等复杂问题也增加编程困难. 第三点,Java的程序规模较小, 其基本解释程序和类支持功能只有40K字节左右, 很容易在小机器上运行. Java的类库提供的基本功能使编程人员能快速有效地开发应用程序, 从而简化开发过程.

2. 平台无关性

    Java的结构中立性是要达到软件界一直追求的一个目标, 即平台无关性, 这也是当初开发Java的原因之一. 我们知道, 在一台计算机的不同操作系统上开发的应用程序是不同的, 即使是同一种高级语言编写的程序, 在不同的机器上编译产生的代码也不一样. 这就是平台有关性.
    Java如何做到结构中立呢? 就是编译后产生一种与平台无关的字节码, 称为Java虚拟机(Virtual Machine)的指令代码. 这种代码不能直接运行, 但可以传送, 由网络送到各种不同的计算机上, 由该机上支持的Java解释器(也就是Java虚拟机的仿真运行程序)来执行. 真正实现了一机编译, 多机执行. 这样看来, Java的字节码很象一种计算机界的"世界语", 可在Internet上到处传送, 然后由各地懂"世界语"的"翻译"翻成本地语言, 让大家"听懂". 所以Java近乎完美地解决了平台无关性.
    Java的这种结构中立性不仅对网络十分有用, 对软件开发也有很大意义.

3. 面向对象

    Java最重要的特点是它是真正面向对象的语言. C++是在C的基础上改造成面向对象的, 而Java从开始设计时就用面向对象技术来设计. 它的封装性 ( Encapsulation ), 继承性 (Inheritance ), 多态性( Polimorphism ) 等都很好, 还实现了 C++ 无法实现的动态联编(Dynamic binding). 使得Java具有代码重用(Reusability of code), 扩展(Extensibility)和动态应用(Dynamic application)等优点.

    在Java中, 面向对象编程的基本元素是对象( object ), 它把变量( variable) 和方法(method)从功能上封装成一个可重用、可动态装载的整体. 类(class)是对象的集合, 同一类的对象有同样的方法和性质. 一个类建立后, 只要增加一些功能就可以产生新类. 这些就是封装性、继承性等性质的含义.

4. 安全性

    Java是应用于网络/分布环境下的语言, 其安全性是极其重要的. 因为Java 代码可以在网络上发布和传递, 若带有病毒, 就会危害执行这些代码的所有客户 (client) 机器. 因此Java的设计者充分考虑了安全问题, 提供了多道关卡防止病毒的入侵.
    从Java的强壮性一点我们知道它取消了指针, 并对数组的下标进行检查, 这样就防止非法改写系统内存. 另外, 对于与系统资源有关的对象, 可以用Java语言的封装性来保护. 这一道关我们称为语言关, 它防止从编程上破坏系统.
    在网络上传送的Java代码是编译后的字节码, 会不会在传送过程中受病毒感染呢? 这点语言关控制不了. 因此, Java的设计者在编译后运行前增加了一次字节码检验. 不管是从哪里得到的字节码, 在它进入解释器之前, 先由字节码检验器(bytecode verifier) 检查它的安全性. 这一道关我们称为字节码关.
    到了真正运行的时候, Java解释器决定各个类的存储器安排(类是Java的基本执行单元), 这样, 网络黑客(hacker)不可能了解某个类在内存的什么地方从而非法访问. 类装载器( class loader)把从网络下载的各个类放入各自的存储空间, 防止它们访问文件系统. 这一道关我们称为解释关.
    所有这些考虑, 使得Java对任何系统都很安全, 完全胜任在网络上应用.

5. 分布式

    Java语言是很适合分布式应用的. 通过类库(class library)提供的方法, Java 可方便地适应各种 TCP/IP 协议( Transmission Control Protocol/Internet Protocol, 这是Internet的通用网络协议). 如HTTP(HyperText Transfer Protocol, 用于WWW) 和FTP(FileTransfer Protocol, 用于Internet传送文件)等, 通过URL(Universal Resouce Locator)存取网络对象. 比如, 你可以让一个Java程序同时运行取自两个不同地方的声音文件.

6. 多线程

    所谓多线程是指在一个程序中可以同时执行一个以上的线程(thread), 也就是通常所说的并行执行多个任务.
    线程与进程(process)相似, 也是执行中的程序, 但线程数据较少, 多个线程共享一组系统资源. 系统处理线程的负荷要比处理进程小.
    多线程的优点是可以合理调配多个任务, 交互式响应性能较好, 并有实时特性. 比如打印任务很花时间, 如果程序是单线程的, 那么不打印完就不能做其他事情. 采用多线程方法后, 一个线程负责打印, 另一线程继续干其他事, 就不会浪费时间了.
    实现多线程比单线程难, 所以C++都没能实现多线程. Java则加入了多线程功能. 它完成了其他语言难以实现或实现得不好的数据同步化(synchronization)过程, 避免了资源冲突. 这是Java的又一个突出的优点.

7. 动态

    Java的动态性是其面向对象设计的扩展. 它提供运行时刻的扩展性, 即在后期才建立各模块间的互连. 各个库可以自由地增加新的方法和实例(instance)变量. 这意味着现有的应用程序可以增加功能, 只须链接新类封装有所需的方法.
    C++是多重继承(multiple inheritance)的, 若某个超类(superclass) 改变了某个方法或变量, 其子类(subclass)必须重新编译. Java则用接口(interface)来实现多级继承, 使用起来比C++的多重继承更灵活.
    Java语言的动态性使它能够胜任分布式系统环境下的应用, 位于各地的类可以自由地升级, 而不影响原Java应用程序的运行.

8. 解释性

    Java是解释执行的, 但它与Basic语言的解释不同. Basic没有编译阶段, 语句输入后, 一边检查错误一边运行, 效率很低. Java则是经过编译后产生字节码(Bytecode), 然后由各种支持Java解释器(interpreter)的机器来解释执行字节码. 由于Java 的字节码比较接近汇编指令, 所以可以很快解释为实际机器指令, 这种做法比Basic的解释效率高得多. Java编译后直接解释运行, 比C++少了一个连接阶段, 缩短了开发周期.

9. 强壮

    Java的强壮性保证代码有好的表现, 即稳定可靠地运行. 因为Java的发明者发现了C++的不稳定之处: C++用指针直接访问存储器位置, 而且没有自动内存管理, 即使程序员写出句法和语义都正确的程序, 也会由于访问内存出错等原因而造成系统崩溃. 因此, Java用消除指针和提供自动内存管理来保证强壮的运行环境.
    消除指针后程序员就不能用指针算法在内存中任意移动, 防止对操作系统的内存空间进行误写. 另外, Java增加了数组边界检查功能, 这样一来, 程序就不能访问数组没有分配的寻址空间.
    Java的自动内存管理功能一方面减轻程序员注意内存情况的劳动, 另一方面提高内存使用效率, 同时防止人为干预内存而造成破坏.
    此外, Java在编译和运行程序时都对程序进行检查, 防止错误隐藏. Java的编译检查比C++严格, 它有异常(exception)处理机制, 在编译时会提示可能出现但未采取措施处理的异常情况, 提醒程序员采取措施.

10. 可移植

    除了采用虚拟机器代码的形式使Java语言程序可以在不同机器上运行外, Java语言还采取其他措施提高可移植性.
    C语言随着机器硬件和操作系统的变化而变化. 比如其整数(integer), 在不同机器上位数不同: 在DEC Alpha机上是64位, 在Intel 486上是32位; 在同一机器上操作系统不同时位数也不同: 在Windows 3.1上取16位, 在Windows 95上取32位. 这些变化使C语言程序的移植性大为减少.
    Java语言则规定数据类型只有一种标准, 不依赖于机器, 避免了上述不可移植性. 各种类库也规定了可移植的界面, 如Window类就能适应Unix、Windows和Macintosh环境.
    不但Java语言编写的应用程序可移植, 连Java系统本身也具有可移植性. Java的编译器是用Java语言实现的, 运行系统用标准C实现, 它们都有很好的移植性.

11. 高性能

    由于兼顾了可移植性、安全性、强壮性、结构中立等, 其代价是Java的性能有可能降低, 特别是解释执行字节码的速度显然比不上C++执行机器码的速度. 因此, Java的设计者采取一些技术来保证高性能.
    其一是内建多线程, 能提高Java程序的性能. 下一点会详细解释它.
    其二是有效的字节码, 编译后的字节码很接近机器码, 可以在任何具体平台上有效地解释它.
    其三是在运行期间将字节码译成当地机器码, 不过要花一定的延迟时间才能运行.
    其四是链接到本地的C语言代码, 这样效率很高, 但可能失去移植性.

12. 通用

    Java语言是通用的编程语言, 不象Lisp、Prolog等语言只适用于某一领域, 这一点它与C++类似. Java语言利用应用编程接口API (Application Programming Interface)扩充其编程方面的范围. 比如图形处理和多媒体 API, 网络 API, 数据库接口JDBC ( Java DataBaseConnectivity) API等, 使Java可以应用于网络、多媒体、数据库等领域. SUN公司还不断推出新的API系列, 进一步拓展Java的应用领域.
    以上简略介绍了Java语言的特点, 在后面各章中还会对某些特点作更详细的介绍.
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值