前言
从本章开始,逐渐记录笔者在阅读「Thinking in Java」时,内容的积累、代码的实践和个人编程的心得,重要的是个人的成长。正式工作将近一年的我,有必要重新温故一下Java
的核心基础,巩固自身的硬实力,从根本感受Java
语言的魅力,而不是局限于敲代码,完成产品需求。更重要的是领悟每种语言的特色,融入其中,提升自己,感受学习带来的快乐!足以!
正文
1. Java 五个基本特性
- 万物皆为对象
- 程序是对象的集合,他们通过发送消息来告知彼此所要做的。
- 每个对象都有自己的由其他对象所构成的存储。
- 每个对象拥有其类型。
- 某一特定类型所有对象都已接收同样的消息。
2. 每个对象都有一个接口
3. 每个对象都提供服务
将对象看做是服务提供者有一个好处,它有助于提高对象的内聚性。这不仅在设计过程中非常有用,而且当其他人试图理解你的代码活重用某个对象时候, 如果他们看出对象多能提供的服务的价值,它会调整对象以适应其设计的过程变得简单很多。
4. 被隐藏的具体实现
类创建者的目标是构建类,这种类只向客户端程序员暴露必需的部分,而隐藏其他部分。这以为着类创建者可以任意修改被隐藏的部分,而不用担心对其他任何人造成影响,被隐藏的部分通常对象内部脆弱的部分,它们很容易被粗心或者不知内情的客户端程序员所毁坏,因此将实现隐藏起来可以减少程序的 bug。
5. Java 用三个关键字在类的内部设定边界
public | private | protected |
---|---|---|
任何人都可以用 | 除类型创建者和内部方法,任何人不能访问 | 仅继承的成员可以访问 |
6. 复用具体实现
代码复用是面向对象程序设计语言所提供的最了不起的优点之一。在建立新类时,应该优先考虑组合,因为它更加简单灵活,如果采用这种方式,设计会变得更加清晰,一旦有了一些经验之后,便能够看出必须使用继承的场合了。
7. 继承
void doSomeThing(Shape shape) {
shape.draw();
// ....
shape.setColor();
}
Circle circle = new Circle();
doSomeThing(circle);
当Circle
被传入到预期接收的Shape
,向上转型,这就是泛型的使用,当调用基类的方法时,会主动定位到指定的具体对象,调用该对象的具体实现方法。
8. 容器
需要对容器有所选择,主要有两个原因:1. 不同容器提供了不同类型的接口和外部行为。堆栈相比于队列就具备不同的接口和行为。2. 不同的容器对某些操作具有不同的效率,最好的例子便是 ArrayList
和 LinkedList
。
9. 对象的创建和生命周期
在使用对象时,最关键的问题之一便是它们的生成和销毁方式,每个对象为了生存都需要资源,尤其是内存,当我们不再需要一个对象时候,它必须被清理掉,使其占有的资源可以被释放和重用。
10. 异常处理:处理错误
异常处理将错误处理直接置于编程语言中,有时候甚至置于操作系统中。异常处理不是面向对象的特征–尽管在面向对象语言中异常常被表示成一个对象,异常处理在面向对象语言出现之前就已经存在了。
11. 并发编程
频发的操作不可能允许我们等上一个操作结束才能进行下一个操作,这个时候就需要并发执行,很早计算机就已经有了这个概念,就是在同一个时刻处理多个任务的思想。
12. Java 与 Internet
总结
OOP 和 Java 也许并不适合所有人,重要的是正确评估自己的需求,并决定 Java 是否能够最好的满足这些需求,还是使用其他的编程系统才是更好的选择,如果知道自己的需求在可预见的未来会变得非常特殊,并且 Java 可能不满足你的具体限制,那么就应该考虑其他的选择了。