java检查
静态检查:在程序运行之前会自动发现该错误。
动态检查:执行代码后会自动发现该错误。
不检查:该语言根本无法帮助您找到错误。
(Collections.unmodifiableList的add()错误并不会被静态检查出来,而在运行时会抛出UnsupportedOperationException报错)
静态方法
public class Hailstone {
/**
* Compute a hailstone sequence.
* @param n Starting number for sequence. Assumes n > 0.
* @return hailstone sequence starting with n and ending with 1.
*/
public static List<Integer> hailstoneSequence(int n) {
List<Integer> list = new ArrayList<Integer>();
while (n != 1) {
list.add(n);
if (n % 2 == 0) {
n = n / 2;
} else {
n = 3 * n + 1;
}
}
list.add(n);
return list;
}
}
静态方法用类名调用,而不是对象名,软件构造时少用
Hailstone.hailstoneSequence(83)
关键词final
final修饰的变量指针指向不能改变(java变量均类似于指针)
final int n = 5;
软件构造时尽可能多地用final修饰方法参数与局部变量
不可变类型
String s = "a";
s = s.concat("b"); // s+="b" and s=s+"b" also mean the same thing
将s的值改变后s的指向也变了,即并不在原地址处改变变量值,这种变量称为不可变变量。下图为snapshot:
基础类型如int等均为不可变变量
优势:安全
劣势:内存浪费
可变类型
StringBuilder sb = new StringBuilder("a");
sb.append("b");
将sb的值改变,sb指向仍然指向原处,原地址的值变了,这种类型称为可变变量。下图为snapshot:
引用变量如int[]等看API,可能为可变类型
优势:节省内存
劣势:多个指针指向一个变量时可能造成意想不到的后果