effective java 笔记

 Sun 24 May 2020   In 编程   :)

part one

必要时,进行保护性拷贝

引用的不当使用可能会导致很多不容易发现的bug

String

  • concat operation 避免在循环中使用‘+’来连接字符串,因为string为不可变类,使用‘+’,实际上是创建了新的对象 使用StringBuilder来代替String
  • type String不适合代替其他类型。可以明确的类型尽量使用其他类型,而不是一味使用String(尽管String很通用)

最小化可变性

可变类对象增加了复杂度和出错可能性

不可变对象:

    比较简单,易于设计、实现和使用,不容易出错,更加safe
    在对象生命周期内固定不变,本质上线程安全,无需同步操作
    只有在特殊的极端情况下会导致性能问题(为不同的值创建不同的对象)
    声明所有域为私有的
    不提供任何修改对象的方法(setter),私有化构造器(有点类似于singleton的一种处理方式),提供静态方法
    保证类不会被扩展(final

使用标准类库

  • 省时省力,更加专注于应用程序的开发,而不是底层工作。 你做的工作越是常见,就越可能找到类库,直接调用。

  • 安全、高效 经过广泛的测试和应用,性能比较高,缺陷也比较少 站在巨人肩膀上

  • 学习的典范 类库是最好的学习例子,多用类库,可以融入主流,更容易和别人交流 了解新版本的feature,做到知道,然后才是使用

  • 熟悉常用类库,成为工具箱中的必备

java.lang
java.util
java.io
java.util.concurrent
第三方类库: Guava (google)
rt.java - java source code

* java.lang (important)
    基础类,fundamental of java
    反射、注解、引用等
    Object, which is the root of the class hierarchy, and Class, instances of which represent classes at run time
    wrapper classes Boolean, Character, Integer, Long, Float, and Double
    Math 
    String, StringBuffer, and StringBuilder
    ClassLoader, Process, ProcessBuilder, Runtime, SecurityManager, and System 
    Throwable


* java.util
    collections framework, legacy collection classes, event model, date and time facilities, internationalization, and miscellaneous utility classes (a string tokenizer, a random-number generator, and a bit array).
    List, Set, Map, Collection, Deque
    Arrays, Regex, Date, Calendar
    LocalDateTime(java.time)


* java.util.concurrent (important)
* java.util.concurrent.atomic
* java.util.concurrent.locks
    concurrent programming
* java.util.function
    lambda expressions and method references
* java.util.stream
* java.io
    system input and output through data streams, serialization and the file system
    passing a null argument to a constructor or method in any class or interface in this package will cause a NullPointerException to be thrown.
* java.nio

* java.math
    BigDecimal
    BigInteger