2010年6月18日 星期五

Java 語言的優勢 #2



直譯性
在直譯性語言方面最為人所知的就是BASIC語言了,Basic程式語言是一行一的執行,而不是先確認所有的語法邏輯是否正確後再執行,另外編譯性的語言就如同C/C++先將所有的程式碼編譯成執行環境平台的機械碼後電腦在一口氣執行這些機械碼。直譯與編譯性語言都各有其優缺點,Java語言則結合了編譯性與直譯性的優點,Java語言屬於編譯性(Compiler)先將所有的語言編成為位元碼(ByteCode),接著在將這些位元利用直譯的方式於JavaVM上面執行,雖然C/C++在編譯後也會產生類似的位元碼(Object Code)但是這些位元碼在不同的系統環境中就需要重新的編譯一次,例如從Unix環境轉換成Windows的環境就需重新編譯,
但是Java語言則不需要,因此Java程式可以輕易的具備跨平台的能 力。下圖為Java程式的運作流程,從中可以了解Java是如何利用直譯的方 式達到跨平台的能力。



Java 主要是執行於Jvm虛擬機器上,所以在編譯時只需轉換成JVM看的懂的JavaByteCode,其他不同平台之間執行的問題就全交給JVM在執行時期在做直譯的動作,將ByteCode轉換成不同平台的機械碼。而JavaByteCode就存在於編譯後的.class檔之中,以下範例為一個未經編與的Java程式碼與編譯後的JavaByteCode對照。


//Java 範例程式原始碼

public class Test {

int a;

int b;

public void sum(int x,int y){

int sum = x+y;

System.out.println("Sum = " + sum);

}

public static void main(String args[]){

Test testObject = new Test();

testObject.a = 10;

testObject.b = 20;

testObject.sum(testObject.a, testObject.b);

}

}



//經編譯後的Byte Code

public class Test

{

public Test()

{

0:aload_0

1:invokespecial #8

4:return

}

public void sum(int x, int y)

{

   0:iload_1

1:iload_2

2:iadd

3:istore_3

4:getstatic #16

7:new #22

10:dup

11:ldc1 #24

13:invokespecial #26

16:iload_3

17:invokevirtual #29

20:invokevirtual #33

23:invokevirtual #37

26:return

}

public static void main(String args[])

{

  0:new #1

3:dup

4:invokespecial #47

7:astore_1

8:aload_1

9:bipush 10

11:bipush 10

13:invokevirtual #48

16:return

}

}



※ 強韌性
Java 語法定義的相當嚴謹且明確,利用Java 語言所撰寫的程式相對的具有可靠度。另外
Java 也排除了容易造成錯誤的指標功能,並利用記憶體回收器(Garbage Collection)與例外
事件處理(Exception Handle),來提高Java 程式的強韌性。

※ 安全
Java 平台其主要的特性就是應用於網路及分散式系統的運算。所以安全性與穩定性為當
初建構Java 時最優先的考量,因此在預設權限存取情況下,Java 在網路上的程式沒有辦法存
取及修改本地端上的檔案與資料,這一相當安全的一項設計。當我們在本地端執行Java 程式
時,Java 平台就像是一層安全防護閘門,將任何企圖存取本地端檔案資料的動作阻絕掉,以
確保本地端資料不會遭到修改或外流。


--未完 待續


沒有留言:

張貼留言