对于静态检查和动态检查的理解

刚开始学这个地方的时候,并没有过多的在意。直到复习时,发现自己对于静态检查和动态检查的一些理解非常模糊。

让我们先来看一下基本概念。

静态类型检查的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。

静态类型检查的语言和动态类型检查的语言区别可见一斑。这个例子告诉我遇到知识点要多动手复现例子,而不是纸上谈兵。

posted @ 2022-06-10 16:21  小兔巴尼  阅读(732)  评论(0编辑  收藏  举报