Java语言特点

1、1.1 Java语言与C/C++的区别

Java是由C++发展而来的,保留了C++的大部分内容,其编程方式也类似于C。但Java的句法更清晰、规模更小、更易学。SUN公司对多种程序设计语言进行了深入研究。摒弃了其它语言的不足之处,最终开发出了Java。正因为这样,Java从根本上解决了C++的固有缺陷,形成了一种新的完全面向对象的语言。
Java和C/C++的相似之处多于不同之处,有C/C++语言基础的读者,学习Java会更容易。相比较而言,Java的编程环境更为简单。因篇幅所限,这里不能列出全部的不同之处,仅列出一些比较显著的区别。

  • 指针:Java没有指针的概念,从而有效地防止了在C/C++语言中容易出现的指针操作失误的问题(如指针悬空所造成的系统崩溃)。在C/C++中,指针操作内存时,经常会出现错误。在Java中没有指针,更有利于保证Java程序的安全。
  • 多重继承:C++支持多重继承,它允许多父类派生一个子类。也就是说,一个类允许继承多个父类。尽管多种继承功能很强,但使用复杂,而且会引起许多麻烦,编程实现它也很不容易。所以Java不支持多重继承,但允许一个实现多个接口。可见,Java即实现了C++多重继承的功能,又避免了C++的许多缺陷。
  • 数据类型:Java是完全面向对象的语言,所有方法和数据都必须是类的一部分。除了基本数据类型之外,其余类型的数据都作为对象型数据。例如对象型数据包括字符串和数组。类将数据和方法结合起来,把他们封装在其中,这样每个对象都可实现具有自己特点的行为。而C++函数和变量定义为全局的,然后再来调用这些函数和变量,从而增加了程序的负担。此外,Java还取消了C/C++中的结构和联合,使编译更简洁。
  • 自动内存管理:Java程序中所有的对象都是用new操作符简历在堆栈上的,这个操作符类似于C++的 “new” 操作符。Java自动进行无用内存回收操作,不需要程序员手工删除。当Java中的一个对象不再被用到时,无须使用内存回收器,只需要给它加上标签以示删除。无用内存的回收器在后台运行,利用空闲时间工作。而C++中必须由程序释放内存资源,增加了程序设计者的负担。
  • 操作符重载:Java不支持操作符重载。操作符重载被认为是C++的突出特征。在Java中虽然类可以实现这样的功能,但不支持操作符重载,这样是为了保持Java语言尽可能简单。
  • 预处理功能:C/C++在编译过程中有一个预编译阶段,即预处理器。预处理器为开发人员提供了方便,但增加了编译的复杂性。Java允许预编译,但不知此预处理器功能,因为Java没有预处理器,所以为了实现预处理,它提供了引入语言(import),该语句与C++预处理器的功能相似。
  • Java不支持默认函数参数而C++支持:在C语言中,代码组织在函数中,函数可以访问程序的全局变量。C++中增加了类,提供了类算法,该算法是与类相连的函数,C++中的类方法与Java中的类方法十分相似。由于C++仍然支持C语言,所以C++程序中仍然可以使用C语言的函数,结果导致函数和方法混合使用,使得C++程序比较混乱。Java没有函数。作为一种比C++更纯粹的面向对象的语言,Java强迫开发人员把所有例行恒星包括在类中。事实上,用方法实现例行程序可激励开发人员更好地组织编码。
  • 字符串:C和C++不支持字符串变量,在C和C++程序中使用 “Null” 终结符代表字符串的结束。在Java中字符串的结束。在Java中字符串是用类对象(String和StringBuffer)来实现的,在整个系统中建立字符串和访问字符串元素的方法是一致的。Java字符串类是作为Java语言的一部分定义的,而不是作为外加的延伸部分。此外,Java还可以对字符串用 “+” 进行连接操作。
  • goto语句:“可怕” 的goto语句是C和C++的 “遗物” 。它是C/C++语言技术上的合法部分,但引用goto语句造成了程序结构的混乱,不易理解。goto语句一般用于无条件转移子程序和多结构分支技术。Java不提供goto语句,它虽然指定goto作为关键字,但不支持它的使用,这使程序更简洁易读。
  • 类型转换:在C/C++中,有时出现数据类型的隐含转换,这就涉及了自动强制类型转换问题。例如,在C++中可将一个浮点值赋予整型变量,并去掉其尾数。Java不支持C++中的自动强制类型转换,如果需要,必须由程序显式进行强制类型转换。

