Fork me on GitHub

《Data Structures and Other Objects Using Java》读书笔记

书是从学校图书馆借的,豆瓣评分寥寥,但真的是一本好书。

段落根据我认为重要程度排名。

  • p84
    为什么要给自己给一个类写clone的方法?而不是直接调用父类的复制方法。
    举个栗子,把数组a拷贝到副本b。如果直接去调用父类的复制方法。它会做什么呢?它会把b的引用都指向数组a,也就是说它并没有真正意义上的复制,而是偷懒把新引用指向原本的数组。
    这样做有什么问题呢?问题在于对a数组修改都会影响到拷贝的副本b。显然这不是我们想要的。
    所以我们得自己写一个clone类,循环遍历数组,挨个复制。
    笔记:大家都知道集合有length()方法,不需要知道怎么实现,只要能用就行了。但当我们自己去写一个集合类的时候,写这个方法就必须要考虑到方方面面了。这本书重点不在于告诉人java有多少个API,而是这些类、方法的实现原理。只有当我们去重写的时候才会深度去思考程序的设计的原理。
    比如得知数组的长度,那么写属性size就行了,因为数组是固定长度的。
    但是要得知集合的长度,需要写一个方法遍历得知,因为集合是自动增长的。

  • p8
    final变量即这个变量是最终版本,不可变更,不能被继承。另外final变量的名称全部大写 。
    比如一个常量-273。如果把它写成final变量,则是final MINMUM_CELSIUS=-273。
    什么时候用常量?如果直接写c<-273,那么阅读程序的人会在这里停住,直到想起-273是最小摄氏度为止。
    当然了,有些众所周知的公式,其原始形式更易识别。

  • 用static修饰的话,即使没有生成该对象的实例,也可使用该方法。毕竟如果只是想使用该方法,也没有必要生成一个实例。
    比如java自带Math类,没有生成实例也可以直接用它生成random随机数的方法 。(Math.random() * 100)。这条语句是意思是生成一个一百以内的随机数。
    如果没有用static修饰,绝对不能激活空引用的方法。绝不能访问null引用的实例变量。两种情况下都会引发nullpointerexception异常。

  • 变量分引用变量和普通变量。
    除了八种基本类型之一的任何变量,其余都是引向某一对象的引用变量。
    引用变量:
    有些为了省事的程序员用“油门对象t正在工作”,而不使用,“t引用的油门对象正在工作”
    笔记:t不是这个油门对象的命名而是这个油门对象的引用。

  • p49
    关于取名。名字最好是描述性的词
    存取方法:比如“toString”;get+,比如”getFlow”
    修改方法:动词
    有返回值的静态方法:名词

  • 如果方法需要返回多个信息,那么返回数组是一个有效的手段。

  • 集合类不用定义容量,每当包要满时,方法就会实现,使得容量翻倍。
    m*2+1。加1是为了使得即使容量为零,这一动作仍能起作用。

  • 如果没有指定修饰符,则为默认访问,也叫包访问。可以访问同一个一个包的类。

  • 递归不只是尾递归。

  • java的易移植性:程序变成字节码,这些字节码由jar运行时环境编译,jar可以免费获得,所以程序可以在不同的机器间进行移植。

  • 每一个方法有参数,前置条件,返回值。前置条件比如参数c>-273。

  • 接口代码单词一般以-able为后缀。