本章主要介绍的是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.    垃圾收集功能的优点和缺点:
优点:简化程序员的工作,避免出现内存泄漏或者内存耗尽的问题。
缺点:降低代码执行的速度,对于实时应用会突然出现响应不及时的问题。

本文转自BlogJava朱远翔的博客,原文链接:《Java大学教程》—第24章 Java的背景,如需转载请自行联系原博主。

《Java大学教程》—第24章 Java的背景相关推荐

  1. Java 学习笔记:第一章 Java入门

    Java 学习笔记:第一章 Java入门 1.1 计算机语言发展史以及未来方向 1.2 常见编程语言介绍 C语言 C++ 语言 Java语言 PHP 语言 Object-C和Swift 语言 Java ...

  2. java大学教程_JAVA大学实用教程 第4版 PDF 下载

    相关截图: 资料简介: 本书共13章,重点讲解类与对象.类的继承.接口.泛型.字符串与模式匹配.实用类及数据结构.多线程.输入/输出流.图形用户界面设计.网络编程.数据库操作.Java Applet程 ...

  3. java大学教程习题答案_Java程序设计大学教程:习题解答与课程设计

    前言 计算机程序设计课程既是一门理论课又是一门实践课,除了要在课堂学习程序设计的原理和方法,掌握程序设计语言的语法知识和编程技能外,还要进行大量的课外练习和实际操作,以达到熟悉掌握所学知识,培养应用能 ...

  4. 【Java基础系列教程】第二章 Java语言概述、配置环境变量

    一.计算机编程语言概述 1.1 语言 语言(英文:Language)是人类进行沟通交流的表达方式.例如:中国人与中国人用普通话沟通.而中国人要和英国人交流,就要学习英语.              语 ...

  5. Java基础教程【第一章:Java概述】

    章节目录 1. JAVA 的发展史 2. JAVA 面向对象 3. JAVA 语言介绍.语言特性 4. JVM 虚拟机 1."一次编译,到处运行"的原理 2.JDK( Java D ...

  6. 描述java源程序构成_Java第二章Java程序设计

    <Java第二章Java程序设计>由会员分享,可在线阅读,更多相关<Java第二章Java程序设计(140页珍藏版)>请在人人文库网上搜索. 1.第2章 Java基本语法,2. ...

  7. 《深入理解java虚拟机》第2章 Java内存区域与内存溢出异常

    Java与C++之间有一堵由内存动态分配和垃圾收集技术所围成的"高墙",墙外面的人想进去,墙里面的人却想出来. 2.1 概述 https://blog.csdn.net/q5706 ...

  8. Java基础教程带你走进java的世界

    Java教程 Java简介 什么是Java? Java是由Sun Microsystems公司于1995年5月推出的Java面向对象程序设计语言和Java平台的总称. Java分为三个体系: Java ...

  9. java pptx_java学习ppt-第一章-java环境及配置.pptx

    java学习ppt-第一章-java环境及配置.pptx 还剩 31页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,很抱歉,此页已超出免费预览范围啦! 如果喜欢就下载吧,价低环保! 内容要 ...

  10. JAVA编程思想.姊妹篇.JAVA编程讲义.第1章 Java开发入门

    1.1 Java概述 1.1.1 Java的由来与发展 Java是一种高级计算机语言,它是由Sun公司(2009年4月20日被Oracle公司收购,2010年完成合并)于1995年5月推出的一种用来编 ...

最新文章

  1. SAP零售:补货 Vs 多步骤补货
  2. SQL语句统计每天、每月、每年的数据
  3. nagios报错汇总
  4. @keyframes—定义动画关键帧
  5. LeetCode:Largest Number - 求整型数组中各元素可拼合成的最大数字
  6. 正月初四 | 2月15日 星期一 | 特斯拉否认推出16万元更便宜车型;中国首位百亿票房导演诞生;冷光烟花纳入烟花爆竹管理...
  7. Bootstrap 缩略图
  8. set python用法_Python set()用法及代码示例
  9. BZOJ1433[ZJOI2009]假期的宿舍——二分图最大匹配
  10. VMware服务器虚拟化平台应急方案
  11. alarm之后调用sleep会这样
  12. 搭建Typescript+React项目模板(5) --- 团队规范
  13. 诺基亚n1支持java功能_关于诺基亚N1你必须要了解这10个问题!
  14. 举例说明Java的反射机制,简单的Java反射机制
  15. 网络规划---网络计划图的时间参数计算
  16. idea代码格式化详细总结(快捷键、格式化规则、格式化模板)
  17. Linux 初始化 init 系统(一)
  18. 8box播放器的引用
  19. 前端下载svg格式图片
  20. FPGA电源设计方案

热门文章

  1. 一款免费的数据库工具,比Navicat还要好用,功能还很强大
  2. 【工具使用】Modsim32软件使用详解
  3. 集成电路设计——闩锁效应
  4. 深入理解JVM虚拟机1:JVM内存的结构与消失的永久代
  5. 最简单的电脑上截长图的方法
  6. php中json对象转字符串,JSON对象转字符串的一些方法
  7. roboto字体android,Android字体设置及Roboto字体使用方法
  8. Cisco设备基础命令
  9. 软考论文写作方法及规范
  10. 【Java】java离线安装包