Agile Java读书笔记

来源:互联网 发布:软件测试工程师的前景 编辑:程序博客网 时间:2024/05/17 04:44

很惭愧,现在才开始读这本书。读《Agile Java》有点像读《Think in  Java》或者是《Core Java》的感觉。很基础的东西,从不同的方式来描述。看到很多没有注意到的Java基础,以下是看到第12章的读书笔记。

 

 

1、一个面向对象的系统更关心的是行为,而不是数据。

2、单一职责原则。

3、面向对象系统是系统是行为建模,行为通过发送消息产生作用,来改变对象。

4、分包的一个原则:分离用户接口类和标识业务逻辑的底层类。

5、在尽可能的保护您的代码,只要在必要的时候,放开访问的控制。

6、考虑到风格与组织,在源代码中您应该将所有的public方法移动到非public方法前面。

7、把方法设计成要么该表对象的状态,要么返回信息,不要两者都做。

8、对于工具类,除了把方法声明为static外,将其构造函数声明为private也是个好主意。

9、静态初始化代码块,JVM在加载这个类的时候会执行这个静态初始化代码块,但是要注意这个代码块是不能抛出异常的。

10、使用static修饰的变量称之为类变量,相反的称之为对象变量。

11、与实例变量一样,类变量也不应该直接暴漏给用户。

12、使用静态导入的原则:限制使用静态导入。会引起混淆。

13、最好是使用接口类型的变量,面向接口的编程。

14ArrayList拥有固定长度的容量,所以对于不频繁进行读写操作时,用这个比较合适;对于读写比较频繁的队列,使用LinkedList

15for each循环实际上是使用了迭代器,所以如果想用for each循环就必须让被迭代的元素实现Iteratable接口。

16java.util.Formatter类可以格式化输出一些字符串。

17java.util.logger类是Java提供的记录日志的类,不错,可以学习一下,结合log4j学习一下。

18、验证hashcode是否合理的方法:测试放置到hashtable的速度;测试hashcode的方差值,确定hashcode具有比较好的正态分布。

19BigDecimal可以表示任意精度的数字,多数应用在金融等行业。Floatdouble不能精确的表示数字。但是BigDecimal由于是用软件进行精度换算的,所以在性能上不太好,另外没有支持直接的加法等算术运算。BigDecimal在运算的时候是重新创建对象的,类似于String的特性。这个类提供了8中不同类型的舍入算法。

20、根据流传递数据格式的不同,可以将流划分为字节流和字符流。类名中带有WriterReader的为字符流;带有InputOutput的为字节流。字符流可以处理可见字符;而字节流可以处理非可见字符。

21DataoutputStream是一个过滤流,所谓过滤流就是说可以过滤性输出,比如只输出Boolean类型或其他某种类型。其他的过滤流还有:FilteredOutputStreamFilteredInputStreamFilterWriterFilterReader

22、管道流提供了在不同的线程间进行安全的基于IO的数据通讯。SequenceInputStream可以使一组输入流的行为如同一个单独的输入流一样;Pushback流可以将数据重新放到流中,仿佛没有读取一样。StreamTokenzer提供了解析流的功能。---------------------------------------这些流可以重新整理一下。

23、对象流。该技术使用的是对象的序列化技术,而序列化技术是RMI的基础,从而使EJB的基础。可以将一个对象映射为一串字节流。可以通过transient来跳过序列化一个对象

24、序列化后,将一个类持久化一个文件中。如果再再次读取这个类之前修改了类的定义,那么在读取的时候会抛出一个异常,因为在读取的时候JVM会教研读取类和现有类是否相兼容,修改任何一个属性、方法等都会导致不兼容,不过可以使用transient关键字来消除这种不兼容性。我们可以增加writerObjectreadObject来重写序列化格式。

25、内联类和静态内嵌类的区别:内联类不能被序列化,并且尽量不要让外部进行实例化。外部不可以访问内联类。静态内嵌类可以被序列化,并且可以让外部类来访问。所以使用静态内嵌类的原因要么是让外部对象可以访问,要么是为了可以序列化。静态内嵌类的示例为Map.Entry

26、建立索引的一种方法为:使用序列化文件开始的位置作为索引。特别是对于文件系统可以这样做,这样可以使用RandomAccessFileseek方法进行定位,然后进行读取。