1.1.2 Java面向对象的特性和多态性

Java是一种跨平台、适合于分布式计算机环境的面向对象编程语言。具体来说,它具有如下特性:简单性、面向对象、分布式、解释性、可靠、安全、平台无关、可移植、高性能、多线程、动态性等。下面将重点介绍Java语言的面向对象、平台无关、分布式、多线程、可靠和安全等特性。
面向对象其实是现实世界模型的自然延伸。现实世界中的任何实体都可以看作对象,对象之间通过消息相互作用。另外,现实世界中任何实体都可归属于某类事物,任何对象都是某一类事物的实例。如果说传统的过程式编程语言是以过程为中心,以算法为驱动的话,那面向对象的编程原因呢就是以对象为中心,以消息为驱动。用公式表示,过程式编程语言为:“程序 =算法 + 数据” ;面向对象编程语言为:“程序 =对象 + 消息” 。
所有面向对象编程语言都支持3个概念:封装、多态性和继承,Java也不例外。现实世界中的对象均有属性和行为映射到计算机程序上。属性表示对象的数据,行为则表示对象的方法。
封装是用一个自主式的框架,把对象的数据和方法连接在一起,形成一个整体。对象支持封装,是封装的基本单位。Java语言的封装性较强,因为Java无全程变量,无主函数。在Java中,绝大部分成员是对象,只有简单的数据类型(字符类型和布尔类型除外)。对于这些类型,Java提供了相应的对象类型包装,以便与其它对象交互操作。有关封装的原理如图1.1所示。
多态性就是多种表现形式。具体来说。可以用 “一个对外接口,多个内在实现方法” 表示。举一个例子,计算机中的堆栈可以存储各种格式的数据,包括整型、浮点型或字符型。不管存储的是何种数据,堆栈的算法实现都是一样的。针对不同的数据类型,编程人员不必手工选择,只需要使用统一方法命名(参数不同),系统便可以自动选择。运算符重载一直被认为是一种优秀的多态机制表现。由于考虑到运算符重载会使程序变得难以理解,所以Java最终化石把它取消了。有关多态的原理如图所示。

在这里插入图片描述
图1.1封装的原理示意图
在这里插入图片描述
图1.2 多态的原理示意图
继承是指一个对象直接使用另一个对象的属性和方法。事实上,现实生活中遇到的很多实体,都具有继承的含义。例如,把汽车看成一个实体,它可以分成多个子实体,如轿车、公交汽车等。以上子实体都具有汽车的特性,因此汽车是它们的 “父亲” ,而这些子实体则是汽车的 “孩子” 。子类可以继承负累的属性和方法。与其他面向对象编程语言不同,Java只支持单一继承。有关继承的原理如图1.3所示。
在这里插入图片描述
图1.3 继承的原理示意图

1.1.3 Java的平台无关性

Java的平台无关性是指用Java写的应用程序不用修改,就可以在不同的软硬件平台上运行。平台无关有两种:源代码级和目标代码级。C/C++具有一定程序的源代码级平台无关。源代码级平台无关表明了用C/C++写的程序无需修改,只需重新编译就可以在不同平台上运行。
Java主要靠Java虚拟机JVM(Java Virtual Machine),与目标代码及实现平台无关。JVM是一种抽象及其,附着在具体操作系统上。它本身具有一套虚拟机器指令,并没有自己栈、寄存器组等。

JVM通常是在软件上而不是在硬件上实现的。

目前,SUN系统公司已经设计实现了Java芯片,这些芯片主要使用在网络计算机上。另外ia,Java芯片的出现也会使Java更加容易嵌入到家用电器中。在JVM上,有一个Java解释器,用它来解释Java编译器编译后的程序。Java编程人员在编写完软件后,通过Java编译器,将Java源程序编译为JVM的自洁嗲吗。任何机器只要配备了Java解释器,就可以运行这个程序,而不管这种字节码是在何种平台上生成的。有关Java平台无关性的原理如图1.4所示。
在这里插入图片描述
图1.4 Java平台无关性示意图
另外,Java采用的是基于IEEE标准的数据类型,通过JVM保证数据类型的一致性,也确保了Java的平台无关性。
Java的平台无关性具有深远意义。首先,它的出现使编程人员梦寐以求的事情变成了事实,这将大大地加快和促进软件产品的开发。其次,Java的平台无关性正好迎合了 “网络计算机 ” 的思想。
如果常用的应用软件都使用了Java重新编写,并且放在某个Internet服务器上,那么具有网络计算机的用户,将不需要占用大量空间安装软件,它们只需要一个解释器,每当需要使用某种应用软件时,下载该软件的字节代码即可,其运行结果也可以发回服务器。目前已有数家公司开始使用这种信息的计算机模式,以构筑自己的信息系统。

