动静之异

我是做Java的,是做.Net的,这两者最大的共同点就是编译期的类型检查。

某个特定类中,如果没有声明这个方法,你就不能够调用。

这种语言可以统称为静态语言。

相对的就是动态语言,例如Python,Ruby,Js。

下面是一段Python代码,如果是坚定的Java语言支持者的话,肯定会对之嗤之以鼻。

class Complex:
     def __init__(self, realpart, imagpart):
         self.r = realpart
         self.i = imagpart
 
x = Complex(3.0, -4.5)
x.max = 12
print x.r, x.i
print x.max 
Complex这个类中根本就没有max这个属性,怎么可以随意的赋值,况且类型是什么? 

好了,这就是核心点了。

简单的分析一下它们的内存模型。

Java语言中,当创建一个对象的时候,首先会根据类型分配一定大小的内存空间,

这个空间的什么位置存储的属性,什么位置存储的方法,都是固定的,

然后我们最后得到的这块内存的4字节的引用。通过这个引用我们可以调用任意的方法属性,

但是我们没有办法改变内存的分配格局,也不能让这个引用再指向另一块内存。

但是,动态语言就不一样了。

x = Complex(3.0, -4.5)这行代码给x分配了一块内存,

x.max又会分配一块内存,动态语言实际上就是内存的动态分配。 

好了,明白这一点,也就明白了为什么静态语言中不能那么的自由了。

posted on 2007-09-12 21:52  Game_over  阅读(462)  评论(0)    收藏  举报