《Java编程思想》笔记01-对象导论

  1. Java中的4种访问制权限
  2. 复用具体实现
  3. 继承
  4. 伴随多态的可互换对象
  5. 单根继承结构
  6. 容器
  7. 对象的创建和生命期
  8. 异常处理:处理错误
  9. 并发编程

Java中的4种访问制权限

  1. public:最大访问控制权限,对所有的类都可见。
  2. protect:同一包可见,不在同一个包的所有子类也可见。
  3. default:包访问权限,即同一个包中的类可以可见。默认不显式指定访问控制权限时就是default包访问控制权限。
  4. private:最严格俄访问控制权限,仅该类本身可见,对外一切类都不可以访问(反射机制可以访问)。

复用具体实现

新的类可以由任意数量、任意类型的其他对象以任意可以实现新的类中想要的功能的方式所组成。因为是在使用现有的类合成新的类,所以这种概念被称为组合(composition),如果组合是动态发生的,那么它通常被称为聚合(aggregation)。组合经常被视为”has-a”(拥有)关系,就像我们常说的”汽车拥有引擎”一样。

在建立新类时,应该首先考虑组合,因为它更加简单灵活。

继承

有两种方法可以使基类与导出类产生差异。第一种方法非常直接:直接在导出类中添加新方法。应该仔细考虑是否存在基类也需要这些额外方法的可能性。

第二种也是更重要的一种使导出类和基类之间产生差异的方法是改变现有基类的方法的行为,这被称之为覆盖(overriding)那个方法。

如果继承只覆盖基类的方法(而并不添加在基类中没有的新方法),就意味着导出类和基类是完全相同的类型,因为它们具有完全相同的接口。结果可以用一个导出类对象来完全替代一个基类对象。这可以被视为纯粹替代,通常称之为替代原则。这种情况下的基类与导出类之间的关系称为is-a(是一个)关系,因为可以说”一个圆形就是一个几何形状”。判断是否继承,就是要确定是否可以用is-a来描述类之间的关系,并使之具有实际意义。

有时必须在导出类型中添加新的接口元素,这样也就扩展了接口。这个新的类型仍然可以替代基类,但是这种替代并不完美,因为基类无法访问新添加的方法。这种情况可以描述为is-like-a(像是一个)关系。新类型具有旧类型的接口,但是它还包含其他方法,所以不能说它们完全相同。

只使用纯粹替代的方式是很好的设计,但是实际上有些时候导出类还是会需要添加新的接口。

伴随多态的可互换对象

面向对象程序设计语言使用了后期绑定的概念。当向对象发送消息时,被调用的代码直到运行时才能确定。

把将导出类看做是它的基类的过程称为向上转型(upcasting)。代码只与基类交互,而和具体类型信息是分离的。

向下转型
向下类型转换是将父类类型强制转换为子类类型,转换过后父类中不可见的子类特性又恢复可见性,向下类型转换时,编译器无法自动检测是否类型兼容,往往会产生类型转换错误的运行时异常,通常不安全。

单根继承结构

除了C++以外的所有OOP语言都是单根继承。

容器

Java提供了List(用于存储序列),Map(也被称为关联数组,用来建立对象之间的关联),Set(每种对象类型只持有一个),以及诸如队列、树、堆栈等更多的构件。不同容器提供了不同类型的接口和外部行为;不同的容器对于某些操作具有不同的效率。例如ArrayList和LinkedList,选取元素时,LinkedList会比较低效,但是插入元素时,相对要高效。

如非确切地知道对象的类型,否则向下转型是不安全的。

Java SE5中加入了参数化类型,即泛型。

对象的创建和生命期

Java完全采用了动态内存分配方式,在被称为堆(heap)的内存池中动态地创建对象,堆带来了灵活性,但是存储分配需要更多时间。由垃圾回收器决定何时回收对象。

异常处理:处理错误

异常处理就像是与程序正常执行路径并行的、在错误发生时执行的另一条路径。因为它是另一条完全分离的执行路径,所以它不会干扰正常的执行代码。这往往使得代码编写变得简单,因为不需要被迫定期检查错误。此外,被抛出的异常不像方法返回的错误值和方法设置的用来表示错误条件的标志位那样可以被忽略。异常不能被忽略,所以它保证一定会在某处得到处理。

并发编程

隐患:共享资源。如果有多个并行任务都要访问同一项资源,那么就会出问题。对于共享资源,需要加锁。



转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 bin07280@qq.com

文章标题:《Java编程思想》笔记01-对象导论

文章字数:1.4k

本文作者:Bin

发布时间:2018-03-13, 21:19:08

最后更新:2019-08-06, 00:43:43

原始链接:http://coolview.github.io/2018/03/13/Java%E7%BC%96%E7%A8%8B%E6%80%9D%E6%83%B3/%E3%80%8AJava%E7%BC%96%E7%A8%8B%E6%80%9D%E6%83%B3%E3%80%8B%E7%AC%94%E8%AE%B001-%E5%AF%B9%E8%B1%A1%E5%AF%BC%E8%AE%BA/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

目录