zoukankan      html  css  js  c++  java
  • 《Java大学教程》—第24章 Java的背景

    本章主要介绍的是Java的背景知识,通过了解历史知道Java与其他语言的区别,以便更好选择在什么场景下使用Java。

    24.2    语言的尺寸
    Java语言短小、紧凑,以C++为基础,放弃了一些特定的语言特征(指针和多继承)
    注:需要关注的是为什么放弃这两个特征,有没有替代方案,各自的优缺点。

    24.2.1    指针(pointer)
    指针是一种变量,并且变量中包含了某个存储器地址。
    Java不允许使用指针,因为指针指向的是具体的物理地址,直接操纵物理地址中的数据,容易使程序出现不可预料的问题。
    Java通过创建引用()来实现对地址的访问。通过引用也可以把地址作为变量传送。

    24.2.2    多继承(multiple inheritance)
    多继承允许一个类继承于多个超类。
    Java不允许多继承:因为多继承使用不多,且编程复杂,容易出错。
    Java允许继承一个基类,实现多个接口的方式实现多继承。

    24.3    语言的可靠性
    24.3.1    别名(alias)
    别名会导致不同的对象变量指向同样的对象。
    因为对象变量中存储的对象地址相同,从而出现两个修改同一对象数据的入口,容易造成混淆。
    为此Java提供了两种拷贝机制:深拷贝(对象的数据的拷贝)和浅拷贝(对象的引用的拷贝)。
    深拷贝可以保护原始对象不受影响,但是需要消耗时间和空间,用于保护数据安全的领域使用。利用clone方法。
    浅拷贝提供了原始对象的地址,不需要消耗过多的时间和空间,但是必须小心的使用,以免造成不可预料的问题。利用别名机制。

    24.3.2    重写clone方法
    protected的方法可以被重写为public的方法,但是public的方法不可以重写为protected方法。
    注:因为已经在父类已经是public的方法,就算子类重写为protected方法,那么访问者依然可以通过父类实现访问,所以不容许public方法重写成protected方法。

    24.3.3    不变对象
    如果对象中不存在变更它们状态的方法,则对象称为不变对象。
    如果对象是不可变的,则不必担心创建对象的别名会造成不可预料的问题。

    24.3.4    使用Object类的clone方法
    Object类的clone方法复制了分配给对象属性的存储器的内容,也称为按位拷贝(bitwise copy)。即完全复制了原始类型(primitive type)的属性的内容,并且复制了属性的引用。
    *    如果类的属性都是基本类型的,则重载clone方法只需要调用Object类的clone方法;
    *    如果类的属性有对象类型的,并且这些对象都是不可变的,则重载clone方法只需要调用Object类的clone方法。
    *    如果类的属性包含非不可变对象,则无法利用Object类的clone方法进行复制,必须自己编写代码来实现clone方法。

    如果需要使用Object类的clone方法,需要标识类实现了Cloneable接口,这个接口也是个标识接口,没有包含任何方法。

    24.3.5    垃圾收集
    Java使用异常处理技术来监视内存耗尽问题,并且可以编写代码来确保程序正常地终止。
    Java语言具有一种内嵌的垃圾收集功能,该功能能够释放未被使用的内存。通过搜索程序所使用的内存空间,释放不再被使用的内存。

    自测题:
    1.    指针与引用的区别:
    指针保存了地址,并且可以通过代码修改和操纵这个地址的数据。
    引用保存了地址,但是这个地址不能通过代码修改,也不能随便改变访问的类型,例如:不能按字节访问地址中的信息。

    2.    多继承:
    多继承允许一个类继承于多个超类。
    Java不允许多继承:因为多继承使用不多,且编程复杂,容易出错。
    Java允许继承一个基类,实现多个接口的方式实现多继承。

    3.    Critical.java

    a)    因为Critical对象存在变更它们状态的方法,所以是可变对象。

    b)    CriticalTest.java

    c)    Critical.java

    d)    CriticalTest.java

    4.
    a)    为什么方法返回的都是别名:方便调用的方法修改里面的数据,对于不可变对象也提高传送数据的效率。
    b)    为什么别名可能有危险:因为调用方法的代码可能会修改原始数据,造成不可意料的数据错误。
    c)    如何避免别名:创建clone方法,返回的对象都采用深拷贝。

    5.    垃圾收集功能的优点和缺点:
    优点:简化程序员的工作,避免出现内存泄漏或者内存耗尽的问题。
    缺点:降低代码执行的速度,对于实时应用会突然出现响应不及时的问题。

    编程练习:代码附件
        Critical.java    CriticalTest.java

  • 相关阅读:
    关于Linux联网的问题
    MapD的数据导出与扩容(利用现有的表)
    系统重启后,MapD报错Thrift的连接被拒绝
    关于Linux系统只读(Ubuntu16.4.1)
    javaBean的依赖注入中构造注入和依赖注入的区别
    Struts2开发中遇到的坑。。。
    通过配置文件设置定时任务,以及时间的选择
    微信小程序开发的movable开发的坑
    spring基础概念
    Hibernate的三种查询方式
  • 原文地址:https://www.cnblogs.com/zhuyx/p/10401903.html
Copyright © 2011-2022 走看看