標籤:回收 別名 作用 代碼 pos std zed 匹配 記憶體回收
簡單介紹
依舊記得當初學習C++的理想----開發遊戲外掛,記得在大學開發的第一款遊戲外掛是連連看,讀取地址資料,然後演算法匹配,類比單擊事件,當時被很多同學羨慕妒忌。
JAVA開發是2012年3月份開始開發Android後專註的,Java的學習是在大學完畢的,當時JAVA考試95分滿以為Java沒啥難的。後來從事android開發發現自己對java的理解不深。
內容
Java要點
| 要點 |
定義 |
描寫敘述 |
| 基礎資料型別 (Elementary Data Type) |
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、其他 |
|
| 引用 |
主要的變數類型僅僅有一Block Storage空間(分配在stack中), 而參考型別有兩Block Storage空間(一塊在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++的認識更加深刻了。
C++ Java要點記錄