对象导论2

来源:互联网 发布:我知女人心南宫寒正序 编辑:程序博客网 时间:2024/06/05 10:22

此篇文章承接上一篇

 1.8 单根继承结构

  在OOP中,人们一直在纠结是否所有的类都继承自单一的基类。在Java中,答案是yes,在C++中,答案是no。

   在我看来,Java选择单根继承是很明智的选择,在一定程度上其影响了Java对C++弊端的改进。C++支持多继承,因此其继承有了更多的灵活性,但是在当在兼容一些其他接口时,那么C++将会花费很大的力气去解决兼容问题,在一定的情况下,这很不值得。Java用了单继承,其给Java带来了如下的一些影响:

    1)解决了多继承的二意性。在C++继承中,当继承了基类的相同方法或者元素时,这让系统无法分辨到底是哪个方法或者元素。Java的单继承很好地解决了这个问题,同时Java的接口支持多继承,但是其方法在具体类中实现,属性为static final这也使接口的多继承不会出现这个问题。

    2)单继承接口保证所有对象都具备某些功能。

    3)单继承使所有对象都可以很容易地在堆上创建,而参数传递也得到了极大的简化。

    4)单继承使垃圾回收器的实现变得容易,这也是Java相对于C++的重大改进之一。

1.9 容器

   容器在Java中也称为集合,Java中的list、map、set都是容器,面对不同的需求,不同容器提供了不同类型的接口和外部行为,同时不同的容器对于某些操作具有不同的效率(顺序存储和链表存储)。

    除此以外,在Java se5出现之前,容器存储的每个对象都具有Object通用类型特征,但是到具体使用时,无法处理到底其具体类型的问题。因此出现了上下转型,再后来增加了参数化类型的功能,也就是我们所说的泛型。

1.10 对象的创建和生命周期

      在复杂的环境中对象的创建和生命周期处理,成为了非常困难并且重要的工作,C++认为效率控制对象的生命周期是非常重要的议题。

       对象静态存储区域内来实现。虽然后者在处理上会变得非常简单,但是却牺牲了一定的灵活性,必须在编写程序时就知道对象的确切数量(在一定情况下非常实用)。

       第二种就是在堆的内存池中动态地创建对象。如果需要一个新的对象,可以再需要的时刻在堆中创建。因为存储空间是在运行时被动态管理的,所以需要大量的时间在堆中分配存储空间,因此其也带来了很大的灵活性。

       Java完全采用了动态内存分配的方式,每当要创建对象时,直接使用new关键字来构建。

同时对于对象的生命周期处理上,C++采用的是编程方式来进行处理,这使得编程难度大大增加,时常出现因处理不当导致内存泄露。Java在此方面进行了改进,有了自己的“自动垃圾回收”机制,其可以避免内存泄露问题。

1.11 异常处理:处理错误

       自从编程语言问世以来,错误处理都是最困难的问题之一。想要设计一个良好的错误处理机制很苦难。在Java中有一套自己的处理机制。Java一开始就内置了异常处理,并且异常处理像是与程序正常执行路径并行的,在错误发生时执行另外一条路径,并且你必须使用这种处理方式。这种有保障的一只性有时会使得错误处理非常容易。

1.12 并发编程

在计算机编程中有一个基本概念,就是在同一时刻处理多个任务的思想。这就导致了线程的诞生,也就是我们所说的“并发”。线程可以将现在多处理器的优势发挥出来,但是必须要考虑到“共享资源”的处理问题。

1.13 Java与Internet

        尽管Java对于解决传统的单机程序设计问题非常有用,但是同样重要的是,它解决了在万维网上的程序设计问题。

        首先是客户/服务器系统的处理,由于用户访问量增大,服务器的响应会产生延迟,哪怕延迟很小,都会产生重大影响,因此为了解决这个问题,web应用就将一部分问题,交给了客户端机器处理,从而出现了客户端编程,并且插件,脚本语言Java applet也应运而生,使得客户端程序变得丰富。

        在服务端编程工作上,用户希望有自己的账号,修改自己的账号,自己的数据得以保存,这些数据请求与数据库操作,都必须通过服务器端 的程序来处理,JAVA的servlet和JSP吸引了大批的公司迁移到了JVA上。

原创粉丝点击