【MIT软件构造】Static Checking & Mutability & Immutability

java检查

静态检查:在程序运行之前会自动发现该错误。
动态检查:执行代码后会自动发现该错误。
不检查:该语言根本无法帮助您找到错误。
(Collections.unmodifiableList的add()错误并不会被静态检查出来,而在运行时会抛出Unsupported­Operation­Exception报错)

静态方法

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,可能为可变类型

优势:节省内存
劣势:多个指针指向一个变量时可能造成意想不到的后果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值