前言
准备开始阅读《Thinking in Java(第四版)》,这是Java的经典书籍,看了下目录,基本涵盖了Java编程的所有知识点。
本章先从第一,二章开始记录。
对象导论
作为本书的第一章,对象导论围绕面向对象,简述了其思想,设计以及相关的概念。
对象
Java是面向对象的编程语言,那么对象,究竟如何理解与定义?
先看看面向对象语言的鼻祖-smalltakl的五个特性:
1. 万物皆对象
2. 程序是对象的集合,他们通过发送消息(可以理解为方法的调用)来告知彼此要做什么
3. 每个对象都有自己的由其他对象所构成的存储(可以理解成类的聚合和组合关系)
4. 每个对象都拥有类型即每个对象都是某个类(class)的一个实例
5. 某一特定类型的所有对象都可以接手同样的消息(继承)
关于对象,还有这么一个简单的描述:
对象具有状态,行为和标识 —Booch
1. 状态:对象拥有的内部数据(属性)
2. 行为:对象的方法
3. 标识:区分对象的唯一的地址(书中解释到这一点有些过于受限,当对象被存储在不同的机器和地址空间或者
硬盘上时,标识就应该是内存地址之外的其他东西)
对象,是遵照一定规则对实际问题的抽象或者说描述。比如:老鹰,新建一个老鹰的类型,它的属性有性别,年龄等,它的行为有飞行,捕食等。
而将属性具体化后,就得到一个对象。通过执行对象的行为来完成对实际问题的描述,例如调用他的飞行方法描述飞翔的过程。
面向对象
面向对象的思想其实很好理解,他即是将现实事物转为程序语言去处理。抽象出现实事务的属性和行为作为一个类型,然后创建对应的对象完成对现实问题的描述(可以理解为业务逻辑的完成)。
这是一种更灵活更强有力的语言抽象
这句话应该很好的概括了面向对象的优势。
那么谈到面向对象,肯定逃不开抽象,继承,封装,多态:
1. 抽象,对事务公共属性,行为的归纳提取,创建一个类型。
2. 继承,基于现有抽象的新的抽象。即在保留相同属性,行为的基础上建立一个新的类型。而新类型的行为可
以有自己单独的实现方式,而且保留父类的属性行为基础上,还可以增加新的属性和行为
例如:鸟类的飞行行为,继承鸟类的老鹰和麻雀都拥有同样的飞行行为,但两者可飞行的高度不同。而对老
鹰可以增加对其他动物的捕食行为
继承一方面提高了代码的复用性,另一方面也是建立了类与类间的关系,体现了对实际事务的描述
3. 封装,目的是隐藏一些没必要被开发者知晓的信息,减少操作带来的bug。是为了程序安全性的一种措施。通
常借助代码的访问控制达成(public,private,protected)
4. 多态,基于继承的关系,在编译期可以将一个对象当作他的父类对待,直到运行期才确定他的类型。这种特
性可以提高代码的扩展性,例如:一个方法的入参可以用父类定义,而传参时选择不同的子类以完成不同的
逻辑处理
一切都是对象
本书第二章从对象的创建谈起,逐步讲述了怎样构建一个简单的Java程序,包括编码规范,注释,javadoc标签等。因为是比较基础的内容,所以就摘一些我比较感兴趣的记录一下。
引用
Java中对对象的控制是用引用完成的,例如
ClassA a = new ClassA();
这里初始化一个类型ClassA的对象a,a只是对象的一个引用,是一个地址值,指向堆中实际数据存储的地方。
这也是在参数传递的时候时常容易忽略的问题。
参数如果是对象,传递的是对象的引用值,那么方法内的操作就会反馈到同一对象的所有引用上。
参数如果是基本类型,基本类型存储的是数据本身,这时传递的就是数据的值,所以不影响方法外的基本类型的值。
这里举个简单的例子:
1 | ClassB b = new ClassB(1); |
static
static关键字是常用的关键字之一。他开辟独属于类的存储空间,不依赖于对象的创建,是所有对象公有的。
当类第一次加载时,static修饰的方法,属性,代码块就会随之加载,且只会加载这一次。
因此我们可以将一些类的初始化操作(设置默认值等),常量,公用方法用static修饰处理,因为只会加载一次,所以一方面提升效率,另一方面保证数据不可变。
小结
书的第一章,第二章比较基础,介绍了面向对象的思想,Java的基础概念。算是温故了一些知识点,不过对
面向对象及对象的一些概念的阐述感觉让自己的认知更加清晰了。