1、引言
歷時一個多月的學習,已經掌握了JavaSE的知識,這篇博客就來做一下SE知識的總結~
2、數據類型和變量
Java中的數據類型分為基本數據類型和引用數據類型。
2.1 基本數據類型
基本數據類型共有四類八種:
四類:整形、浮點型、布爾類型、字符型
八種:
注意:
1. 不論是在16位系統還是32位系統,int都占用4個字節,long都占8個字節
2. 整形和浮點型都是帶有符號的
3. 整型默認為int型,浮點型默認為double
4.?. Java虛擬機規范中,并沒有明確規定boolean占幾個字節
2.2 引用數據類型
字符串、數組、類、接口等都是引用數據類型
2.3?類型轉換
2.3.1?自動類型轉換(隱式)
自動類型轉換即:代碼不需要經過任何處理,在代碼編譯時,編譯器會自動進行處理。特點:數據范圍小的轉為數 據范圍大的時會自動進行。
2.3.2?強制類型轉換(顯式)
強制類型轉換:當進行操作時,代碼需要經過一定的格式處理,不能自動完成。特點:數據范圍大的到數據范圍小的。
3、運算符
3.1 算術運算符
1. 基本四則運算符:加減乘除模(+ - * / %)
2. 增量運算符 +=? -=? *=? %=
3. 自增/自減運算符 ++? --
3.2 關系運算符
關系運算符主要有六個: ==? !=? <? >? <=? >=,其計算結果是 true 或者 false 。
3.3 邏輯運算符
邏輯運算符主要有三個: &&(邏輯與)? ||(邏輯或)? !(邏輯非) ,運算結果都是 boolean類型。
注意:&& 和 || 遵守短路求值的規則
3.4?位運算符
位運算符主要有四個:
&(按位與),
|(按位或),
~(按位取反),
^(按位異或) ,
除 ~ 是一元運算符外,其余都是二元運算符。
3.4 移位運算符
1. 左移 <<: 最左側位不要了, 最右側補 0
2. 右移 >>: 最右側位不要了, 最左側補符號位(正數補0, 負數補1)
3. 無符號右移 >>>: 最右側位不要了, 最左側補 0
3.5?條件運算符
Java 中唯一的一個 三目運算符, 是條件判斷語句的簡化寫法:
表達式1 ? 表達式2 : 表達式3
3.6?運算符的優先級
注意:運算符之間是有優先級的,?具體的規則我們不必記憶。?在可能存在歧義的代碼中加上括號即可。
4、程序邏輯控制
本章詳細內容可見:JavaSE:程序邏輯控制-CSDN博客
4.1 順序結構
順序結構 即 按照代碼書寫的順序一行一行執行。
4.2?分支結構
if 語句(if-else、if-else if、if-else if-else)、switch 語句
4.3?循環結構
while 循環、for 循環、do while 循環
break(打破循環)、continue(跳出本次循環)
4.4 輸入輸出
4.4.1 輸出:
1. println 輸出的內容自帶 \n, ?print 不帶 \n
2. printf 的格式化輸出方式和 C 語言的 printf 是基本一致的
4.4.2 輸入:
使用 Scanner 讀取字符串/整數/浮點數
注意事項: 當循環輸入多個數據的時候, 使用 ctrl + z 來結束輸入 (Windows 上使用 ctrl + z, Linux / Mac 上使用 ctrl + d)
5、方法
方法類似于C語言中的函數。
注意事項:
1. 方法名字:采用小駝峰命名
2. 定義在類中
3.?方法不能嵌套定義
4. Java中,無方法聲明一說
5.1?實參和形參的關系
1. 形參只是方法在定義時需要借助的一個變量,用來保存方法在調用時傳遞過來的值
2. 在Java中,實參的值永遠都是拷貝到形參中,形參和實參本質是兩個實體
5.2?方法重載
在Java中,如果多個方法的名字相同,參數列表不同,則稱該幾種方法被重載了。
注意:
1. 方法名必須相同
2. 參數列表必須不同(參數的個數不同、參數的類型不同、類型的次序必須不同)
3. 與返回值類型是否相同無關
6、數組
數組是一個引用數據類型。
6.1 數組的初始化
6.1.1 動態初始化
在創建數組時,直接指定數組中元素的個數
6.1.2?靜態態初始化
在創建數組時不直接指定數據元素個數,而直接將具體的數據內容進行指定
注意:
如果沒有對數組進行初始化,數組中元素有其默認零值:
6.2?引用類型
基本數據類型創建的變量,稱為基本變量,該變量空間中直接存放的是其所對應的值;而引用數據類型創建的變量,一般稱為對象的引用,其空間中存儲的是對象所在空間的地址。
數組是引用類型,其內部保存的內容可以簡單理解成是數組在堆空間中的首地址
6.3?null
null 的作用類似于 C 語言中的 NULL (空指針), 都是表示一個無效的內存位置
7、類和對象
本章詳細內容可見:JavaSE:類和對象-CSDN博客
Java是一門面向對象的語言,在面向對象的世界里,一切皆為對象。
7.1 類
類是用來對一個實體(對象)來進行描述的。
ps:類名注意采用大駝峰定義
7.2 對象
用類類型創建對象的過程,稱為類的實例化,采用new關鍵字,配合類名來實例化對象。
1. new 關鍵字用于創建一個對象的實例
2. 使用 . 來訪問對象中的屬性和方法
3.? 同一個類可以創建多個實例對象
7.3 this引用
this引用的是調用成員方法的對象。(即哪個對象調用就是哪個對象的引用類型)
7.4?構造方法
名字必須與類名相同,在創建對象時,由編譯器自動調用,并且在整個對象的生命周期內只調用一次。
構造方法的作用就是對對象中的成員進行初始化。
注意:
1. 如果用戶沒有顯式定義,編譯器會生成一份默認的構造方法,生成的默認構造方法一定是無參的
2.?構造方法中,可以通過this調用其他構造方法(this(...)必須是構造方法中第一條語句)
7.5 默認初始化
對象空間被申請好之后,對象中包含的成員已經設置好了初始值(默認零值),
8、封裝
面向對象程序三大特性:封裝、繼承、多態
不管是封裝還是繼承還是多態,都是一種思想!!!
封裝:隱藏對象的屬性和實現細節,僅對外公開接口來和對象進行交互。
使用private來對成員進行封裝。
8.1?封裝擴展之包
為了更好的管理類,把多個類收集在一起成為一組,稱為軟件包
包是對類、接口等的封裝機制的體現,是一種對類或者接口等的很好的組織方式
Java中已經提供了很多現成的類供我們使用,使用 import語句導入包
8.2 static成員
被static修飾的成員,稱之為靜態成員,也可以稱為類成員,其不屬于某個具體的對象,是屬于類的,是所有對象所共享的。
本部分詳細內容可見:JavaSE:static成員-CSDN博客
注意:
1.?不能在靜態方法中訪問任何非靜態成員變量
2.?不屬于某個具體的對象,是屬于類的,所有對象共享的
3. 靜態方法中不能調用任何非靜態方法,因為非靜態方法有this參數,在靜態方法中調用時候無法傳遞this引用
4. 通過類名. 進行訪問
8.3 代碼塊
分為:普通代碼塊 實例代碼塊 靜態代碼塊 同步代碼塊
?本部分詳細內容可見:JavaSE:代碼塊-CSDN博客
8.3.1?實例代碼塊
也叫做構造代碼塊,一般用于初始化實例成員變量。
注意:實例代碼塊只有在創建對象時才會執行
8.3.2?靜態代碼塊
一般用于初始化靜態成員變量。
注意:
1.?靜態代碼塊不管生成多少個對象,其只會執行一次
2.?靜態成員變量是類的屬性,因此是在JVM加載類時開辟空間并初始化的
3.?如果一個類中包含多個靜態代碼塊,在編譯代碼時,編譯器會按照定義的先后次序依次執行(合并)
8.3.3 執行順序
靜態代碼塊-》實例代碼塊-》構造方法(有父類先執行父類的)
8.4 內部類
在 Java 中,可以將一個類定義在另一個類或者一個方法的內部, 前者稱為內部類,后者稱為外部類。內部類也是封裝的一種體現。
本部分詳細內容可見:JavaSE:內部類-CSDN博客
我們把內部類可以分為一下四種:
1.實例內部類(非靜態內部類 )
實例內部類對象必須在先有外部類對象前提下才能創建
2.靜態內部類
不需要再去通過外部類對象的引用來實例化
3.匿名內部類
4.局部內部類
9、繼承
本章詳細內容可見:JavaSE:繼承(通俗細節版)-CSDN博客
面向對象思想中提出了繼承的概念,專門用來進行共性抽取,實現代碼復用。
繼承主要解決的問題是:共性的抽取,實現代碼復用。
9.1 extends
Java語法上,子類通過extend來繼承父類
子類會將父類中的成員變量或者成員方法繼承到子類中
9.2 父類成員的訪問
成員訪問遵循就近原則,自己有優先自己的,如果沒有則向父類中找。
9.2.1 super關鍵字
出現同名的成員,非要訪問父類的,需要super來訪問。
Java提供了super關鍵字,該關鍵字主要作用:在子類方法中訪問父類的成員。
super也可調用父類構造方法。
使用super注意:
1. 只能在非靜態方法中使用
2. 在子類方法中,訪問父類的成員變量和方法。
3.在子類構造方法中,super(...)調用父類構造時,必須是子類構造函數中第一條語句。
9.3 final關鍵字
1. 修飾變量或字段,表示常量(即不能修改)
2. 修飾類:表示此類不能被繼承
3. 修飾方法:表示該方法不能被重寫
9.4 Object類
Java里面除了Object類,所有的類都是存在繼承關系的。默認會繼承Object父類。即所有類的對象都可以使用Object的引用進行接收。
10、多態
本章詳細內容可見:JavaSE:多態(含向上轉型、動態綁定、重寫)-CSDN博客
多態,就是去完成某個行為,當不同的對象去完成時會產生出不同的狀態。
多態是一種思想!!!
多態發生條件:
1. 必須在繼承體系下
2. 子類必須要對父類中方法進行重寫
3. 通過父類的引用調用重寫的方法
10.1 重寫
1. 子類在重寫父類的方法時,必須與父類方法原型一致: 返回值類型 方法名 (參數列表) 要完全一致
2. 被重寫的方法返回值類型可以不同,但是必須是具有父子關系
3.?訪問權限不能比父類中被重寫的方法的訪問權限更低。例如:如果父類方法被public修飾,則子類中重寫該方 法就不能聲明為 protected
4.?父類被static、private修飾的方法、構造方法都不能被重寫。
10.1.1 重寫和重載的區別
10.2?向上轉型
實際就是創建一個子類對象,將其當成父類對象來使用。
有三種形式來向上轉型:
1.直接賦值 2.方法傳參 3.返回值接收
10.3 向下轉型
將一個子類對象經過向上轉型之后當成父類使用,將父類引用再還原為子類對象
Java中為了提高向下轉型的安全性,引入 了 instanceof ,如果該表達式為true,則可以安全轉換
向下轉型不安全,用法很少。
11、抽象類和接口
本章詳細內容可見:JavaSE:抽象類和接口-CSDN博客
11.1 抽象類
如果一個類中沒有包含足夠的信息來描繪一個具體的對象,這樣的類就是抽象類。
抽象類主要用于繼承。
注意:
1. 抽象類不能直接實例化對象
2.?抽象方法不能是 private 的
3. 抽象方法不能被final和static修飾,因為抽象方法要被子類重寫
4. 抽象類必須被繼承,并且繼承后子類要重寫父類中的抽象方法,否則子類也是抽象類,必須要使用 abstract 修飾
5.?抽象類中不一定包含抽象方法,但是有抽象方法的類一定是抽象類
6. 抽象類中可以有構造方法,供子類創建對象時,初始化父類的成員變量
11.2 接口
接口就是公共的行為規范標準,大家在實現時,只要符合規范標準,就可以通用。 在Java中,接口可以看成是:多個類的公共規范,是一種引用數據類型。
類與接口之間是 implements 實現關系。
注意:
1. 接口類型是一種引用類型,但是不能直接new接口的對象
2. 接口中每一個方法都是public的抽象方法, 即接口中的方法會被隱式的指定為 public abstract(只能是public abstract,其他修飾符都會報錯)
3. 接口中的方法是不能在接口中實現的,只能由實現接口的類來實現
5. 接口中可以含有變量,但是接口中的變量會被隱式的指定為 public static final 變量
6. 接口中不能有靜態代碼塊和構造方法
7.即Java中不支持多繼承,但是一個類可以實現多個接口
11.2.1 接口間的繼承
接口可以繼承一個接口, 達到復用的效果. 使用 extends 關鍵字
接口間的繼承相當于把多個接口合并在一起。
11.2.2?Clonable接口、淺拷貝與深拷貝
詳見:JavaSE:Clonable接口、淺拷貝與深拷貝-CSDN博客
11.2.3?Comparable與Comparator接口
詳見:JavaSE:Comparable與Comparator接口-CSDN博客
11.3 抽象類和接口的區別
核心區別: 抽象類中可以包含普通方法和普通字段, 這樣的普通方法和字段可以被子類直接使用(不必重寫), 而接口中不能包含普通方法, 子類必須重寫所有的抽象方法。
12、String類
本章詳細內容可見:JavaSE:String類常用方法(巨詳細)-CSDN博客
本章詳細內容可見:JavaSE:String類常用方法(巨詳細)-CSDN博客
JavaSE:StringBuilder和StringBuffer類-CSDN博客
String類是引用數據類型。
12.1 字符串的構造
1.通過雙引號直接定義
2.通過new對象來定義
3.通過字符數組來定義
12.2 字符串的不可變性
value數組被private修飾封裝,沒有提供任何的get和set方法,無法獲取到字符串,當然也不可能被修改。
12.3 String類的常用方法
JavaSE:String類常用方法(巨詳細)-CSDN博客
12.4 字符串的修改
因為String類是不能修改的,所有的修改都會創建新對象,效率非常低下。
如果要修改建議盡量 使用StringBuffer或者StringBuilder。
JavaSE:StringBuilder和StringBuffer類-CSDN博客
13、異常
在程序執行過程中,發生的一些不正常行為,就叫做異常。
13.1 異常的分類
13.2?運行時異常(非受查異常)
數組越界異常、空指針異常、算數異常、類型轉換異常等都是非受查異常。
13.3?編譯時異常(受查異常)
在程序編譯期間發生的異常,稱為編譯時異常,也稱為受檢查異常。
13.4 處理異常
異常處理主要用到5個關鍵字:throws、try、catch、throw、finally
13.4.1 throw
借助throw關鍵字,拋出一個指定的異常對象,將錯誤信息告知給調用者。
注意:
需要注意:
1. throw必須寫在方法體內部
2. 拋出的對象必須是Exception 或者 Exception 的子類對象(不能拋出自定義類的對象)
3. 如果拋出的是 RunTimeException 或者 RunTimeException 的子類(運行時異常),則可以不用處理,直接交給JVM來處理(但程序會立即終止)
4. 如果拋出的是編譯時異常,用戶必須處理,否則無法通過編譯
5. 異常一旦拋出,其后的代碼就不會執行
13.4.2?throws
當方法中拋出編譯時異常,用戶不想處理該異常,此時就可以借助throws將異常拋給方法的調用者來處理。即當前方法不處理異常,提醒方法的調用者處理異常。
13.4.3?try-catch
try-catch知識點總結:
1. try塊內拋出異常位置之后的代碼將不會被執行
2. 如果拋出異常類型與catch時異常類型不匹配,即異常不會被成功捕獲,也就不會被處理,繼續往外拋,直到 JVM收到后中斷程序----異常是按照類型來捕獲的
3.?try中可能會拋出多個不同的異常對象,則必須用多個catch來捕獲----即多種異常,多次捕獲
4.如果異常之間具有父子關系,一定是子類異常在前catch,父類異常在后catch,否則語法錯誤
5.由于 Exception 類是所有異常類的父類,因此可以用這個類型表示捕捉所有異常(可以放到最后用來兜底,但是極不推薦只使用Exception來捕獲異常 )
13.4.4 finally
不管有沒有拋出異常,是否被捕獲,finally中的代碼一定會執行的,一般在finally中進行一些資源清理的掃尾工作。
13.5 自定義異常
Java當中雖說有著豐富的異常類,但是我們在開發過程中難免會遇見一些不能表示的異常,這時,我們就可以自定義異常。
仿照源碼,創建自定義類,使之繼承于Exception 或者 RuntimeException類,給出無參和帶參的構造方法。
創建自定義異常類需要注意以下幾點:
1. 自定義異常通常會繼承自 Exception 或者 RuntimeException
2. 繼承自 Exception 的異常默認是受查異常(必須捕獲處理掉異常)
3. 繼承自 RuntimeException 的異常默認是非受查異常
END
JavaSE語法部分的學習結束了,希望你能一直堅持下去,越來越強!