java 学习

1.多态对静态方法不管用,静态方法调用取决于调用者
2.super.getClass() //当前类
  getClass().getSuperClass() //父类
3.子类的构造过程中,必须 调用其父类的构造方法
如果子类的构造方法中没有显示的调用基类构造方法,则系统默认调用基类无参数的构造方法
4 static方法 仅能调用其他的 static 方法
只能访问 static 变量.
不能以任何方式引用 this 或 super
不能被覆盖
静态类,只能用于嵌套类内部类中
5 Java对异常进行了分类,所有异常的根类为java.lang.Throwable
Throwable下面又派生了两个子类:Error和Exception
Runtime 异常也称为unchecked异常;Checked exception 是在编译阶段的异常,并且强制检查,编译器强制 checked 异常必须try..catch处理或用throws声明继续抛给上层调用方法处理
6 先执行try或catch里里面的代码,然后再执行finally,再执行try或catch里面的return
7
PrintStreamst = new PrintStream(new FileOutputStream("output.txt"));
System.setErr(st);
System.setOut(st);
8 方法中的局部变量使用 final 修饰后, 放在堆中, 而不是栈中

Vector与Hashtable是旧的, 是java一诞生就提供了的, 它们是线程安全的, ArrayList与HashMap是java2时才提供的, 它们是线程不安全的
Vector增长原来的一倍,ArrayList增加原来的0.5倍. Vector 线程安全, ArrayList 不是
有HashMap可以让你将空值null作为一个表的条目的key或value. 但是 HashTable 不允许
HashMap最多只允许一条记录的键为null, 不允许多条记录的值为null. HashMap不支持线程的同步, 如果需要同步, 可以用Collections.synchronizedMap(HashMap map)方法使HashMap具有同步的能力. Hashtable与HashMap类似, 不同的是: 它不允许记录的键或者值为空; 它支持线程的同步
LinkedHashMap保存了记录的插入顺序
TreeMap能够把它保存的记录根据键排序, 默认是按升序排序, 也可以指定排序的比较器. 当用Iteraor遍历TreeMap时, 得到的记录是排过序的. TreeMap的键和值都不能为空
不想serialization 用transient 关键字

StringBuilder 比 StringBuffer 快
当需要保证线程安全的时候用 StringBuffer
StringBuffer 是 synchronized, StringBuilder 不是
  String 类是 final 类不可以被继承

数组不能直接指定列数或者行数

JAVA中实现serialization主要靠两个类:
ObjectOuputStream
ObjectInputStream
Serializable 接口是一个空接口. 所以我们不实现它的任何方法

   servelet3 初始化 META-INF/services/javax.servlet.ServletContainerInitializer

//打印所有 XX 参数及值
-XX:+PrintFlagsFinal and -XX:+PrintFlagsInitial
java -server -XX:+UnlockExperimentalVMOptions -XX:+UnlockDiagnosticVMOptions -XX:+PrintFlagsFinal Benchmark

-XX:+PrintCommandLineFlags
//参数分类和即时(JIT)编译器诊断
http://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html
java -server -XX:+PrintCompilation Benchmark
- XX:+CITime,我们可以在 JVM 关闭时得到各种编译的统计信息

-Xms and -Xmx (or: -XX:InitialHeapSize and -XX:MaxHeapSize)
-XX:NewSize and -XX:MaxNewSize  // 新生代大小 -XX:MaxNewSize 最大可以设置为 - Xmx/2。