部分常識
dos指令(win和Linux上删除指令不太一樣
java環境變量設定,盡量不要設定出中文名稱變量,後續會影響路徑讀取
public隻能修飾一個類,且該類的名稱和檔案名稱一緻,同一檔案中可以有多個類
類、方法、常量的基本命名規範和規則
辨別符:java 對類名 方法名 變量名 包名 等命名時采用的字元序列。
在java中凡是需要自己命名的位置都是辨別符
辨別符命名規則:
由字母數字下劃線美元符組成,且數字不能開頭
不能用保留字和關鍵字
嚴格區分大小寫
命名規範
看到名字要知道這玩意大概啥意思
類名各個單詞首字母大寫
方法(函數)名第二個單詞首字母大寫(其之後的所有單詞首字母大寫)
包名小寫
常量全部大寫
命名規則:
1.字母數字下劃線 美元符 組成
2.數字不能開頭
3.不能是java中的關鍵字或者保留字
4.嚴格區分大小寫
命名規範:
1.見名之意
2.類 每一個單詞的首字母大寫
3.方法 變量 等 第一個單詞的首字母小寫 從第二個單詞開始 首字母大寫
4.包 所有字母小寫
5.常量 所有的字母大寫 多個單詞組成 使用下劃線連接配接
局部變量需要初始化,即放在方法中的變量要初始化
放在方法外的因為其是類變量是以可以不做初始化
ASCLL碼:0:48,A:65,a:97
byte,short,char三者任意之間運算,結果都會轉換為int類型
+=,-=,/=,%=之類的指派運算符不會改變原有的資料類型
charAt方法隻能接收空格前的資料
nextLine隻能跟随nextLine的輸入,如果上一輸入不是nextLine則會中斷
随機數公式
Math.random()*(n-m+1)+m
取值範圍[m,n]
循環控制部分
switch(資料){}
資料中可以放的資料類型char,int,String,short,byte,枚舉
do{循環體}while();
一般先執行一次循環體的内容,再進行條件判斷
循環選擇
for适用條件 循環次數固定
while 循環次數不固定
do while 初始化條件不滿足循環條件,但仍執行一次循環
嵌套循環内break
如果沒有标簽,則結束目前break所在層循環,如果有标簽,結束标簽所在循環
标簽
l: for(i=0;i<x;i++){
for(j=0;j<x;j++){
if(a==b)
brake l;}}
嵌套循環内continue
面向對象
包(package)命名
名稱小寫
子產品名+網址(不用www倒叙:com.baidu)
靜态成員變量與非靜态成員變量
相同
都有預設值
都是類變量
方法
形參:
存在:方法聲明處
規定調用出傳遞的實參類型、個數、順序
在定義方法時方法名後面括号中聲明的變量稱為形式參數(簡稱形參)即形參出現在方法定義時。
形參是基本資料類型,
那麼實參給形參的是資料值的副本,形參的修改不影響實參;
重載
定義:同一個類中,允許存在多個同名方法,隻要其參數個數或參數類型不同
兩同一不同
同一個類,同一個方法名
不同的參數類型或參數個數
對象數組
類似二維數組,但其内部存儲的是一個對象(對象内部又有其他的屬性)
遞歸
直接遞歸
間接遞歸
注意點
遞歸需要有出口
不斷的向出口靠近
當遞歸次數過多時,會出現StackOverflowError錯誤
封裝
通路控制權限
封裝的作用
防止出現垃圾資料,可以對屬性進行封裝
private 資料類型 變量名,同時也要提供方法去改變或者擷取該變量
利用this差別成員變量和局部變量
構造器
建構方法
[修飾符] 類名(形參清單){方法體}
繼承
注意點:
繼承的子類在使用資源時,一般現在本類中尋找,如果沒有則到父類(上一級)中尋找,不斷往上,直到object
一個類沒有顯示的繼承一個類,那麼這個類預設繼承object類
Java中的繼承是單繼承,一個類隻能直接繼承另一個類。但可以多重繼承(深度,一脈單傳)
關于私有屬性,其子類不能直接調用和使用(但可以通過getXxxxx/setXxxxx整活)
成員初始化指派
預設指派
顯示指派
和代碼塊看誰在前,誰前誰先(靜态例外)
多态
前提
有繼承
有方法重寫
native
被native 修飾的方法
本地方法
public native int hashCode();
final
final修飾的類 不能被繼承 不能有子類 聲明方式 final class 類名
final 修飾的方法 不能被重寫 聲明方式 public final void eat(){}
final的注意點
修飾的變量 變為 常量
修飾的對象 位址值不能改變
修飾的成員變量 可以顯示指派 也可以通過構造器指派
但需要注意的是:這個隻能指派一次,類似初始化,之後就不能修改了
object
其為所有類的根父類
任意對象 都可以使用Object類中的方法
數組也是對象 也可以使用
除了Object 類之外 所有的類 都可以寫出向上轉型的關系
抽象類
抽象:既不具體,也無法具體
抽象類聲明方法:abstract class 類名{}
抽象方法:規定子類行為
權限修飾符 abstract 傳回值類型 方法名(形參);
接口
用來定義規範 has a 的關系
接口聲明:interface 接口名{ }
使用:class 類名 implements 接口名{ }
接口成員
接口屬性是全局靜态常量,其預設被public static final修飾
接口的抽象方法,預設被public、abstract修飾
接口内可以有靜态的方法,預設被public修飾
接口内有預設方法 哪一個實作類需要重寫 直接重寫即可 不會對其他類造成影響,其預設被 public 修飾
聲明方式【public 可有可無】 default 傳回類型 方法名
那個實作類需要則重寫,不會對其他類造成影響
内部類
成員内部類(不常用)
常見于源碼
聲明方式
外部類名{ class 内部類名{ } }
單元測試
@Test,有網絡的情況下
單元測試必須是公共的類
單元測試必須是公共的方法
方法名無要求
不要混雜其他無關内容
數組
一維數組
初始化:
動态:type[] var=new type[length];var[0]=x;var[1]=y;····
通俗講就是聲明與指派分開進行,相對常用點。即隻知道數組長度,不知道具體元素内容
異常
異常的體系結構
Throwable
Error:程式員不需要處理的異常
Exception : 程式員處理的異常(這個是編譯時異常)
運作時異常:代碼真正跑起來 才會出現的異常
數組下标越界
空指針
算數異常
類型轉換
輸入不比對
兩個比較好用的方法
getMessage();擷取發生異常的原因
printStackTrace();發生異常的原因
異常的抛出
try { 可能發生異常的代碼 }catch(異常類型 變量名){ 異常解決方案 }
注意
1.try中發生了異常 那麼 異常下面的代碼不會執行 直接進到 catch内
2.try{} 是有作用域限制 想要在其他位置使用需要進行作用域提升
3.隻有發生了對應的異常類型 才可以進行捕獲
4.想要捕獲多個異常
4.1 使用 | 進行連接配接 catch(異常類型1 | 異常類型2 | .... 變量名)
4.2多重catch
4.3使用父類
如果存在多重catch 一定按照 從小到大的順序寫
繼承關系的異常抛出
父類抛出的是運作時異常 子類抛出異常沒有限制
父類抛出的是編譯時異常 子類不能抛出比父類更大的異常
自定義異常
1.建立一個類型 繼承一個異常類型
編譯時異常 繼承一個編譯時異常類
運作時異常 繼承一個運作時異常類
單元測試如何使用
注意:
1.單元測試方法 必須是 公共的類
2.單元測試方法必須是 公共的方法
3.方法名無要求
4.單元測試類 不要混雜其他内容
@Before 運作單元測試方法前 會執行的内容
@After 運作單元測試方法後 會執行的内容
異常處理注意事項
編譯期異常必須處理,要麼捕獲處理,要麼聲明在方法上,讓調用者處理。
運作時異常被抛出可以不處理。即不捕獲也不聲明抛出。
try語句範圍要盡量小的包圍在可能出現異常的一行或幾行代碼上,不要把大量無異常的代碼一起包起來,雖然這樣很省事。
catch語句捕獲的異常類型要盡量小,盡量精準,好針對性的做處理。
如果finally有return語句,永遠傳回finally中的結果,但要避免該情況.
如果父類方法抛出了多個異常,子類重寫父類方法時不能抛出更大異常,可以抛出和父類相同的異常或者是父類異常的子類或者不抛出異常。
父類方法沒有抛出異常,子類重寫父類該方法時也不可抛出異常。
float a=3.14f;此處需要加上f/F
long a=234l;此處需要加上l/L
輸入不比對異常,在輸入中,接收int但輸入double等
輸入
next()方法:
遇到空格等空白符,就認為輸入結束
witch不能作用long,JDK1.7可以String
break:隻能用在switch和循環内
continue:隻能在循環内
數組長度為Arr.length,其最後一個元素的索引為Arr.length-1
字元串比較中,==比較的是字元串的記憶體位址,字元串相等用q1.equals(q2)
數組定義
int[] len=new int[length]
此處動态聲明有長度
對象執行個體化要在main中
private是不同包下的子類可見,注意是在類中可見,而不是對象中可見
靜态方法沒有重寫(static)
空指針不能調用對象方法,(傳回是一個空null,不能調用一些方法,會報空指針異常)
導model時維持原檔案名一緻
建立一個類對象時,會先加載父類的資源,然後才會加載子類的資源(static另外考慮,會先加載static的,然後按照這個考慮)
靜态資源無法通過this調用
代碼塊聲明的變量有作用域
枚舉中的屬性,必須位于枚舉元素的下邊,枚舉類的構造器預設私有
泛型不能放基本資料類型
單元測試,@before 是個很好玩的東西
Comparable内部比較器
泛型隻能放包裝類型
Java 中的兩種排序方式:
Comparable 自然排序。(實體類實作)
Comparator 是定制排序。(無法修改實體類時,直接在調用方建立)
同時存在時采用 Comparator(定制排序)的規則進行比較。
對于一些普通的資料類型(比如 String, Integer, Double…),它們預設實作了Comparable 接口,實作了 compareTo 方法,我們可以直接使用。
而對于一些自定義類,它們可能在不同情況下需要實作不同的比較政策,我們可以新建立 Comparator 接口,然後使用特定的 Comparator 實作進行比較。
comparable自然順序
comparator雜亂的順序也可以
run和start不能一起調用
子類異常不能抛出,原因有子類重寫父類方法,不能抛出比父類更大的異常(父類沒抛出異常,子類也不能)
本憨憨以前學習的是Python,是以對于Java中很多問題都感覺很熟悉,但有時候會找不到解決方法,很多時候多是依靠百度,做題時,或多或少會受到之前Python文法上的苦惱(文法要求格式不同,文法也有一定差異),雖然Java學起來相對有點吃力(以前Python學的也不是很好,做的一些爬蟲和資料分析挖掘相關的,但人很菜),但總體來講還是有較大收獲,還在持續學習和梳理後面多線程那些的筆記,不确定還會不會想起來放出來。
由于是我臨時想釋出,之前用的幕布寫的,複制出來不是md格式,是以一些筆記還沒有做好排版,後續如果有時間會做下排版問題。