thinking in java读书笔记

第二章 一切都是对象


Java中基本类型所占存储空间固定不变。基本类型做类的成员时有默认值。


Java对象存放在堆当中。对象引用存在于堆栈中。


Static关键字:属于类的数据或方法。只有一份,所有对象共用,属于类。即使没有创建对象也可以调用的方法。


第三章 操作符


Java为引用调用。


Java中采取截尾原则。


逻辑表达式中不可以使用非布尔值。


自动提升:对小于int的基本类型执行算术运算或者按位运算会使得这些值自动变为int,结果也为int。


第四章 控制执行流程


break 退出循环,不执行循环中剩余语句。continue停止执行当前循环轮,退回至循环开始处,开始下一次循环轮。


第五章 初始化于清理


默认构造器:无参构造器。如没有明写构造器,编译器自动创建默认构造器。如果已经有构造器,编译器不会创建。


构造器中可以调用构造器,但只能调用一个,且必须置于起始处。除了构造其中,其他任何方法中禁止调用构造器。


垃圾回收器:回收对象的内存。非正规渠道获取的内存由finalize()处理。finalize要尽量不用,他是不可预测的,性能很低。对象其他相关资源的释放要通过一个显式的普通函数来清理。


垃圾回收器使得JAVA对象分配效率变高:它会一边回收空间,一边使堆中的对象更加紧凑排列,这样堆指针就可以很容易移动到传送带开始之处。有的采取停止-复制实现,有的采取标记-清扫实现。


成员会有默认初始化。初始化顺序变量先于方法,先于构造器。静态数据之初始化一次,要么在创建对象时,要么在第一次访问时。静态的先于非静态的初始化。


可变参数可以接受0个参数。要慎用可变参数,性能会降低,每次调用均会导致一次数组分配和初始化。解决:当参数低于三个时,定义5个重载。


第六章 访问权限控制


访问权限:private public protected 对于成员变量和函数来讲 private仅供自己内部使用 protected的话导出类内部也可用 protected也带有包访问权限,public均可用 默认的访问权限是包访问权限,在同一包中才可用。


类的访问权限:只能是默认:包 或者public 每个.java文件只能有一个public的类 这个public类的名称必须和.java文件的名称一样。


控制权限的原因:用户不能触碰不该触碰的东西;类库设计者更改类的内部工作方式,不必担心这样会对客户端程序员产生重大影响。


第七章  复用类


组合与继承:新类是旧类的一个特殊实力这是继承,新类是特殊类,旧类是通用类。旧类是新类的一个部件是组合。用旧类的功能实现新类。要向上转型 必选继承。


final关键字:对于变量,表示不可改变的编译时常量。若是引用的话表示该引用只能指向一个对象。static 加 final只占据一段不能改变地存储空间。空白final在使用前必须初始化,可达到根据对象而有所不同但又保持很定不变的特性。final方法表示该方法不可被覆盖。


初始化以及加载:类会在初次使用时加载。有两种时机:创建类的一个对象时;访问static域或者static方法时。加载时=初次使用时就会发生static初始化。依程序中程序初始化static的东西,先基类后导出类的static。创建对象时 先调用基类的初始化 后导出类。static得最先。 不管什么情况  积累子类的static都会先初始化。


第八章  多态


多态:消除类型之间的耦合关系。 动态绑定 运行时绑定 后期绑定。


多态:普通方法才会动态绑定。静态方法不会 ,域也不会。


初始化顺序:所有的静态初始化 > 基类的字段 > 基类的构造器>导出类的字段>导出类的构造器 在初始化之前,分配给对象的存储空间初始化为二进制0.


协变返回类型:导出类的覆盖方法可返回原基类返回类型的导出类型。


向下转型:运行时类型识别 会抛出异常。


构造器内部最好不要调用其他方法,如需要调用最好是基类的final或者private方法。


继承表达行为间的差异,字段表达状态的差异。组合可以在运行时动态决定是那个类型,而继承则不可在运行时觉得继承不同的对象。



第九章 接口


抽象类:有若干个抽象方法,也可无抽象方法;抽象类不可有对象,若继承至抽象类,则需实现抽象方法之后才可有对象,不然则还为抽象类。


接口:完全解耦 接口中方法默认声明为public的 接口可用来实现多重继承  接口之间可继承 也可多重继承 接口中的域默认为static final 不能是空final但可用费常量表达式初始化。



第十章  内部类


内部类有一个链接到外部类的引用,外部类对象的引用需要使用:outerclassname.this;创建内部类的对象需要使用:outclassinstance.new innerclass();


非静态内部类,必须先拥有外部类的对象之后,才可创建内部类对象。


局部内部类:访问局部变量需要final;


匿名内部类:初始化:实例初始化 初始化块


静态内部类(嵌套类):不需外围类对象就可创建,也不可以访问外围类非静态成员。他可以包含static方法和字段也可以包含嵌套类。


内部类:代码隐藏;完整提供多重继承;可访问外部类所有成员。



第十一章 持有对象:各种容器


Arrays.asList()函数产生的list对象底层是数组,如果不把它包装进另一个容器的话会受到数组相关属性的限制。


四种容器:MAP LIST SET QUEUE



第十二章 异常

异常有一个带字符串参数的构造器。


要么处理异常 要么做异常说明


异常链:可以用一个cause参数的构造器记录原异常信息 若没有构造器 可用initcause()方法


runtimeexception标准异常 可不用自己处理


finally 清理动作的完成 可用来多个点返回 当返回点位于try catch finally中时 就算在try中return了 还可以执行finally中语句


对于继承来讲,异常只能缩小而不能放大 不能抛出新的基类中木有的异常。


防止构造器失败,要完成构造器中的清理 可以通过嵌套的try catch实现 如果失败了就执行外层catch 如果成功了才执行内层的finally清理。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值