1.1.4 Java分布式应用和多线程的特点

本节讲述Java程序的分布式和多线程的特点。分布式包括数据分布和操作分布。数据分布是指数据可以分散在网络不同主机上。操作分布是指把一个计算分散在不同主机上处理。
Java支持客户机、服务器计算模式。因此它支持这两种分布。对于数据分布,Java提供了一个叫坐URL的对象,利用这个对象,可以打开并且访问具有相同URL的对象,访问方式与访问本地文件系统相同。对于操作分布,Java的Applet小程序可以从服务器下载到客户端,既部分计算在客户端进行,以提高系统执行效率。有关分布式的原理如图1.5所示。
在这里插入图片描述
图1.5 分布式示意图
Java提供了一整套网络类库,开发人员可以刘鸥那个这些类库进行网络程序设计,方便地实现Java的分布式特性。
线程是操作系统的一种新概念,又被称为轻量进程,是比传统进程更小的,并且可以并发执行的的单位。C/C++采用单线程系统结构,而Java提供了】多线程的支持。
Java在两方面支持多线程:
1)Java环境本身就是多线程的。若干个系统线程运行,负责必要的无用单元回收、系统维护等系统级操作。
2)Java语言内置多线程控制,可以大大简化多线程应用程序的开发。
Java提供了一个Thread类,由它负责启动、运行、终止线程,并且可以检查线程状态。Java线程还包括一组同步原语,这些原语负责对线程实行并发控制。利用Java的多线程编程接口,开发人员可以方便地写出支持多线程的应用程序,从而提高程序执行的效率。Java的多线程在一定程度上受运行时所在平台的限制。如果操作系统不支持多线程,那么Java程序的多线程特性就不能表现出来。

1.1.5 Java程序的可靠性、安全性

本节将详细讲述Java的可靠性和安全性。Java最初的设计目的是用于电子类消费品,因此要求较高的可靠性。Java虽然源于C++,但它消除了许多C++不可靠的因素,可以避免许多编程错误。
它的可靠性和安全性表现在如下几点:

  • Java是强类型的语言,要求用显式的方法声明。这样保证了编译器可以发现方法调用错误,保证程序更加可靠。
  • Java不支持指针,杜绝了内存的非法访问。
  • Java的自动单元收集功能,可以防止内存丢失等动态内存分配导致的问题。
  • Java解释器运行时实施检查,可以发现数组和字符串访问越界。
  • Java提供了异常处理机制。程序员可以把一组错误代码放在一个地方,这样可简化错误处理任务,便于恢复。
    由于Java主要用于网络应用程序开发,因此对安全性有较高的要求。如果没有安全保证,用户从网络下载程序执行就非常危险。Java通过自己的安全机制,防止了病毒程序的产生,以及下载程序对本地系统的威胁破坏。
    当Java字节码进入解释器时,首先必须经过字节码校验器的检查,然后Java解释器将决定程序种类的内存布局。随后,类装载器负责把来自网络的类装载到单独的内存区域,避免应用程序之间相互干扰破坏。最后,客户端用户还可以限制从网络上装载的类只能访问某些文件系统。上述几种机制结合起来,使得Java成为安全的编程语言。

1.1.6 Java小程序和应用程序

用Java可以写两种类型的程序:小程序和应用程序。小程序就是指嵌入在网页文档中的Java程序,而应用程序就是指在命令行中运行的程序。对Java而言,对小程序的大小和复杂性都没有限制,事实上,Java小程序在有些方面比Java应用程序更加强大。目前,由于Internet通信速度有限,因此大多数小程序规模较小。小程序和应用程序之间的技术差别就在于运行环境。Java应用程序运行在最简单的环境中,它的唯一外部输入就是命令行参数。另一方面,Java小程序需要来自Web浏览器的大量信息。它需要知道何时启动、何时放入浏览器窗口、何处和何时激活关闭等。运行环境不同的是Java应用程序和Java小程序这两类程序最大的不同。

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值