什麼是動態語言?
動態語言,是指程序在運行時可以改變其結構:新的函數可以被引進,已有的函數可以被刪除等在結構上的變化。比如JavaScript便是一個典型的動態語言。
除此之外如Ruby、Python、OC等也都屬於動態語言,而C、C++、Java等語言則不屬於動態語言。
動態類型語言,就是類型的檢查是在運行時做的,是不是合法的要到運行時才判斷,例如JavaScript就沒有編譯錯誤,只要運行錯誤。
JavaScript改變結構小例子:
aAll[0].οnclick=function(){
//通過重新賦類名,達到顯示隱藏菜單的效果
if(oArt.className=='no_circle'){
oArt.className='yes_circle'
}else{
oArt.className='no_circle'
}
}
}
靜態語言
而靜態類型語言的類型判斷是在運行前判斷(如編譯階段),比如java就是靜態類型語言,靜態類型語言爲了達到動態會採取一些類型鑑別手段,如繼承、接口,而動態類型語言卻不需要,
靜態類型語言的主要優點:
在於其結構非常規範,便於調試,方便類型安全;
缺點:
是爲此需要寫更多的類型相關代碼,導致不便於閱讀、不清晰明瞭。動態類型語言的優點在於方便閱讀,不需要寫非常多的類型相關的代碼;缺點自然就是不方便調試,命名不規範時會造成讀不懂,不利於理解等。
爲什麼Java可以稱之爲"準動態語言"?
體現在以下幾個方面:
1.反射機制
2.動態編譯
3.動態執行javascript代碼
4.動態字節碼操作
5.動態轉換類型
Java的反射機制被視爲Java爲準動態語言的主要的一個關鍵性質,這個機制允許程序在運行時透過反射取得任何一個已知名稱的class的內部信息,包括:
正在運行中的類的屬性信息,正在運行中的類的方法信息,正在運行中的類的構造信息,正在運行中的類的訪問修飾符,註解等等。
動態語言無時不刻在體現動態性,而靜態語言也在通過其他方法來趨近於去彌補靜態語言的缺陷。
原文鏈接: https://blog.csdn.net/agonie201218/article/details/56851844