Java-Thinking in Java
重读Thinking in Java这本书,之前读过但没有坚持下去,这次必须要完整重读一遍了。
除去最后java界面组件开发,一共766页。
对象导论
问题空间–解空间,面向对象编程只关心对象和他们之间的消息。java单继承,多态就是父类对象方法可以使用子类对象调用,向上转型是安全的,向下不安全,因为父类可以有多个子类,子类只有一个父类。
一切都是对象
java内存5个分区:
1、寄存器,在处理器里面。
2、堆栈,在ram中,对象引用就存储在这里。基本类型如int等就存储在这里。
3、堆,ram中,存储对象。
4、常量,存储在程序中。
5、非ram存储,比如持久化存储之类的文件,在磁盘中。
static静态,类方法和类成员可以被对象调用,与类调用相同,内存也是同一块。
操作符
++i是先运算再得出值,i++是先得出值再运算。基本类型运算会自动往大的数据类型转换,窄化数据要注意数据可能丢失。
控制执行流程
If else、while、do while、for、return、break
break退出循环,continue跳过这个循环执行下一次循环。
初始化与清理
非常重要的一章
java使用默认构造器确保初始化,方法重载就是相同方法名称不同参数,对象调用时会自动识别调用的方法。重写是子类对父类方法的重写。this关键字就是调用这个方法的对象。
Finalize()是对对象的标记,让gc下次运行时回收堆内存。
垃圾回收器如何工作?垃圾回收器回收对象时候是搜寻所有对象看他们是否在使用中,也就是引用是否为空,空就回收。2中回收方法,标记清除就是每次找到活的堆内存就标记,在gc的时候把那些不标记的直接清除,还有停止复制,把堆内对象复制到另一块区域,这样整理内存,保持新堆紧密排列。
类加载时候的初始化
类加载发生在类静态成员被使用或创建对象的时候。初始化先初始化静态成员且只初始化一次,然后是非静态成员,如果是对象创建就会到构造器初始化。注意java是动态加载语言,方法只有到执行到了才会执行。
可变参数列表,放进去数组可以是多个,枚举和switch case使用。
访问权限控制
import导入,package包,说明当前文件在哪个包下面。
private私有外部无法访问,protected继承访问权限,默认包访问权限,public全局访问权限。
访问权限2个好处:
给外部提供部分,控制他们可以使用的方法,不暴露内部方法给他们。
让类库使用者更加简单的修改内部代码,使接口和实现分离开来。
复用类
复用类两种方式,继承和组合。在实际开发中多用组合,会让程序更加灵活,继承使用的是基类的接口。
初始化基类:在导出类加载时,程序会往上寻找积累并进行类加载。加载顺序:基类static数据并只初始化一次,然后非static数据,导出类static数据并只初始化一次,然后非static数据。基类构造器初始化,导出类构造器初始化。
finally通常使用在try catch中,用来最后清理数据之类的。
protected使用在数据和方法中,导出类可以继承使用他。
向上转型,父类的引用指向子类的对象,因为导出类算是父类的一种。
final数据不可修改,方法无法重写,类无法被继承。
多态
多态意味着不同的形式,我们持有的从基类中继承来的相同接口,以及使用该接口的不同形式。
接口
抽象类,含有抽象方法的类就是抽象类,继承该类需要重写抽象方法。
接口就是用来类之间的通信,变相实现多继承的方式。
内部类
内部类默认持有外部类对象,静态内部类可看作静态方法,匿名内部类相当于创建实现接口的类。
需要重读。