记得老师曾说过,当你在一个方面感觉没有出路,或者迷茫的时候,或者在寻找新的突破的时候,不妨回到最原始、最基础的方面,重新审视哪些看似简单、司空见惯的内容,系统性去温故,定会有新的启迪!这就是为什么,基础越好越走得远,越有生命力。
尽管很多还不是理解的那边透彻,也开始尝试去实践,温故而知新吧、或者是积累基础、融汇贯通基础吧!做到以不变应万变吧。
下面总结Thinking in java中曾经和当前正在温习的基础内容,每次读来,相同的内容,感受完全不同。每深入贯通一次就对java理解深入一次、对程序、对项目的很多软性的认识也有所领悟。越来感觉这本书有价值!
(1)将对象看做是服务提供者还有一个好处:它有助于提供对象的内聚性,高内聚是软件设计的基本质量要求之一
(2)java 用三个关键字在类的内部设定边界 public private protected
(3)代码复用是面向对象程序设计语言所提供的最了不起的优点之一
(4)单根继承结构使垃圾回收器的实现变得容易更多
(5)在c++中,容器是标准c++类库的一部分,经常被称为标准模板类库 Standard template library STL
(7)Java 提供了两个用于高精度计算的类 BigInteger BigDecimal
(8)在java 编程语言编码约定中,代码风格是这样规定的。类名的首字母要大写,如果类名由几个单词构成,那么把他们并在一起,其中每个内部单词的首字母都采取大写形式
(9)equals 默认行为是比较引用
(10)当使用逻辑操作符时,我们会遇到一种短路现象
(11)移位操作符只可用来处理整数类型
(12)如果对char byte short 类型的数值进行移位处理,那么在移位进行之前,他们会被转换为int类型,只有数值右端5位才有效
(13)java不会自动地将int数值转换成布尔值
(14)无穷循环的第二种形式 for(;;)
(15)调用构造器是编译器的责任
(16)构造器是一种特殊类型的方法,因为它没有返回值
(17)垃圾回收至于内存有关
(18)如果java虚拟机JVM并未面临内存耗尽的情形,它是不会浪费时间去执行垃圾回收以恢复内存的
(19)面向对象设计中需要考虑的一个基本问题:如何把变动的事物与保持不变的事物区分开来
(20)每个编译单元只能有一个public类,否则编译器不会接受
(21)java 包的命名规则全部使用小写字母,包括中间的字也是如此
(22)package语句必须是文件中得第一行非注释程序代码
(23)java没有c的条件编译功能
(24)如果不提供任何访问权限修饰词,则意味着它是“包访问权限”
(25)提供访问器 accessor和变异器 mutator方法,也称作get、set 方法,以读取和改变数值,对OOP而言,这是最优雅的方式,而且也是javabeans的基本原理
(26)任何可以肯定只是该类的一个“助手”方法的方法,都可以把它指定为private
(27)除非必须公开底层实现细目,否则就应该将所有的域指定为private
(28)有时,基类的创建者会希望某个特定成员,把对它的访问权限赋予派生类而不是所有类,这就需要protected来完成这一工作
(29)java 会自动在导出类的构造器中插入对基类构造器的调用
(30)构造过程是从基类向外扩散
(31)保护区域后的finally 字句中的代码总是要被执行的
(32)一个即时static又是final的域只占据一段不能改变的存储空间
(33)我们不能因为某数据时final的就认为在编译时可以知道它的值
(34)定义为public,则可以被用于包之外,定义为static,则强调只有一份,定义为final,则说明它是一个常量
(35)必须在域的定义处获知每个构造器中用表达式对final进行赋值,这正是final域在使用前总是被初始化的原因所在
(36)应该让编译器和JVM去处理效率问题,只有在想要明确禁止覆盖时,才将方法设置为final的
(37)覆盖只有在某方法是基类的接口的一部分时才会出现
(38)初次使用之处也是static初始化发生之处
(39)对象中所有的基本类型都会被设为默认值,对象引用被设为null
(40)在基类构造器完成之后,实例变量按其次序被初始化
(41)当你设计一个系统时,应该认识到程序开发是一种增量过程
(42)如果将项目视作是一种有机的、进化着的生命体去培养,而不是打算像盖摩天大楼一样快速见效,就会获得更多的成功和更迅速的回馈
(43)构造器并不具有多态性,实际上是static方法,只不过该static声明是隐式的
(44)基类的构造器总是在导出类的构造过程中被调用,而且按照继承层次逐渐向上链接,以使每个基类的构造器都能得到调用
(45)使用引用计数来跟踪仍旧访问着共享对象的对象数量了
(46)用继承表达行为间的差异,并用字段表达状态上得变化
(47)更快的程序开发过程、更好的代码组织、更好扩展的程序以及更容易的代码维护
(48)接口和内部类为我们提供了一种将接口和实现分离的更加结构化的方法
(49)通用接口建立起一种基本形式,以此表示所有导出类的共同部分
(50)包含抽象方法的类叫抽象类,如果一个类包含一个或多个抽象方法,该类必须被限定为抽象的
(51)如果从一个抽象类继承,并想创建该新类的对象,那么就必须为基类中得所有抽象方法提供方法定义,如果不这样做,可以选择不做,那么导出类也便是抽象的
(52)抽象类还是很有用的重构工具
(53)接口只提供了形式,而未提供任何具体实现
(54)接口也可以包含域,但是这些域隐式地是static 和final的
(55)创建一个能够根据所传递的参数对象的不同而具有不同行为的方法,被称为策略设计模式。策略包含变好的部分,策略就是传递进去的参数对象,它包含要执行的代码
(56)如果要从一个非接口的类继承,那么只能从一个类去继承,其余的元素都必须是接口,需要将所有接口名都置于implements关键词之后,用逗号将它们一一隔开
(57)使用接口的核心原因,为了能够向上转型为多个基类型
(58)如果知道某事物应该成为一个类,那么第一选择应该是使它成为一个接口
(59)接口最吸引人的原因之一就是允许同一个接口具有多个不同的具体实现
(60)Readable没有用作java标准类库中其他任何方法的参数,它是单独为Scanner创建的
(61)你放入接口中得任何域都自动是static和final的,所有接口就成为了一种很便捷的用来创建常量组的工具
(62)java中标示具有常量初始化值的static final时,会使用大写字母的风格
(63)嵌套在另一个接口中的接口自动就是public的,而不能声明为private
(64)恰当的原则应该是优先选择类而不是接口