工欲善其事必先利其器! java
再快不能快基礎,再爛不能爛語言! 程序員
第一章 Java程序設計概述
Java「白皮書」的關鍵術語
1. 簡單性 2. 面向對象 3. 分佈式 4. 健壯性
5.安全性 6. 體系結構中立 7. 可移植性 8. 解釋性
9. 高性能 10. 多線程 11. 動態性
複製代碼
Java語言的發展情況
版本 |
年份 |
語言新特性 |
類與接口的數量 |
1.0 |
1996 |
語言自己 |
211 |
1.1 |
1997 |
內部類 |
477 |
1.2 |
1998 |
strictfp修飾符 |
1524 |
1.3 |
2000 |
無 |
1840 |
1.4 |
2002 |
斷言 |
1524 |
5.0 |
2005 |
泛型類,「for eash」循環,可變元參數,
自動裝箱,元數據,枚舉,靜態導入 |
3279 |
6 |
2006 |
無 |
3793 |
7 |
2011 |
基於字符串的switch,鑽石操做符,
二進制字面亮,異常處理改進 |
4024 |
8 |
2014 |
lambda表達式,包含默認方法的接口,
流和日期/時間庫 |
4240 |
第2章 Java程序設計環境
- JDK(Java Development Kit)-編寫java程序的程序員使用的軟件
- JRE(Java Runtion Envionment)-運行java程序的用戶使用的軟件
- SDK(Software Development Kit)-一個過期的術語,用於描述(1998-2006)之間的JDK
- SE-用於桌面或簡單服務器應用的java平臺
- EE-用於複雜服務器應用的java平臺
- ME-用於手機和其餘小型設備的java平臺
第3章 Java的基本程序設計結構
3.1 一個簡單的Java應用程序
- Java區分大小寫
- 關鍵字class代表java程序中的所有內容都包含在類中。類做爲一個加載程序邏輯的容器,程序邏輯定義了應用程序的行爲。
- 類名必須是以大寫字母開頭的名詞。若是字母有多個單詞組成,每一個單詞的第一個字母都應該大寫(駝峯命名法)。
- 在類的源文件中必須有一個main方法。
- 在javaSE1.4及之後的版本中強制main方法是public的。
- java中的main方法必須是靜態的。
3.3 數據類型
- java是一種強類型的語言,必須爲每個變量聲明一種類型。
- java沒有任何無符號的類型。
- float類型的數值有一個後綴F或f(例如:3.14F)。沒有後綴F的浮點數值(例如:3.14)默認爲double類型,也能夠在浮點數值後面添加後綴D或d(例如:3.14D)。
- 浮點型數值不適用於沒法接受舍入偏差的金融計算中,建議使用BigDecimal。
- 聲明一個變量後,必須用賦值語句對變量進行顯式初始化。
- 關鍵字final表示這個常量只能被賦值一次,一旦被賦值以後,就不能再改了。常量名使用全大寫。
- 可使用equals方法檢測兩個字符串是否相等,必定不要用== 檢測兩個字符串是否相等!這個只能肯定兩個字符串是否放在同一個位置上(內存地址)。
- 在jdk5.0中引入StringBuilder類。這個類的前身是StringBuffer,其效率有點低,但容許採用多線程的方式執行添加或刪除字符的操做。
- 每個以%字符開始的格式說明符均可以用相應的參數替換,其中f表示浮點數,s表示字符串,d表示十進制整數。
- 塊(即複合語句)是指由一對大括號括起來的若干條簡單的java語句。塊肯定類變量的做用域。一個塊能夠嵌套在另外一個塊中。
- 若是在case分支語句中的末尾沒有break語句,那麼就會接着執行下一個case分支語句。這種狀況至關危險,經常會引起錯誤。
- BigIntger類實現類任意精度的整數運算,BigDecimal實現了任意任務精度的浮點數運算,靜態的valueOf方法能夠將普通的數值轉換成大數值!
- add(加)
- subtract(減)
- multiply(乘)
- divide(除)
- 若是建立了一個100個元素的數組,而且視圖訪問元素a [ 100 ] (或任何在0~99以外的下標),程序就會引起「array index out of bounds」異常而終止。
第4章
4.1 面向對象程序設計概述
- 面向對象程序設計(OOP)是由對象組成的,每一個對象包含對用戶公開的特定功能部分和隱藏的實現部分。程序中不少對象來自標準庫,還有一些是自定義的。
- java是徹底面向對象的。
- 類
-
類(class)是構造對象的模版或藍圖。編程
-
由類構造對象的過程稱爲建立類的實例。數組
-
封裝(有時稱爲數據隱藏): 封裝是將數據和行爲組合在一個包裏,並對對象的使用者隱藏了數據的實現方式。安全
實現 封裝 的關鍵在於絕對不能讓類中的方法直接地訪問其餘類的實例域,程序僅經過對象的方法與對象數據進行交互。服務器
-
對象中的數據稱爲實例域。多線程
-
操縱數據的過程稱爲方法。併發
-
對於每一個特定類實例(對象)都有一組特別的實例域值。這些值的集合就是這個對象的狀態。分佈式
-
OOP的另外一個原則會讓用戶自定義java類變得垂手可得:經過擴展一個類來創建另外一個新的類。擴展後的新類具備所擴展的類的所有熟悉和方法。擴展一個類的過程稱爲繼承。ide
- 對象
- 對象的三個主要特徵:
- 對象的行爲: 對象的行爲是用可調用的方法定義的。
- 對象的狀態: 描述當前特徵的信息。對象的狀態必須經過調用方法實現。
- 對象標識: 每一個對象都有一個惟一的身份。 就算是兩個數據一摸同樣的對象也有不一樣之處。 做爲一個類的實例,每一個對象的標識永遠是不一樣的,狀態經常也存在着差別。
- 類之間的關係
- 依賴(「uses-a」): 若是一個類的方法操做另外一個類的對象,咱們就說一個類依賴於另外一個類。應該儘量地將相互依賴的類減至最少,也就是低耦合。
- 聚合(「has-a」): 一個類中包含另外一個類的對象。也稱爲「關聯」。
- 繼承(「」is-a): 在一個類的基礎上擴展一個新類。
4.2 使用預約義類
4.3 用戶自定義類
- 構造器與類同名。在構造對象時,構造器會運行並將實例域初始化。
- 構造器:
- 構造器與類同名
- 每一個類能夠有一個以上的構造器
- 構造器能夠有0個,1個或多個參數。
- 構造器沒有返回值。
- 構造器老是伴隨着new操做一塊兒調用
- 構造器中不能定義與實例域重名的局部變量。
- 全部的java對象都是在堆中建立的。
- 普通方法中的第一個參數被稱爲隱式參數,通常是調用方法名前的對象,後面的參數術語顯示參數,顯示參數是明顯的列在方法中聲明的。
- 關鍵字this表示隱式參數。
- 須要得到或設置實例域的值,須要提供下面幾項內容:
- 一個私有的數據域;
- 一個公有的域訪問器方法;
- 一個公有的域更改器方法。
- 在實現一個類時,因爲公有數據很是危險,因此應該將全部的數據域都設置爲私有的。實現一個私有的方法,只需將關鍵字public改成private便可。
- final修飾符大都用於基本類型域,或不可變類的域(若是類中的每一個方法都不會改變其對象,這種類就是不可變的類)
4.4 靜態域與靜態方法
- 若是將域定義爲static,每一個類中只有一個這樣的域。而每個對象對於全部的實例域卻都有本身的一份拷貝。
- 靜態域屬於類,不屬於任何獨立的對象。
- 靜態方法是不能對對象操做的方法。
- 靜態方法是沒有this參數的方法。
- 如下兩種狀況下可使用靜態方法:
- 一個方法不須要訪問對象狀態,其所需參數都是經過顯示參數提供。(如:類名.方法名)
- 一個方法只須要訪問類的靜態域。(如:類名.靜態域名)
- main方法也是一個靜態方法。
4.5 方法參數
- java程序設計語言老是採用按值調用。也就是說,方法獲得的是全部參數值的一個拷貝,特別是方法不能修改傳遞給它的任何參數變量的內容。
- java中方法參數的使用狀況
- 在傳參過程當中,一個方法不能修改一個基本數據類型的參數。
- 在傳參過程當中,一個方法能夠改變一個對象參數的狀態。
- 若在方法中,對象參數引用類一個新的對象,那麼改變的就是新對象的值。
4.6 對象構造
- 重載:有些類有多個構造器,這種特徵叫作重載。若是多個方法有相同的名字,不一樣的參數,便產生了重載。經過根據參數的不一樣匹配對應的方法,這個過程被稱爲重載解析。
- java容許重載任何方法,而不僅是構造函數。
- 返回類型不做爲重載的區別參照。
- 若構造器中沒有顯示地給域賦予初值,那麼會自動賦爲默認值。對象引用爲null。
- 僅當類沒有提供任何構造器的時候,系統纔會提供一個默認的構造器,若是給出了構造器則覆蓋默認構造器。
- 建議將初始化塊放在域定義以後。
- 調用構造器的具體處理步驟:
- 全部數據域被初始化爲默認值
- 按照在類聲明中出現的次序,依次執行全部域初始化語句和初始化塊。
- 若是構造器第一行調用了第二個構造器,則執行第二個構造器主體。
- 執行這個構造器的主體。
- 在類第一次加載的時候,將會進行靜態域的初始化。全部的靜態初始化語句以及靜態初始化塊都將依照類定義的順序執行。
- 對象析構與finalize方法的區別:
- 在析構器中,最見的操做是回收分配給對象的存儲空間。因爲java有自動的垃圾回收器,不須要人工回收內存,因此java不支持析構器。
- 能夠爲任何一個類添加finalize方法。finalize方法將在垃圾回收器清除對象以前調用。在實際應用中,不要依賴與使用finalize方法回收任何短缺的資源。(不建議使用)
4.10 類設計技巧
-
必定要保證數據私有(絕對不要破壞封裝性)。
-
必定要對數據初始化(java不對局部變量初始化,但會對對象的實例域進行初始化)。
-
不要在類中使用過多的基本類型(能夠將多個相關的基本類型用其餘類代替)。
-
不是全部的域都須要獨立的域訪問器和域更改器(按需設計)。
-
將職責過多的類進行分解(若是明顯地能夠將一個複雜的類分解乘兩個更爲簡單的類,就應該將其分解)。
-
類名和方法名要能體現它們的職責。(例如訪問器方法用小寫get開頭,更改器方法用小寫set開發)
-
優先使用不可變的類。
更改對象的問題在於,若是多個線程試圖同時更新一個對象,就會發生併發更改,其結果是不可預測的。但若是類是不可變的,就能夠安全地在多個線程間共享其對象。
後期持續更新中。。。。。。
如有書寫錯誤的地方,歡迎留言,但願咱們能夠一塊兒進步,一塊兒加油!😜😜