虽说一直在看书,喜欢往深了去研究,却发现java知识有点生疏,遂决定重新看一遍《java编程思想》。我是个喜欢在书上涂涂改改做笔记的人,以方便日后重拾该书时能迅速找到重点难点,并助于融会贯通。但是大部分书也就是看过一遍便仍在那儿便不再动它了,其实怪可惜的,如果真能养成整理笔记的习惯的话,那么温故的效率应该可以高出很多。
对象导论这一章要讲的东西也不多,很多东西都可以忽略掉(尤其对于已经学过OOP的同学),很多特性会在以后章节具体讲述。
面向对象的三大特点
- 继承
- 封装
- 多态
java区别于C++,是一种单根继承结构的编程语言,这种单继承的实现方式是前缀技术,即表现为父类域在内存中排在子类新域的前面。
对象的创建与生命周期
- java语言有自己的垃圾回收机制(区别于C++需要人为地写析构函数,控制内存的释放),具体内容可见我的一篇文章垃圾收集
- 对象数据的分布,这一点会在JVM(java virtual machine)中重点讲到。JAVA**运行时数据区**包括:
- 方法区 方法区主要存储一些静态数据
- 堆 引用所指向的数据放在堆中
- 虚拟机栈 通常我们认为引用(类似C++中的指针)存放在栈(虚拟机栈)
- 本地方法栈 对应native方法
- 程序计数器 类似计算机中的程序计数器,用于记录字节码指令
补充
java号称“编写一次,处处运行”。
我们知道C++是编译语言,而python则属于解释型语言,java比较特殊,它先将java代码翻译成字节码(会得到.class文件),这个过程属于编译的过程,而字节码的运行则位解释的过程。
类型
java是一种面向对象的语言,但并不是一切皆类,有如下几种基本类型(存储于栈区):
- boolean
- char
- byte
- short
- int
- long
- float
- double
- void
以上类型大小同C语言大致相同,且遵循32位机器4字节对齐的规则,唯一区别在于char类型在java中占2字节而C语言中char为一字节,所以java中改用byte类型来表示一字节数据,在对字节流的操作中,byte类型非常实用。
大数问题的处理:java非常幸运地能使用BigInteger和BigDecimal类来表示任意精度的整数和定点数,不需要像C++一样自己编写大数问题的支持类/方法了。
类成员变量自动初始化:
对局部变量不适用
- boolean: false
- char:“\u0000”null
- byte:(byte)0
- short: (short)0
- int: 0
- long: 0L
- float: 0.0f
- double: 0.00d
static关键字:和C++中的static类似,在类中表明为类所拥有,而不属于某一特定对象(只初始化一次)