3-1
抽象数据类型的好处:将存储和操作分开。
写程序的时候要符合变量命名要求
数据类型对比
String a="ssd";
String b=a;
b并没有获得a的引用,所以a和b是独立的.
java实现层次性的方式:继承 实现
Boxed primitives: Boolean,Integer。。。。万不得已不要用
java有操作符类型的重载,如两个字符串相加,但是不允许用户定义操作符重载.
类型检查:java在编译阶段就开始进行类型检查.
1.静态检查
2.动态检查
另一个不可变性:final,final指的是变量的值不可改变,或者引用不可改变,这就意味着例如List的添加操作这种不会改变引用的操作是可以进行的.
final int n=5;
n=6;//错误
final List a=[1,2];
final List b=[2,3];
a=b;//错误
a.add(3);//正确
对final总结:{
final 修饰方法,方法不可以被重写
final修饰类,类不能被继承
final修饰的成员变量在构造函数中可以改变
}
snapshot diagram
immutable传递变量的时候传递的是值,而mutable传递的是引用。为了安全要尽量多用immutable。
集合框架存储的是对象数据类型
null不允许赋值给基本数据类型,可以给对象数据类型
尽量不用null
Map的get()失败的时候返回null
3-2 规约
precondition 前置条件 postcondition 后置条件
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;
}
}
`