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 并发编程

有时中断对于处理时间性强的程序是必须的,但对于大量其他问题,我们只想把问题切分成多个独立的部分执行。在程序中,这些彼此独立运行的部分被称为"线程",这个概念被称为并发
并发看起来相当有用,但有一个隐患:共享资源。如果多个并行任务都要访问同一个资源,那么就会出现问题。
解决办法:当一个任务访问资源的时候,将资源锁住,直到使用完毕后,在释放资源,给其他任务使用。

原文地址:https://www.cnblogs.com/Tan-sir/p/9289068.html

时间: 2024-07-31 12:01:42

Java 基础之一对象导论的相关文章

Think in Java(一):对象导论

1. OOP的特点 (1) 万物皆为对象; (2) 程序是对象的集合,他们通过发送信息来告诉彼此所要做的; (3) 每个对象都有自己的由其他对象所构成的存储; (4) 每个对象都拥有它的类型; (5) 某一特定类型的对象都可以接收同样的消息; 2. Java比C++简单? (1) Java有垃圾回收器, 不用手动销毁对象; (2) Java使用单根继承; (3) Java只能以一种方式创建对象(在堆上创建); Think in Java(一):对象导论

java基础知识-对象和类

前言: 因为要准备Java面试,所有将java基础知识点重新复习一遍,主要笔记来源于菜鸟教程和java核心技术的书籍中,也有一些博客上的资料(这些只供我个人学习使用) Java 对象和类 对象:对象是类的一个实例,有状态和行为.例如,一条狗是一个对象,它的状态有:颜色.名字.品种:行为有:摇尾巴.叫.吃等. 类:类是一个模板,它描述一类对象的行为和状态. 下图中男孩女孩为类,而具体的每个人为该类的对象: 1.Java中的对象 现在让我们深入了解什么是对象.看看周围真实的世界,会发现身边有很多对象

Java基础03-12_对象比较

对象比较 如果说现在有两个数字要判断是否相等,可以使用"=="完成 如果是字符串要判断是否相等使用"equals()" 但是如果说现在有一个自定义的类,要想判断它的两个对象是否相等,那么必须要实现类对象之中所有属性内容的比较. 范例:基础的比较方式 class Book { private String title; private double price; public Book(String title, double price) { this.title

JAVA基础之对象的初始化

本文主要记录JAVA中对象的初始化过程,包括实例变量的初始化和类变量的初始化以及 final 关键字对初始化的影响.另外,还讨论了由于继承原因,探讨了引用变量的编译时类型和运行时类型 一,实例变量的初始化 一共有三种方式对实例变量进行初始化: ①定义实例变量时指定初始值 ②非静态初始化块中对实例变量进行初始化 ③构造器中对实例变量进行初始化 当new对象 初始化时,①②要先于③执行.而①②的顺序则按照它们在源代码中定义的顺序来执行. 当实例变量使用了final关键字修饰时,如果是在定义该fina

Java基础学习--对象容器

要用Java实现记事本的功能.首先列出记事本所需功能: 可以添加记录(字符串): 可以获得记录条数: 可以删除其中某一条记录: 可以获得指定第几条的记录: 可以列出所有的记录. 如果这个记事本是某个大程序的其中一部分,也就是说还有上层程序,那么上层程序就有可能会调用这个记事本以上列出的某个数据. 所以我们称上述多列功能为这个记事本的 接口 . 那么调用这些接口就是通过记事本这个类的public函数(method). 但是,怎么实现记录呢?显然所记录的字符串不能记录在某个数组里,因为数组的长度是预

黑马程序员--java基础--其他对象

------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! ------- 第一讲     System类 一.概述 1.System是描述系统一些信息的类,类中的属性和方法都是静态的.不能被实例化,没有提供构造函数. 2.字段摘要 out:标准输出流.默认是控制台. in:标准输入流.默认是键盘. 二.方法 1

Java基础---其他对象

第一讲     System类 一.概述 1.System是描述系统一些信息的类,类中的属性和方法都是静态的.不能被实例化,没有提供构造函数. 2.字段摘要 out:标准输出流.默认是控制台. in:标准输入流.默认是键盘. 二.方法 1.获取系统的属性信息: PropertiesgetProperties(); 说明: 1)此方法返回的双列集合,即键值对:因为Properties是Hahstable的子类,也就是Map集合的一个子类对象,那么通过Map方法取出该集合中的元素. 2)该集合存储的

Java基础之对象序列化

1. 什么是Java对象序列化 Java平台允许我们在内存中创建可复用的Java对象,但一般情况下,只有当JVM处于运行时,这些对象才可能存在,即,这些对象的生命周期不会比JVM的生命周期更长.但在现实应用中,就可能要求在JVM停止运行之后能够保存(持久化)指定的对象,并在将来重新读取被保存的对象.Java对象序列化就能够帮助我们实现该功能. 使用Java对象序列化,在保存对象时,会把其状态保存为一组字节,在未来,再将这些字节组装成对象.必须注意地是,对象序列化保存的是对象的"状态",

java基础入门-对象的浅克隆与深克隆

这里面涉及到两个类,一个是person类,一个是测试类test 首先我们说到的是浅克隆,对某个对象实施Clone时对其是一无所知的,它仅仅是简单地执行域对域的copy,如果是基本数据类型(int,float,char等)到没什么问题,基本遇上如string,Integer等不可变对象的时候也没有什么问题,但是如果遇上了date这个可变对象,或者是自己定义的可变对象,他只是简单的复制一下引用这些可变对象,而不是把这些可变对象再一次的复制 先上person类,这里面虽然是实现Cloneable接口,