FAQ

 

C語言和C++語言有何不同?

C語言被稱為程式之母,因為目前世界上有過半的程式都是由C所寫成的。你可能對C語言的歷史沒什麼興趣,但是你必須知道,目前網路上主機使用的UNIX作業系統,就是用C語言寫出來的,由於C語言的快速、能在各作業系統中順利移植(術語叫可攜性),所以便成為目前程式設計的主流。

C++語言則是引進了物件導向的觀念,讓C語言的發展的更成熟,C語言和C++語言兩者雖然相似,但是在寫作的觀念上卻不盡相同,不過目前大多數的編譯程式都能同時支援這兩種語言。

由於C與C++的成功,也促成了Java語言的發展,其實,這三個程式語言根本是一脈相承的程式語言,也可以說是當今資訊界的主流派。

(取自:PC123電腦學習網)

舉例來說,寫一個Hello World,C與C++的差別如下:

C C++
#include <stdio.h>

int main() {

   printf("Hello! World!\n");

   system("pause");

   return 0;

}

#include <iostream>

using namespace std;

int main() {

   cout << "Hello! World!" << endl;

   system("pause");

   return 0;

}

C++語言和JAVA語言有何不同?

C++ Java
和C語言兼容,除了一些比較少見的情況 沒有對任何之前的語言向前兼容.但在語法上受 C/C++ 的影響很大
一次編寫到處編譯 一次編寫到處運行
允許過程編程和物件導向編程 鼓勵物件導向的編程方式
允許直接調用原生的系統庫 要通過JNI(en:Java Native Interface)調用, 或者 JNA(en:Java Native Access)
能直接使用底層系統介面 在一個保護模式下的虛擬機中運行
只提供對象的類型和類型名 是反射的, 允許元編程和運行時的動態生成代碼
有多種二進制兼容標準 (例如:微軟和Itanium/GNU) 一種二進制兼容標準,允許運行時庫的正確性檢查
可選的自動邊界檢查. (例如: vector 和 string 這兩個容器的 at() 方法) 一般都有做邊界檢查. HotSpot (java)(Sun 的虛擬機實現) 可以去掉邊界檢查.
支持原生的無符號數學運算 不支持原生的無符號數學運算
對所有的數字類型有標準的範圍限制,但位元組長度是跟實現相關的. 標準化的類型可以用 typdef 定義 (uint8_t, ..., uintptr_t). 在所有平台上對所有的基本類型都有標準的範圍限制和位元組長度.
支持指針,引用,值傳遞 基本類型總是使用值傳遞. 對象以可以為空的引用的方式傳遞 (相當於在C++里使用指向 class 或者 struct 參數的指針).[1]
顯式的內存管理,但有第三方的框架可以提供垃圾搜集的支持. 支持析構函數. 自動垃圾搜集(可以手動觸發).沒有析構函數的概念,對 finalize() 的使用是不推薦的.
支持類,結構,聯合,可以在堆或者棧里為它們動態分配內存. 只支持類,只在堆中為對象分配內存.Java SE 6在棧為一些對象分配內存的使用了逃逸分析(en:escape analysis)的優化方法.
允許顯式的覆蓋(也叫重寫)類型 嚴格的類型安全(en:type safety),除了變寬的類型轉換. Java 1.5 開始支持自動類型包裝和解包裝(Autoboxing/Unboxing).
C++標準庫包括:語言支持,診斷工具,常用工具,字元串,本地化,容器,演算法,迭代器,數值,輸入/輸出,C標準庫. Boost庫提供了更多的功能,包括執行緒和網路I/O.使用者必須在一大堆(大部分互相不兼容)第三方GUI或者其他功能庫中進行選擇. 標準庫在每次 Java 發布新版本的時候都會更新並增強功能. 1.6版本支持:本地化,logging,容器和迭代器,演算法,GUI 編程(但沒有用到系統的GUI),圖形,多執行緒,網路,平台安全,自省機制,動態類載入,阻塞和非阻塞的I/O,對於XML,XSLT,MIDI也提供了相關介面或者支持類,資料庫,命名服務(例如 LDAP),密碼學,安全服務(例如 Kerberos),列印服務,WEB 服務.SWT 提供了一個系統相關的GUI的抽象.
對大部分的操作符都可以進行操作符重載(en:Operator overloading) 操作符的意義一般來說是不可變的,例外是 + 和 += 操作符被字元串重載了.
完全的多重繼承,包括虛擬繼承 類只允許單繼承,需要多繼承的情況要使用介面.
支持編譯期模板 泛型(en:Generics in Java)被用來達到和C++模板類似的效果,但由於類型消除(en:Type Erasure)它們不能在編譯期間從代碼被編譯成位元組碼.
支持函數指針,函數對象,lambda(在 C++0x)和介面 沒有函數指針機制.替代的概念是介面,Adapter 和 Listener也是被廣泛使用的.
沒有標準的代碼內嵌文檔機制. 不過有第三方的軟體(例如 Doxygen). Javadoc 標準文檔生成系統.
const 關鍵字用來定義不可改變的常量和成員函數 final 提供了一個限制版本的 const, 等價於 type* const 的對象指針或者 const的基本類型數據. 沒有 const 成員函數, 也沒有const type* 指針的等價物.
支持 goto 語句. 支持循環標籤(label)和語句塊.
原始碼可以寫成平台無關的 (可以被 Windows, BSD, Linux, Mac OS X, Solaris 等編譯, 不用修改) ,也可以寫成利用平台特有的特性. 通常被編譯成原生的機器碼. 被編譯成Java虛擬機的位元組碼. 和Java平台相關,但是原始碼一般來說是不依賴作業系統特有的特性的.

 

