本文僅以記錄 Java 與 C++ 不一樣之處,以備隨時查詢。java
Java 是一門編譯解釋型的語言,即它在運行的過程當中既須要編譯也須要解釋。以下圖表示的是 Java 程序運行機制: 函數
上圖中,*.java 是用 Java 程序設計語言編寫的源程序,經過 javac 命令編譯成 *.class 文件,在操做系統之上是由 Java 虛擬機來運行以 .class 爲結尾的文件。這裏的 class 文件在 Java 中稱之爲可執行類文件;或者對於虛擬機而言其實就是字節碼文件,也就是0、1代碼,即計算機可以直接讀懂的二進制代碼。spa
對於 Java 程序而言,(跟 C++ 同樣)也是從 main 函數開始執行,不過有很大不一樣。以一個例子來講明:操作系統
1 public class HelloWorld{ 2 3 public static void main(String[] args) { 4 System.out.println("Hello World!"); 5 } 6 7 }
該程序的執行要 Java 虛擬機來調用執行,即由 Java 虛擬機調用 HelloWorld 類中的 main 函數。做爲對外接口,類 HelloWorld 是要聲明爲 public (一個 Java 源文件最多隻能有一個聲明爲 public 的類,而該類就做爲該源文件對外的接口。而在該源文件中的其餘類則不能被其餘源文件的類調用,只能被同一源文件的類調用。);由於 Java 虛擬機要調用,因此 main 函數要聲明爲 public;另外,Java 虛擬機在執行 main 函數的時候沒必要建立對象(即經過 HelloWorld.main(args) 調用),因此該方法必須是 static 的。設計
這跟 C++ 在程序在編譯連接成可執行文件後,由操做系統加載並最後將程序指針指向 main 函數是徹底不同的。指針
在 Java 中,code
1. 除了 boolean,其餘基礎類型都是有符號的,不存在無符號的基礎數據類型;對象
2. 數據存儲順序默認是小端,這跟 C++ 默認是大端的不一樣;blog
2. char 是兩個字節大小的;繼承
3. float 變量初始化時,數值最後要加 f。
在 Java 中,(static 一樣能夠修飾 成員變量和成員函數)跟 C++ 不同的是能夠修飾靜態代碼塊,以下例:
1 class Person{ 2 public Person(){ 3 System.out.println("Constructor"); 4 } 5 static { 6 System.out.println("Static"); 7 } 8 private String name; 9 private int age; 10 } 11 12 public class Main { 13 14 public static void main(String[] args) { 15 new Person(); 16 } 17 18 }
上例中 static 靜態代碼塊會優先與構造函數執行。這種代碼塊能夠用來初始化。
在 Java 中,final 關鍵字有以下做用:
1. final 標記的類不能被繼承(C++ 經過將構造函數或析構函數設爲私有來達到);
2. final 標記的方法不能被覆寫;
3. final 標記的變量(成員變量或局部變量)即爲常量,只能賦值一次。
類中的成員變量或成員函數默認是 public 的(C++ 是 private 的);
類繼承默認也是 public 繼承(實際只有 public 繼承,不像 C++ 中還有 private、protected 繼承)。
《Java 程序設計教程(入門篇)》 徐翠娟等編。