標籤:
因為各種原因,計劃學習Java。自己已經做.NET開發幾乎10年了,把語言層級的東西擼一遍估計不難。由於.NET和Java的相似性,準備比較著.NET/C#來學,一來自己容易理解,同時也鞏固下.NET的知識。選擇的參考書是《Java核心技術》。
第一個程式
第一個程式,hello world,代碼很簡單,更重要的是看清楚代碼執行的原理。
先從C#開始,建立檔案FirstSample.cs,寫入以下代碼並儲存:
using System;public class FirstSample{ public static void Main(string[] args) { Console.WriteLine("Hello C# World!"); }}
HelloWorld的代碼總是很簡單的,接下去可以編譯了。開啟一個shell視窗,定位到FirstSample.cs的同級目錄,敲入
csc FirstSample.cs
同級目錄下會產生一個新的檔案,FirstSample.exe,直接執行,就可以在shell視窗看到“Hello C# World!”字樣了。
Java的Hello World會非常類似,首先,建立檔案FirstSample.java,寫入代碼:
public class FirstSample{ public static void main(String[] args) { System.out.println("Hello Java World!"); }}
接下去同樣是編譯。開啟shell視窗,定位到FirstSample.java的同級目錄,敲入
javac FirstSample.java
同級目錄下同樣產生一個新的檔案,FirstSample.class。跟C#不一樣,這個不能直接執行,繼續在shell視窗敲入
java FirstSample
成功執行後,在shell視窗看到“Hello Java World!”
發生了什嗎?
Java和.NET的工作原理,都是把原始碼編譯成中繼語言(bytecode和IL),然後由虛擬機器(JVM和CLR)編譯為native code。老生常談的內容,這裡不多說。這裡想談談我對Java和.NET工作原理的理解。
想要執行中繼語言,首先得啟動JVM/CLR,所謂的啟動,實際上是在OS上建立進程,然後把JVM/CLR host到該進程上。
回顧兩個hello world,C#編譯成的exe,執行的時候實際上做了這麼些事情:建立一個新的進程,在進程上host一個CLR執行個體,把IL code載入到CLR裡,然後開始由執行IL code。
Java的其實類似,只不過host JVM的進程是有java.exe(而不是FirstSample.class)建立。
到這裡第一天的學習結束,接下去準備看資料類型。
.NET碼農學Java - 1. 起步