參考维基百科:比較Java和C++

舉例來說,寫一個Hello World,C、C++與JAVA的差別如下:

C C++ JAVA
#include <stdio.h>

int main() {

   printf("Hello! World!\n");

   return 0;

}

#include <iostream>

using namespace std;

int main() {

   cout << "Hello! World!" << endl;

   return 0;

}

public class FirstJava {

   public static void main(String[] argv) {

      System.out.println("Hello! World!");

   }

}

 

JAVA SDK

要建立Java開發環境,離不開Sun的JAVA2 SDK。

1998年12月Sun公司發佈了Java Software Development Kit(簡稱JAVA2 SDK),目前的最新版本是J2sdk-1.4.2.05。

可在http://Java.sun.com下載。根據運行平臺的不同,下載相應的版本並設置好PATH和CLASSPATH。

這個套裝軟體提供了Java編譯器、Java解釋器,但沒有提供Java編輯器,因此需要使用者自己選擇一個方便易用的編輯器或集成開發工具。

初學者適用的Java開發工具。

一 UltraEdit

UltraEdit
是共用軟體,它的官方網址是:www.ultraedit.com。最新版本是V10.20b。它是一個功能強大的文本、HTML、程式源代碼編輯器。作為源代碼編輯器,它的默認配置可以對C/C++, VB, HTML, Java和 Perl進行語法著色。用它設計Java程式時,可以對Java的關鍵字進行識別並著色,方便了Java程式設計。它具有完備的複製、粘貼、剪切、查找、替換、格式控制等編輯功能。可以在Advanced功能表的Tool Configuration 功能表項配置好Java的編譯器Javac和解釋器Java,直接編譯運行Java程式。

配置Javac:在Command Line�媬擗J:D:\JSP\j2sdk\bin\Javac %f,這��Javac的路徑要根據JDK的實際安裝路徑來指定,%f是指當前活動文檔的全檔案名。在Menu Item Name �媬擗JJavac ,它顯示在Advanced功能表�堙A這樣就可以直接執行它進行編譯了。選中Output To List Box和Capture Output ,這樣就可以在源代碼下面的輸出視窗�堿搢儠s譯時的錯誤資訊了。配置不帶參數運行的解釋器Java:在Command Line�媬擗J:D:\JSP\j2sdk\bin

Java %n
,在Menu Item Name �媬擗J: Java filename,選中Output To List Box和Capture Output ,運行結果顯示在輸出視窗�堙C配置帶參數運行的解釋器Java:在Command Line�媬擗J:d:\JSP\j2sdk\bin\Java %n%modify%,在Menu Item Name �媬擗J:Java filename parameter,這樣當執行這個功能表項的時候,會顯示一個要求輸入參數的對話方塊。

二 Editplus

EditPlus
是共用軟體,它的官方網址是:www.editplus.com。最新版本是EditPlus 2.12。EditPlus也是功能很全面的文本、HTML、程式源代碼編輯器。默認的支持HTML、CSS、PHP、ASP、Perl、C/C++、Java、javascript和VBScript的語法著色。通過定制語法檔還可以擴展到其他程式語言。可以在Tools功能表的Configure User Tools功能表項配置用戶工具,類似於UltraEdit的配置,配置好Java的編譯器Javac和解釋器Java後,通過EditPlus的功能表可以直接編譯執行Java程式。

三 Jcreator

Jcreator
是一個用於Java程式設計的集成開發環境,具有編輯、調試、運行Java程式的功能。官方網址是:www.jcreator.com。當前最新版本是Jcreator 3.10,它又分為LE和Pro版本。LE版本功能上受到一些限制,是免費版本。Pro版本功能最全,但這個版本是一個共用軟體。這個軟體比較小巧,對硬體要求不是很高,完全用C++寫的,速度快、效率高。具有語法著色、代碼自動完成、代碼參數提示、工程嚮導、類嚮導等功能。第一次啟動時提示設置Java JDK主目錄及JDK JavaDoc目錄,軟體自動設置好類路徑、編譯器及解釋器路徑,還可以在幫助功能表中使用JDK Help。但目前這個版本對中文支持性不好。

四 Eclipse

Eclipse
是一個開放可擴展的集成開發環境(IDE)。它不僅可以用於Java的開發,通過開發插件,它可以構建其他的開發工具。Eclipse是開放源代碼的項目,並可以免費下載。它的官方網址是:www.eclipse.org 。它的官方網站提供Releases、Stable Builds、Integration Builds和Nightly Builds下載。建議使用Releases或Stable Builds版本。

Releases
版本是Eclipse開發團隊發佈的主要發行版本,是經過測試的穩定的版本,適合要求穩定而不需要最新改進功能的使用者選擇。目前最新的Release版本是Eclipse 3.0。Stable Builds版本是對大多數使用者足夠穩定的版本,由開發團隊將認為比較穩定的Integration Build版本提升到Stable Build而來,適合想使用Eclipse新功能的使用者選擇。對於Releases版本2.1.x,在Eclipse的官方網站上有一個語言包可以下載,這樣Eclipse及其幫助都是簡體中文的。用於Java開發,Eclipse與UltraEdit和Editplus兩種編輯器和Jcreator IDE比較,Eclipse更專業,功能更強大。

(參考資料:<Java IDE:Java初學者常用開發工具介紹>)

五 jbuilder

六 myeclipse

七 netbeans

Gel

TextPad

EditPlus

JAVA常用IDE比較

Java IDE Comparison

Eclipse安裝手記Part I