【第一章】
1. 类名是名词,遵循CamelCase命名法。
2. 接口可以是形容词和名词,但是假如是形容词的话,必须以able或ible结尾。
3. 函数名以小写开头,必须带有动词。
4. 成员变量名,必须是名词、小写、无前缀。
5. 泛型一般用T,键值对的话用<K,V>。
6. 常量全大写,词与词间下划线隔开。
7. 枚举型成员全大写。
8. 包名全小写可以含下划线。
9. 缩写的话,只有首字母是大写,其余全小写,例如Gps。
【第二章】
1. 普通注释为//、/* ... */。
2. Javadoc的注释是
/** ... */。
3. 关键词包括但不限于: synchronized, native, final, finally,
transient, volatile, default, instanceof, strictfp。
4. 变量名可以以$开头。
5. 调用String.intern()方法可以把一个字符串塞到字符串池中。
6. 回车符: MAC OS 9 之前是用
、MAC OS X以及Unix是用
、Windows用
。
【第三章】
1. Float.POSITIVE_INFINITY, Float.NEGATIVE_INFINITY, Float.Nan,
-0.0(接近0的很小的负数)
2. Double也有上面的成员。
3. 装箱类型: char<->Character、 boolean <-> Boolean、...。
【第四章】
1. 所有引用类型都是派生自java.lang.Object。
2. Annotation和枚举类型也是引用类型。
3. 数组很奇怪,如果没有赋初值,他的值默认是null(就算是局部变量也是的)。【第五章】
1. 继承用 extends
2. 接口用 implements
3. 支持重载(overload)
4. 支持越位(重写,override),但是有条件:父方法不能是 final,
private, static、重载受保护的方法不能加访问修饰符、重载之后访问权限不能变小、不能抛出新的Checked异常(这个明显违反OCP)
5. 支持可变的函数参数列表(...),用法类似C#的params。
6. 虚类和虚函数都要用abstract来修饰。
7. 静态初始化块(static initializers)和C#中的静态初始化构造函数差不多,但是区别是Java的一个类可以有多个。语法是static {...}
8. 枚举类型可以有成员变量,成员函数,和构造函数。
9. Annotations通过@interface关键字来定义,annotation可以有参数,但是参数类型只允许为基本类型、String、Class、枚举类型等,并且参数不能为空。(比较复杂,详见这篇文章:http://www.cnblogs.com/phoebus0501/archive/2011/02/21/1960077.html)
9. Annotations通过@interface关键字来定义,annotation可以有参数,但是参数类型只允许为基本类型、String、Class、枚举类型等,并且参数不能为空。(比较复杂,详见这篇文章:http://www.cnblogs.com/phoebus0501/archive/2011/02/21/1960077.html)
【第六章】
1. 增强的for循环:for (Item item : items) { ... }
2. assert的判断表达式和输出信息之间用冒号分隔: assert( expression : "说明出错的情况" );。
【第七章】
1. Checked异常,意思是在编译时就能check的。所以是函数签名的一部分(慎用)
2. Error不用于exception,他一般指致命错误,没必要try-catch了,比如OutOfMemory, StackOverflow, VirtualMachineError等。
3. try-catch-finally捕捉。
4. 自定义异常可以派生自Exception类。
5. 异常有一些成员函数:getMessage()、toString()、printStackTrace()。【第八章】
1. native关键字:JNI用的。用于和其他语言交互,比如C++。
2. staticfp关键字:遵循IEEE 754-1985 floating point标准。
3.
synchronized关键字:thread safe。
4.
transient关键字:表示该成员不能被序列化。
5. volative关键字:表示该成员的值不能被cache。
【第10章】
1. JAR是一个打包工具。
【第11章】
1. 各种GC: Serial、Parallel、Parallel Compacting、CMS、G1。
2. 显式调用GC: System.gc()、Runtime.getRuntime().gc()。3. 每个类都有一个finalize()方法,gc在回收前,会调用这个方法,但是这个不是保证的。
【第12章】
1. NIO: New IO,Java7里面又出现个NIO 2.0。
2. 序列化与反序列化,可以使用ObjectIn/OutputStream。
3. Zip/Unzip:ZipIn/OutputStream。
【第14章】
1. 多线程1: 继承Thread类,实现run()方法,实例化即可运行。
2. 多线程2: 继承Runnable接口,传给Thread的实例。
3. Thread有一些成员方法:getPriority(), getState(), isAlive(), join(), start(), isInterrupted(), notify(), wait(), activeCount(), sleep(), yield()。4. 线程池: ThreadPoolExecutor。
5. 并发容器: ConcurrentHashMap, CxxSkipListMap, CxxSkipListSet, CxxMap, CopyOnWriteArrayList, CopyOnWriteArraySet, PriorityBlockingQueue, BlockingDeque, BlockingQueue。
6. 同步原语: Semaphore, CountDownLatch, CyclicBarrer, Exchanger
【第15章】
1. 集合接口: List, Map, Queue, Set
2. 集合实现: ArrayList, LinkedList, Vector, HashMap, Hashtable, LinkedHashMap, TreeMap, PriorityQueue, HashSet, LinkedHashSet, TreeSet。
3. 集合方法: addAll(), max(), min(), reverse(), shuffle, copy, rotate, swap, fill, binarySearch, sort, fill, replaceAll() newSetFromMap()。
4. 比较器: Comparator接口。
【第16章】
1. 语法: interface List <E> extends Collection<E> {...}【第17章】
1. 运行脚本语言: new ScriptEngineManager().getEngineByExtension("js").eval("xxx");
2. 运行脚本语言中的函数: Invocable.invokeFunction("foo", params...);
3. Ruby也是可以执行的。
【第18章】
1. Jelly可以把XML变成可运行的java代码。
2. Spring是一个创建java程序的框架。
3. JGoodies是Java界面库。http://www.jgoodies.com
4. http://commons.apache.org/: 可重用的java组件。