Java與C++的區別簡記

簡介

       依然記得當初學習C++的理想----開發遊戲外掛,記得在大學開發的第一款遊戲外掛是連連看,讀取地址數據,然後算法匹配,模擬單擊事件,當時被許多同學羨慕嫉妒。

       JAVA開發是2012年3月份開始開發Android後專注的,Java的學習是在大學完成的,當時JAVA考試95分滿以爲Java沒啥難的,後來從事android開發發現自己對java的理解不深。

內容

Java要點

要點 定義 描述
基本數據類型 1、byte(8)
2、shot (16)
3、int(32)
4、long(64)
5、float(32)
6、double(62)
7、char(16)
8、boolean(1)
 
持有對象 Collection(接口)
 ->List(子接口 先後順序 可重複)    
  ->LinkedList (鏈表 不同步 線程不安全)               
  ->ArrayList (數組 不同步 線程不安全)                 
  ->Vector (數組 同步 線程安全)                      
   ->Stack
 ->Set  (子接口 只接收一次 內部排序)
 ->HashSet
  ->LinkedHashSet
 ->TreeSet

Map(接口 鍵值)
 ->Hashtable (同步 安全)                 
  ->LinkedHashMap (不同步 不安全)               
  ->WeakHashMap 
 ->TreeMap
 ->IdentifyHashMap 
Collection 是對象集合, Collection 有兩個子接口 List 和 Set 
List 可以通過下標 (1,2..) 來取得值,值可以重複 
而 Set 只能通過遊標來取值,並且值是不能重複的 
ArrayList , Vector , LinkedList 是 List 的實現類 
ArrayList 是線程不安全的, Vector 是線程安全的,這兩個類底層都是由數組實現的 
LinkedList 是線程不安全的,底層是由鏈表實現的   
Map 是鍵值對集合 
HashTable 和 HashMap 是 Map 的實現類   
HashTable 是線程安全的,不能存儲 null 值   
HashMap 不是線程安全的,可以存儲 null 值  
泛型 參數化類型,也就是說所操作的數據類型被指定爲一個參數。這種參數類型可以用在類、接口和方法的創建中,分別稱爲泛型類、泛型接口、泛型方法。 Java語言引入泛型的好處是安全簡單。 對應C++的是模塊
I/O系統 Java的I/O就是Java的輸入與輸出操作 抽象類InputStream和OutputStream是所有字節流的基類,它們分別提供了輸入和輸出處理的基本接口,並且分別實現了其中的某些方法.由於InputStream和OutputStream都是抽象類,所以不能直接創建它們的對象.InputStream類中所提供的方法主要有:從流中讀取數據,關閉流並且釋放與該流相關的系統資源和使用輸入流中的標記等.OutputStream類中所提供的方法主要有:輸出數據,更新輸出流和關閉流等.
涉及的類:
字節輸入流包括FileInputStream、BufferedInputStream和DateInputStream,
與之對應的字節輸出流包括FileOutputStream、BufferedOutputStream和DateOutputStream。
垃圾回收器 Java虛擬機(JVM)的三個重要模塊(另外兩個是解釋器和多線程機制)之一。 通過垃圾收集器(Garbage Collection,GC)自動管理內存的回收,程序員不需要通過調用函數來釋放內存。
初始化順序 1、靜態成員
2、靜態函數
3、靜態區
4、其它
 
引用 基本的變量類型只有一塊存儲空間(分配在stack中), 而引用類型有兩塊存儲空間(一塊在stack中,一塊在heap中), 方法形參的值傳遞(引用)是指形參和傳進來的參數指向同一個值的內存(heap)中; java是傳值還是傳引用?
基本類型是傳值
併發 多進程編程 Java提供底層的協調機制,以控制對共享資源的訪問。這裏的協調,包括競爭,合作和通信。
競爭:synchronized、lock
合作:notifyAll、interrupt、signalAll
通信:PipedReader / PipedWriter
     



C++要點

要點 定義 描述
typedef 和#define typedef是用來聲明類型別名的,在實際編寫代碼過程使用typedef往往是爲了增加代碼的可讀性。

#define是一個宏定義命令,用來定義一個常量(包括無參常量和有參常量),它本身並不在編譯過程中執行,而是在預處理階段就已經完成了,因此不作任何正確性檢查,只進行不關含義的字符串替換。
 
指針/智能指針 指針是一個指示器,它告訴程序在內存的哪塊區域可以找到數據。 智能指針實際上是一個棧對象,並非指針類型,在棧對象生命期即將結束時,智能指針通過析構函數釋放有它管理的堆內存。
std::auto_ptr、boost::scoped_ptr、boost::shared_ptr、boost::scoped_array、boost::shared_array、boost::weak_ptr、boost:: intrusive_ptr。
模板與泛型編 泛型編程就是以獨立於任何特定類型的方式編寫代碼,而模板是泛型編程的基礎。  
STL 容器 標準STL序列容器:vector、string、deque和list。
標準STL關聯容器:set、multiset、map和multimap。
非標準序列容器slist和rope。slist是一個單向鏈表,rope本質上是一“重型”string。
非標準的關聯容器hash_set、hase_multiset、hash_map和hash_multimap。
 
線程池 線程池的作用正是有效的降低頻繁創建銷燬線程所帶來的額外開銷。  
     


C++和Java的區別

要點 定義 描述
Java無指針    
Java不支持頭文件、Java不支持宏定義    
java是運行在JVM中的,並且是編譯成JVM可識別加載的.class,並不是完全編譯成計算機直接可執行的程序,C++ 程序直接可在計算機中執行。    
在C++和Java中都存在類引用,C++中是要明確指出的,顯性的;而Java中是隱形的。    
Java對每種數據類型都分配固定長度.    
類型轉換不同 在C和C++中,可通過指針進行任意的類型轉換,常常帶來不安全性,而在Java中,運行時系統對對象的處理要進行類型相容性檢查,以防止不安全的轉換.  
結構和聯合的處理 在C和C++中,結構和聯合的所有成員均爲公有,這就帶來了安全性問題,而在Java中根本就不包含結構和聯合,所有的內容都封裝在類裏面  
JAVA的應用在高層,C++在中間件和底層    
垃圾回收,c++用析構函數回收垃圾,java自動回收    
Java的對象都從堆中分配,C++的自動變量都是從棧裏面分配的    
總結

重新C++和Java複習要點,對java、C++的認識更加深刻了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章