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数据不可修改,方法无法重写,类无法被继承。

多态

多态意味着不同的形式,我们持有的从基类中继承来的相同接口,以及使用该接口的不同形式。

接口

抽象类,含有抽象方法的类就是抽象类,继承该类需要重写抽象方法。

接口就是用来类之间的通信,变相实现多继承的方式。

内部类

内部类默认持有外部类对象,静态内部类可看作静态方法,匿名内部类相当于创建实现接口的类。

需要重读。

持有对象


Java-Thinking in Java
http://example.com/2022/06/04/Java-Thinking in Java/
作者
xdd
发布于
2022年6月4日
许可协议