1. 程式人生 > >編譯型與解釋型、動態語言與靜態語言、強類型語言與弱類型語言的區別

編譯型與解釋型、動態語言與靜態語言、強類型語言與弱類型語言的區別

動態語言 動態 java語言 不同 編譯型 效率 編譯過程 .exe 檢查

(一)編譯型語言和解釋型語言

  首先我們區分這樣一個概念,編譯型語言和解釋型語言。我們編程用的都是高級型語言(寫匯編和機器語言的除外),計算機只理解和運行機器語言,所以必須把高級語言翻譯成機器語言計算機才能運行高級語言編寫的程序。翻譯方式有編譯和解釋。編譯需要一個專門的編譯過程,通過編譯系統把高級語言翻譯成機器語言,然後就可以直接運行*.exe文件了,如c/c++語言等都是典型的編譯型語言。

  解釋型語言則不同,解釋型語言在運行的時候才翻譯,專門有一個解釋器能將解釋型語言翻譯成機器語言,每個語句都是執行的時候才翻譯。這樣解釋型語言每執行一次就要翻譯一次,效率比較低。如VB、python語言。

  java是一種編譯型-解釋型語言,它同時具備了編譯型語言和解釋型語言的特征,追本溯源,其實java就是解釋型語言,它的編譯特征就是把*.java文件轉化為*.class文件,並不是像c一樣直接編譯成機器語言,而jvm對*.class文件的翻譯則是解釋型的。字節碼文件被加載到內存中去,讀出一條指令,翻譯一條,運行一條,這個過程是解釋型的,這個過程是java虛擬機完成的。java開發工具JDK提供了兩個很重要的命令來完成上面的編譯和解釋(翻譯)過程。兩個命令分別是java.exe和javac.exe,前者加載java類文件,並逐步對字節碼文件進行編譯,而另一個命令則對應了java語言的解釋(javac.exe)過程。在次序上,java語言是要先進行編譯的過程,接著解釋執行。

(二)動態語言與靜態語言

  動態語言在運行時才去做數據類型檢查,永遠不用指定數據類型,第一次賦值時會在內部記錄數據類型,如python、Ruby都是典型的動態語言。

  靜態語言在編譯的時候就會檢查,寫程序時要聲明數據類型,如c/c++,java都是靜態的。

(三)強類型語言與弱類型語言

  強類型的數據類型是不會變的,如果不經過強制轉換,那麽它就永遠是這個數據類型了。而弱類型的是數據類型可以被忽略的語言。

綜上如python就是一門動態解釋型的強類型定義語言,java就是一門靜態編譯型-解釋型的強類型定義語言。

編譯型與解釋型、動態語言與靜態語言、強類型語言與弱類型語言的區別