无论什么知识,长时间不用,都会逐渐遗忘。
最近重看《thinking in Java》,记录一些自认为的学习要点如下:
一、所谓对象。封装、继承、多态,垃圾回收。
二、操作符。优先级,==和equals,短路逻辑,位操作,自动转型(向上)。
三、流程控制。尽量不要使用switch,如果确实需要,配合enum。foreach语法:数组和Iterable接口。
四、对象初始化和清理。常量域和静态域的初始化,类的加载和实例化,成员变量的默认值,局部变量必须初始化。finalize方法的误用。
五、访问权限。各种访问修饰符的含义,final修饰符的含义。
六、多态。动态绑定,里氏代换法则。
七、接口。多重继承,适配器模式。
八、内部类。嵌套类(static),内部类,局部内部类,匿名内部类,闭包和回调。内部类和外围类之间的关系。使用内部类实现多重继承。匿名内部类对方法参数的final限制。
九、集合框架。Collection和Map的体系结构,过时的HashTable,Vector、Stack,Collections工具类,UnspportedOperation和Fast Fail处理机制,散列和散列码。强引用、软引用、弱引用、虚引用。
十、异常。异常体系结构(继承体系,无接口),异常的自我描述(异常名称),try-catch-finally,异常捕获,异常链。
十一、字符串。不可变性,编译器的自动优化(StringBuilder,循环模式下注意陷阱),split方法对最后一个元素的处理,格式化(1.5之后),正则表达式(Pattern和Matcher)。
十二、泛型。泛型擦除,通配符边界。
十三、数组。多维数组,数组和ArrayList,Arrays工具类,数组与泛型(不支持泛型)。
十四、IO系统。体系结构,字节流和字符流,装饰模式(Buffered缓冲),RandomAccessFile。NIO,Channel和ByteBuffer,内存映射文件。对象序列化。
十五、枚举。单例性,私有化构造方法,添加域和方法,每个枚举实例都拥有自己的同名方法(实现不同)。EnumSet和EnumMap,前者的值和后者的key都只能来自同一个enum,位操作保证效率。
十六、注解。元注解(@Target,@Retention,@Documented),注解定义(value元素,default值),不支持继承,注解的处理(反射)。
十七、多线程。重点和难点。