Java 基础之一对象导论
对象导论
1.1 抽象过程
所有编程语言都提供抽象机制。人们所能解决的问题的复杂性直接取决于抽象的类型和质量。
汇编语言是对底层机器的轻微抽象。
我们将问题空间中的元素及其再解空间中的表示称为对象。这种思想实质是:程序可以通过添加新类型的对象使自身适用于某个特定的问题。
- 万物皆为对象
可以抽取待求解问题的任何概念化构建表示程序中的对象。 - 程序是对象的集合
他们通过发送消息来告知彼此所要做的。 - 每个对象都有自己的由其他对象所构成的存储
- 每个对象都拥有其类型
- 某一特定类型的所有对象都可以接收同样的消息
1.2 每个对象都有一个接口
创建抽象数据类型(类)是面向对象程序设计的基本概念之一。
可以创建某一类型的变量,然后操作这些变量。
类描述了具有相同特性(数据元素)和行为(功能)的对象集合,所以一个类实际上就是一个数据类型。
1.3 每个对象都提供服务
每个对象都提供服务,它有助于提高对象的内聚性。高内聚是软件设计的基本质量要求之一:这意味着一个软件构件的各个方面组合得很好。
1.4 被隐藏的具体实现
将程序开发人员按照角色分为类创建者和客户端程序员。
客户端程序员的目标是收集各种用来实现快速应用开发的类。类创建者的目标是构建类,这种类只向客户端程序员暴露必须的部分,而隐藏其他部分。
访问控制:一个存在原因让客户端程序员无法触及不应该触及的部分。另一个存在原因就是允许库设计者可以改变类内部的工作方式而不用担心会影响客户端程序员。
1.5 复用具体实现
使用现有类合成新的类,这种方式被称为组合。
如果组合是动态的,通常称他们为聚合。
1.6 继承
当父类发生变化时,被修改的子类也会发生变动。
当继承现有类型时,也就创建了新的类型。
导出类和基类具有相同的类型。
如果只是简单地继承一个类而并不做其他任何事情,那么基类接口中的方法将会直接继承到导出类。
1.6.1 是一个与像一个关系
导出类和基类时完全相同的类型,因为它们具有完全相同的接口。可以用一个导出类对象来完全替代一个基类对象。这可以被视为纯粹替代,通常称为替代原则。is-a关系
有时必须在导出类型中添加新的接口元素,这样也就扩展了接口。这个新的类型任然可以替代基类,但时这种替代不完美,因为基类无法访问新添加的方法。者中可以描述为is-like-a关系。
1.7 伴随多态的可互换对象
在处理类型的层次结构时,想把一个对象不当作它所表示的对象类型来对待,而把它当作基类来对待。
通过导出新的子类型而轻松扩展设计的能力时对改动进行封装的基本方法之一。
1.8 单根继承结构
在单根继承结构中的所有对象都具有一个公用接口,所有它们归根到底都时相同的基本类型。
单根继承保证了所有对象都具备某些功能。
单根继承结构使垃圾回收器都具备某些功能。由于所有对象都保证具有其类型信息,所以不会因无法确定对象的类型而陷入僵局。
1.9 容器
在C++中,容器被称为标准模板类库。
单一的容器是满足不了现有的需求,还需要对容易进行选择,主要原因有两个:
- 不同容器提供了不同类型的接口和外部行为。
- 不同容器对于某些操作具有不同的效率
1.9.1 参数化类型
参数化类型就是编译器可以自动定制作用于特定类型上的类。在Java中称为泛型。
1.10 对象的创建和生命期
当使用对象时,最关键问题之一就是他们的生成与销毁。每个对象为了生存都需要资源,尤其时内存。当我们不在需要对象时,需要清理掉所占有的资源。
对象的数据存在于何处,有两种方式:
- 为了最求最大执行速度,对象的存储空间和生命周期可以在编程程序时确定,这可以通过将对象置于堆栈或限域变量或静态存储区来实现。这种方式将存储空间的分配和释放置于优先位置。
- 在碓的内存池中动态的创建对象。在这种方式中,直到运行时才知道需要多少对象,它们生命周期如何,以及它们的具体类型是什么。因为存储空间是被动态管理的,所有需要大量时间在碓中分配空间,这可能要远远大于在堆中创建空间。Java采用的便是这种方法。
1.11 异常处理:处理错误
异常是一种对象,它从出错地点被"抛出",并被专门用来处理特定类型错误的相应异常处理器"捕获"。异常处理像是与正常程序执行路径并行的,在错误时执行的另一条路径。
异常提供了一种从错误状况进行可靠恢复的途径。
1.12 并发编程
有时中断对于处理时间性强的程序是必须的,但对于大量其他问题,我们只想把问题切分成多个独立的部分执行。在程序中,这些彼此独立运行的部分被称为"线程",这个概念被称为并发。
并发看起来相当有用,但有一个隐患:共享资源。如果多个并行任务都要访问同一个资源,那么就会出现问题。
解决办法:当一个任务访问资源的时候,将资源锁住,直到使用完毕后,在释放资源,给其他任务使用。
Java 基础之一对象导论的更多相关文章
- Thinking In Java读书笔记--对象导论
Thinking In Java读书笔记--对象导论[对象]服务提供者==>将对象看做一个服务提供者[程序员分类][类创造者]/[客户端程序员] [访问控制存在的原因?][1]客户端程序员无法触 ...
- java基础(二) -对象和类
Java 对象和类 Java作为一种面向对象语言.支持以下基本概念: 多态 继承 封装 抽象 类 对象 实例 方法 重载 对象:对象是类的一个实例(对象不是找个女朋友),有状态和行为.例如,一条狗是一 ...
- Java基础03-12_对象比较
对象比较 如果说现在有两个数字要判断是否相等,可以使用"=="完成 如果是字符串要判断是否相等使用"equals()" 但是如果说现在有一个自定义的类,要想判断 ...
- JAVA基础之对象的初始化
本文主要记录JAVA中对象的初始化过程,包括实例变量的初始化和类变量的初始化以及 final 关键字对初始化的影响.另外,还讨论了由于继承原因,探讨了引用变量的编译时类型和运行时类型 一,实例变量的初 ...
- java基础(一)对象
对象的创建 Test test = new Test(); Test test = new Test("a"); 其实,对象被创建出来时,对象就是一个对象的引用,这个引用在内存中为 ...
- Java基础---其他对象
第一讲 System类 一.概述 1.System是描述系统一些信息的类,类中的属性和方法都是静态的.不能被实例化,没有提供构造函数. 2.字段摘要 out:标准输出流.默认是控制台. in: ...
- Java基础 -- 持有对象(容器)
一 容器的用途 如果对象的数量与生命周期都是固定的,自然我们也就不需要很复杂的数据结构. 我们可以通过创建引用来持有对象,如 Class clazz; 也可以通过数组来持有多个对象,如 Class[] ...
- Thinking in java(1):对象导论
纯粹的面向对象程序设计的几个特性:1. 万物皆对象2. 程序是对象的合集,他通过发消息告诉彼此要做什么3. 每个对象都有自己的由其他对象所构成的存储4. 每个对象都有其类型5. 某一特定类型的所有对象 ...
- Java基础之对象序列化
1. 什么是Java对象序列化 Java平台允许我们在内存中创建可复用的Java对象,但一般情况下,只有当JVM处于运行时,这些对象才可能存在,即,这些对象的生命周期不会比JVM的生命周期更长.但在现 ...
随机推荐
- [20171225]RMAN-06808: SECTION SIZE cannot be used when piece limit is in effect.txt
[20171225]RMAN-06808: SECTION SIZE cannot be used when piece limit is in effect.txt --//朋友拿我的一些例子来测试 ...
- python第十七天---时间模块、random模块
作完一个作业,开始新的学习: 有由今天的时间有限所有学习了以下两个模块,明天继续! 时间模块.random模块 import time #!usr/bin/env python #-*-coding: ...
- Spring Boot 使用 ServletFileUpload上传文件失败,upload.parseRequest(request)为空
使用Apache Commons FileUpload组件上传文件时总是返回null,调试发现ServletFileUpload对象为空,在Spring Boot中有默认的文件上传组件,在使用Serv ...
- oracle 数据库 导出与导入 expdb和impdb使用方法 (服务器本机)
expdb 与exp 导出数据有区异,exp 无法导出空值表,用于客户端,expdb 只用于服务器端.备份出来的数据可再远程传输到另外一台linux 实现异地备份! 一 关于expdp和impdp ...
- centos7发行版号对应基于RHEL Source(版本)对照表
基础分布 详情地址:https://wiki.centos.org/Download 存档版本 CentOS Linux 7 发布 基于RHEL Source(版本) 存档的树 7(1804) 7.5 ...
- WampServer 安装使用详解
WampServer集成环境的搭建.安装.使用.配置 什么是WampServer WampServer是一款由法国人开发的Apache Web服务器.PHP解释器以及MySQL数据库的整合软件包.免去 ...
- 计算机基础-CPU
CPU(Central Processing Unit中央处理器)由运算器和控制器组成--微机性能的集成度最高的核心部件 1.金属触点 2.附带散热器 风冷式 热管散热式 水冷式等 扣具结构要和CPU ...
- 教程+资源,python scrapy实战爬取知乎最性感妹子的爆照合集(12G)!
一.出发点: 之前在知乎看到一位大牛(二胖)写的一篇文章:python爬取知乎最受欢迎的妹子(大概题目是这个,具体记不清了),但是这位二胖哥没有给出源码,而我也没用过python,正好顺便学一学,所以 ...
- 模糊查询sql语句条件是中文在后台从数据库查不到结果,是英文和字母就可以,而且统一编码为UTF-8了!!!
4.在mysql安装目录下打开my.ini文件 5.保存,接着打开电脑的服务选项,将MySQL 重启 6. 重启后重新进入dos 窗口的MySQL ,输入show variables like &qu ...
- 详解JavaScript中void语句的使用
void是在JavaScript中的一个重要的关键字可被用作其单操作数之前出现一元运算符,其可以是任何类型. 此运算符指定不需要返回值,进行计算的表达式.它的语法可能是下列之一: <script ...