Java语言的特点




Java语言与C/C++的区别

在看完了上一期的《Java的前世今生》后,我们都知道了Java原本是由C/C++发展而来的。也正因如此,在Java中保留了C++的大部分内容,其编程方式也类似于C。但Java的句法更清晰、规模更小、更易学。正因为这样,Java从根本上解决了C++的固有缺陷,形成了一种新的完全面向对象的语言。

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

Java语言的特性

Java是一种跨平台、适合于分布式计算机环境的面向对象编程语言。具体来说,它具有如下特性:简单性、面向对象、分布式、解释性、可靠、安全、平台无关、可移植、高性能、多线程、动态性等。下面将重点介绍Java语言的面向对象、平台无关、分布式、多线程、可靠和安全等特性。 面向对象其实是现实世界模型的自然延伸。现实世界中的任何实体都可以看作对象,对象之间通过消息相互作用。另外,现实世界中任何实体都可归属于某类事物,任何对象都是某一类事物的实例。如果说传统的过程式编程语言是以过程为中心,以算法为驱动的话,那面向对象的编程原因呢就是以对象为中心,以消息为驱动。用公式表示,过程式编程语言为:“程序 =算法 + 数据” ;面向对象编程语言为:“程序 =对象 + 消息” 。

  1. 抽象(这是个有争议的特性,有些人认为抽象并不算java的特性)
    • “抽象“可以理解为将现实生活中的事物被抽象成对象,把具有相同属性和行为的对象被抽象成类,再从具有相同属性和行为的类中抽象出父类。一层一层的找出他们的共同,直到被完全抽象为止。
    • 举例:用面向对象的思想看,显示生活中的每一个人都个Object,对应着一个Class,每个人都有自己的Field和Method。但是我们很容易可以发现每个人都有一些共同的Field,比如:身高,体重,年龄,等等 并且也有共同的Method,比如:吃饭,睡觉,说话,等等。这些就是对象的共同属性和行为,所以我们就可以将这些相同的属性和行为抽象到一个抽象父类中,就变成共有的属性和行为,每一个子类只需要继承抽象父类就可以了。这就是抽象。
  2. 封装

    隐藏对象的属性和实现细节,仅仅对外公开接口。 封装具有一下优点:

    1. 便于使用者正确、方便的使用系统,防止使用者错误修改系统属性;
    2. 有助于建立各个系统之间的松耦合关系;
    3. 提高软件的可重用性;
    4. 降低了大型系统的风险,即便整个系统不成功,个别独立的子系统有可能还有价值。

    封装的两大原则:

    1. 把尽可能多的东西藏起来,对外提供简洁的接口;
    2. 把所有的属性封装起来。
  3. 继承

    子类和父类之间的继承关系,子类可以获取到父类的属性和方法。

    注:关于子类能否继承父类的私有方法? 从语言角度上说:JDK官方文档明确说明子类不能继承父类的私有方法; 但从内存角度来说,jvm在实例化子类对象之前,会先在内存中创建一个父类对象,然后在父类对象外部放上子类独有的属性,两者合起来形成一个子类对象。所以子类确实拥有父类所有的属性和方法,但是父类中的私有方法子类无法访问。

  4. 多态

    java语言允许某个类型的引用变量引用子类的实例,而且可以对这个引用变量进行类型转换。


好了,今天的分享到这里就结束了,希望此刻的你会对Java有更深入的了解。 如果有什么问题的话可以在下方留言哦(留言我可能不容易看到,也可以私信给我)。


  • 发表时间:2020-09-07
  • 版权声明:自由转载-非商用-非衍生-保留署名
  • 评论

    姜家伟-jiawei15214742755@163.com
    博主
    由于后台没设置评论提醒,所以可能看到会比较慢,如果有什么问题也可以私信给我!
    留言