1. 程式人生 > >C++ Java要點記錄

C++ Java要點記錄

都是 eem 垃圾 vector style hashtable 固定 class 類型

簡單介紹

依舊記得當初學習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 和#definetypedef是用來聲明類型別名的,在實際編寫代碼過程使用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++的認識更加深刻了。

C++ Java要點記錄