Think in Java笔记(一)

1.1抽象过程

1.万物皆对象
2.程序是对象的集合,他们通过发送消息来告知彼此要做的。
3.每个对象都有自己的由其他对象所构成的存储。(组合composition)
4.每个对象都拥有其类型。
5.某个特定的所有对象都可以接收同样的消息。

1.2每个对象都有一个接口

1.每一个对象都属于定义了特性和行为的某个特定的类。
2.类是描述具有相同特性(数据类型)和行为(功能)的对象集合。
3.有用的对象必须有某种方式产生对对象的请求,使对象完成任务,而这些请求都是由对象的接口(interface)定义。

Created with Raphaël 2.1.0 对象 对象 接口 接口 请求 请求 特性和行为的特定类 实现 定义 必须有某种方式产生请求

1.3每个对象都提供服务

1.因为程序本身是向用户提供服务,而程序是对象的集合。
2.将整个程序划分为以对象为单位的多个服务,将有利于程序设计时对实体的抽象;同时提高对象的内聚性。

1.4被隐藏的具体实现

程序员
–> 类创建者(创建新数据类型的程序员)
–> 客户端程序员(应用中使用数据类型的程序员)

隐藏数据类型(访问控制public、private、protected)

1.保护对象内部脆弱的部分
2.便于理解哪些是重要的,哪些是可以忽略的
3.允许类创建者改变类内部工作方式而不影响客户端程序员
4.可以实现全局优化

1.5复用具体实现

最简单的复用即“创建一个成员对象”

//创建一个电池对象
class Battery 
{
    //充电功能
    public void chargeBattery(double p)
    {
        if (this.power < 1.) {
            this.power = this.power + p;
        }
    }
    //用电功能
    public boolean useBattery(double p)
    {
        if (this.power >= p) {
            this.power = this.power - p;
            return true;
        }
        else {
            this.power = 0.0;
            return false;
        }
    }
    private double power = 0.0;
}
//创建一个手电筒
class Torch
{
    /** 
     * 电筒开
     * 10% power per hour use
     * warning when out of power
     */
    public void turnOn(int hours)
    {
        boolean usable;
        usable = this.theBattery.useBattery( hours*0.1 );
        if (usable != true) {
            System.out.println("No more usable, must charge!");
        }
    }
    /**
     * 充电
     * 20% power per hour charge
     */
    public void charge(int hours)
    {
        //直接调用该私有电池的充电方法
        this.theBattery.chargeBattery( hours*0.2 );
    }
    /**
     * 创建一个私有的电池对象
     * composition组合
     */
    private Battery theBattery = new Battery();
}

Torch类使用了一个Battery类型的对象(theBattery)来作为数据成员。在Torch的方法中,我们通过操纵theBattery对象的接口,来实现Battery类所提供的功能(functionality)。
我们说,一个Torch对象拥有(has-a)一个Battery对象。

1.6继承

1.继承即表示不仅包括现有类型的所有成员,更重要的是它复制了基类的接口。
基类和导出类产生差异:
(1)直接在导出类中添加新方法
(2)覆盖(overriding)

1.7伴随多态的可互换对象

1.一个非面向对象编程的编译器产生的函数调用会引起“前期绑定”,意味着编译器将产生对一个具体函数名字的调用,而运行时将这个调用解析到将要被执行的代码的绝对地址。
2.面向对象程序设计语言使用了“后期绑定”的概念,当对象发送消息时,被调用的代码指导运行时才能确定。编译器确保被调用方法的存在,并对调用参数和返回值执行类型检查。

Created with Raphaël 2.1.0 非面向对象编程 函数 函数 编译器 编译器 代码 代码 运行前 产生调用 运行时 解析到绝对地址 运行后
Created with Raphaël 2.1.0 面向对象编程 对象 对象 编译器 编译器 运行时 确保被调用方法的存在 并对调用参数和返回值执行类型检查

后期绑定实现:java使用一小段特殊的代码来替换绝对地址调用,使其计算方法体的地址。

1.8单根继承结构

除C++以外的所有OOP语言,最终都继承自单一的基类——Object
1.你可以在每一个对象上执行某些基本操作
2.很容易在堆上创建,而参数传递会得到极大的简化
3.使垃圾回收器的实现变得容易得多
4.异常处理更为灵活

1.9容器

定义:因为无法确定需要多少空间来创建多少对象,所以创建了另一种对象类型,用于持有对其他对象的引用——容器。
C++的容器:标准模板类库(Standard Template Library,STL)
Object Pascal的容器:可视化构件库(Visual Component Library,VCL)
java的容器:List、Map和Set
1、参数化类型(泛型)
为了将原先置入容器中的Object对象还原为具有实用接口的对象:向下转型和参数化类型(泛型)
由于向下转型和运行时的检查需要额外的程序运行时间,所以运用参数化类型,编译器可以定制一个只接纳和取出特定对象的容器。<>

ArrayList<Shape> shapes = new ArrayList<Shape>();

1.10对象的创建和生命期

1、第一种:堆栈——为追求最大的执行素的,将对象至于堆栈或静态存储区域内,将存储空间分配和释放至于优先考虑的位置。
2、第二种:堆(heap)——在内存池中动态地创建对象,因为存储空间是在运行时被动态管理的,所以需要大量的时间在对重分配存储空间。
java提供了“垃圾回收器”的机制,可以自动发现对象何时不再被使用,继而销毁它。

1.11异常处理:处理错误

java的异常处理在众多的编程语言中格外引人注目,因为java一开始就内置了异常处理,而且强制你必须使用它。

1.12并发编程

并发——同一时刻处理多个任务
有多个并行任务都要访问同一项资源,则会出现问题。为解决这个问题,必须在使用期间将资源锁定。

Created with Raphaël 2.1.0 任务 任务 资源 资源 任务完成 任务完成 锁定 释放资源锁

java的并发是内置于语言中的,java SE5已经增添了大量额外的库支持。

java与Internet

服务器——信息存储池、用于分发信息的软件以及信息与软件所驻留的机器或机群
客户机——通过驻留在用户机器上的软件与服务器进行通信,以获取信息、处理信息
中间件——为了将延时最小化,将负载分散给在服务器端的其他机器。
Web最初的“服务器——浏览器”设计是为了能够提供交互性的内容,但是其交互性完全由服务器提供。
通用网关接口(common gateway interface,CGI)——用于传递

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值