静态检查和动态检查
静态检查
- 语法错误
- 例如多余的标点符号或者错误的关键词。即使在动态类型的语言例如Python中也会做这种检查:如果你有一个多余的缩进,在运行之前就能发现它。
- 错误的名字
- 例如Math.sine(2). (应该是 sin.)
- 参数个数不对
- 例如 Math.sin(30, 20).
- 参数类型不对
- 例如Math.sin(“30”).
- 错误的返回类型
- 例如一个声明返回int类型函数return “30”;
动态检查
- 非法变量名
- 例如整型变量x、y,表达式x/y 只有在运行后y为0才会报错,否则就是正确的。
- 无法表示的返回值
- 例如最后得到的返回值无法用声明的类型来表示。
- 越界访问
- 例如在一个字符串中使用一个负数索引。
- 使用一个null对象解引用
二者的区别
静态检查倾向于类型错误 ,即与特定的值无关的错误。
- 正如上面提到过的,一个类型是一系列值的集合,而静态类型就是保证变量的值在这个集合中,但是在运行前我们可能不会知道这个值的结果到底是多少。所以如果一个错误必须要特定的值来“触发”(例如除零错误和越界访问),编译器是不会在编译的时候报错的。