对于静态检查和动态检查的理解
刚开始学这个地方的时候,并没有过多的在意。直到复习时,发现自己对于静态检查和动态检查的一些理解非常模糊。
让我们先来看一下基本概念。
静态类型检查的bug是在程序运行之前发现的。静态错误包括语法错误,类名,函数名错误,参数数目错误,返回值类型错误。我们使用的java就是静态类型检查的语言。
动态类型检查的bug是在执行程序时发现的。静态错误包括非法的参数值,非法的返回值,越界和空指针。python是动态类型检查的语言。
概念明白了,但是看到具体的例子,还是会产生疑惑。比如以下代码:
double p = 1 / 5; System.out.println(p);
1和5都是整型数,而p是浮点类型数,我会自然而然地以为他是静态错误。可是这段代码在eclipse上面,并不会报错,代码在执行时,做了类型转换。所以这是动态错误。
而java作为一个静态类型检查的语言,在运行时也不会报动态错误,比如说以下代码:
double sum = 7; double n = 0; double average = sum/n; System.out.println(average);
运行结果:
而动态类型检查的python,运行相似的代码:
sum = 7 n = 0 average = sum/n print(average)
运行结果:
出现了error。
静态类型检查的语言和动态类型检查的语言区别可见一斑。这个例子告诉我遇到知识点要多动手复现例子,而不是纸上谈兵。