你強任你強,我幹我本行——Java基礎(上)

1、Java數據類型

1.1 基本數據類型

數據類型 大小 範圍 默認值
整型 byte 1字節 -27—27-1 0
short 2字節 -215—215-1 0
int 4字節 -231—231-1 0
long 8字節 -263—263-1 0L
浮點型 float 4字節 -3.4E38—3.4E38 0.0f
double 8字節 -1.7E308—1.7E308 0.0d
字符型 char 2字節 \u0000—u\ffff ‘\u0000’
布爾型 boolean true、false false
:
① 浮點數計算會出現偏差,用BigDecimal類

1.2 引用數據類型

類(class) 接口(interface) 數組(array)java

2、運算符

2.1 算數運算符

一元運算符
自增1 自減1
+ - ++ --
二元運算符
取餘
+ - * / %
:
① a++ 先賦值,後自增 ++a 先自增,後賦值
eg. 若a初始值爲1 //a=a++ a爲1 //a=++a a爲2

2.2 位運算符

十進制轉二進制express

按位與 & 兩個數都爲1則爲1,不然爲0
按位或 | 有一個爲則爲1,不然爲0
異或 ^ 兩個數字相同則爲0,不然爲1
~ 1轉0,0轉1,而後轉補碼(正數補碼爲本身,負數補碼符號位不變再按位取反加1)
帶符號左移 << 左移低位補0
帶符號右移 >> 右移使用符號擴展機制,若是正數,則高位補0,若是負數,則高位補1.
無符號右移 >>> 不管正數仍是負數,都高位補0

2.3 關係運算符

等於 不等於 小於 大於 不大於 不小於
== != < > <= >=
:
① == 對於基本數據類型而言是校驗其值是否相等,對於引用類型是判斷引用地址是否相同

2.4 邏輯運算符

短路與 短路或
& | ! && ||
:
① 短路與/或和物理串聯同樣,一個gg,全都gg
&& 與 &的區別:前者只要有一個條件不知足,後面條件再也不判斷,然後者全判斷
|| 與 |的區別:前者只要有一個條件知足,後面條件再也不判斷,然後者全判斷

2.5 三目運算符

布爾表達式?表達式1:表達式2
true 返回表達式1值,false返回表達式2值編程

2.6 賦值運算符

=、+=、-=、*=、/=、%=、<<=、>>=、>>>=、&=、|=、^=數組

2.7 instanceof運算符

a instanceof B 若a繼承B或a是B類型,則爲true;不然false
:
a爲某個實例,且a必須是能夠經過(B)a強轉成B類型的,否則編譯器會報錯。 B不能指定泛型參數安全

2.8 優先級:

優先級 運算符
1 ()、[] 從左往右
2 !、+(正)、-(負)、~、++、-- 從右往左
3 *、/、% 從左往右
4 +(加)、-(減) 從左往右
5 <<、>>、>>> 從左往右
6 <、<=、>、>=、instanceof 從左往右
7 ==、!= 從左往右
8 &(按位與) 從左往右
9 ^ 從左往右
10 | 從左往右
11 && 從左往右
12 || 從左往右
13 ?: 從左往右
14 =、+=、-=、*=、/=、%=、<<=、>>=、>>>=、&=、|=、^= 從右往左

3、流程控制

3.1 條件語句

1.if-else
if(A)

else

A爲true執行①,不然執行②多線程

2.if-else if-esle if...
if(A)

else if(B)

else if(C)

A爲true執行①跳出結構體,下面代碼不執行併發

3.2 循環語句

1.for
for(initialization;Boolean-expression;step)
statement
函數式編程

2.foreach
for(variable : collection)
statement函數

3.while
while(A)

A爲true執行①,直到A爲false中止執行①

4.do-while
do{

} while(A);
A爲true執行①,直到A爲false中止執行①,與while的區別,do-while至少執行語句①一次
this

3.3 中斷流程控制

break、continue、return
:
①break是跳出當前循環,continue是跳出當前當次循環
②若循環裏嵌套循環break只能跳出一個,return能夠跳出整個循環

3.4 多選擇語句

1.switch
switch(A)
case B:
①;
break;
case C:
②;
break;
:
①A必須是byte、short、char、int及其包裝類、String(jdk1.7以上)、enum
②若不用break,不會跳出結構體代碼會繼續執行

4、面向對象

4.1 三大特徵

1.封裝
把對象的屬性、方法結合成一個獨立的總體,並儘量隱藏對象的內部細節,只須要調用不用知道里面的如何實現,就像調試接口同樣,只要管入參和返回結果便可,這樣作有利於程序的安全以及能夠減小耦合度。舉個例子,我想吃碗湯麪,去哪家麪館都行,可是若是我知道有一家麪館湯是藥草精煉特製而成能大補,我會更想去那家依賴大補的功能,假若我知道那湯是如何作的,我能夠把配方拿出去賣,對於那家麪館就失去了核心競爭力。
2.繼承
子類繼承父類,子類能夠獲取父類的屬性和行爲,並根據自身的須要擴展新的屬性和行爲,這樣利於代碼的複用以及程序的擴展。舉個例子,先定義一個類湯麪,有屬性:湯、面,而這時我須要給湯麪加塊大肉就能夠派生出大肉湯麪或者加塊大排骨就能夠派生出排骨湯麪。
:
①.子類繼承父類,子類會擁有父類全部行爲和屬性,可是訪問權(指子類調用)不必定都有

修飾符 當前類 同包內 子孫類 其餘包
public
protected ×
default × ×
private × × ×
②子類的方法只能訪問其實例的受保護 成員屬性或方法,也就是繼承過來的,而不能訪問其父類實例受保護的的屬性及方法(在不一樣包內) eg.Object obj = new Object 沒法看到obj的clone方法.
③.java類不支持多繼承,繼承破壞了封裝性由於子類擁有父類private修飾的屬性或方法而且會擁有父類全部屬性和行爲,請謹慎使用繼承,問本身是否須要向上轉型須要則用繼承(is-a),不然使用組合(has-a)(能夠看看《敏捷軟件開發:原則、模式與實踐》第十四章)
3.多態
不一樣類對象對同一行爲作出不一樣響應。
多態必要條件:①繼承;②重寫;③向上引用(父類引用指向子類對象)
## 4.2 抽象類與接口 若父類方法能夠沒有方法體且該類對象沒有任何意義,那麼我能夠把這個方法定義爲抽象方法,而且該類定義爲抽象類。
注:抽象類能夠沒有抽象方法,有抽象方法的類必定是抽象類。抽象類不能實例化,若父類有抽象方法,子類繼承不重寫那麼子類也是抽象類。抽象類與通常類的區別就是抽象...
由於java不支持多繼承,只能擴展一個類,而且若一個類並不想擁有另外一類的全部屬性及行爲並沒有本質上的聯繫,相互之間只是一種契約關係,那麼接口應聲而出,接口相對於抽象類而言抽象類是對類抽象,接口是對類局部行爲的抽象,是更純粹的抽象類。
接口與抽象類區別:
①接口沒有構造方法,抽象類能夠有
②接口沒有成員屬性,所定義的變量都是static final修飾的,抽象類能夠有(1.8由於出了函數式編程,又由於OCP原則,接口能夠申明默認方法具備方法體,不要在接口中定義常量)
③接口沒有靜態方法,抽象類有
④多實現,單繼承

4.3 重載與重寫

重載:發生在同一個類,方法名必須相同,參數類型不一樣,個數不一樣,方法返回值和訪問修飾符能夠不一樣
重寫:發生在父子類,方法簽名必須相同,返回值類型不大於父類,拋出異常不大於父類,訪問修飾符不小於父類

4.4 static

static修飾的是屬於這個類,和類對象無關,建議直接用類調用便可.
注:
①.執行順序:
父類靜態變量和靜態代碼塊
子類靜態變量和靜態代碼塊
父類成員變量和非靜態代碼塊
父類構造方法
子類成員變量和非靜態代碼塊
子類構造方法
②靜態方法不會預先執行,非靜態代碼塊在每申明一個新對象時都會執行一次
③.由於static修飾的最早加載,因此static修飾的方法不能直接調用非靜態的方法和屬性,也所以不能使用this、super,不能被重寫

4.5 final

final就是最終的,不可修改的意思。修飾的類不能被繼承,修飾的方法不能被重寫,修飾的變量爲常量只能賦值一次

4.6 call by value 與 call by reference

call by value:值傳遞(值指基本數據類型),不會改變實際參數的數值
call by reference:引用傳遞,不能改變實際參數的參考地址, 能改變實際參數的內容
注:
不管哪一種傳遞傳參傳遞的都是是參數的拷貝

4.7 Object方法

①clone方法 默認克隆方法是淺複製(對象引用地址不同,對象基本數據類型屬性不同而引用類型屬性同樣),而深複製對象引用地址不同,對象基本數據類型屬性不同且引用屬性也不同。其次clone是protected的,由於Object類不知道其子類有哪些引用類型,作不到深拷貝,爲此必須從新定義clone方法,並將其聲明爲public實現深拷貝,防止其餘地方調用修改了對象引用屬性而影響了此對象。當使用clone方法時類須要實現cloneable給一個標記,這樣就不會拋出異常 ②equals與hashCode方法 equals用於確認兩個對象是否相同,默認equals方法比較的是內存地址,而兩個不一樣對象(內存地址不一樣)具備相同屬性時咱們但願這兩個對象相等,因此須要重寫equals方法,而爲何須要重寫hashCode方法,由於對象調用equals方法返回true時,他們的hashCode方法返回值也要相等,因此同時須要重寫hashCode方法。哈希值相同的對象不必定equals,而equals放回true的兩個對象必定哈希值相同。 ③toString與getClass方法 toString返回對象值的字符串,當咱們須要查看對象部分屬性時則重寫toString方法 getClass返回Class對象 ④wait()、wait(long)、wait(long, int)、notify、notifyAll() 多線程用到(例如生產者消費者),wait方法當前線程由運行狀態變爲阻塞狀態進入等待隊列,會釋放當前鎖 notify喚醒一個線程,notifyAll喚醒全部線程,有關多線程等我看完併發實踐會具體分析本身感悟.. ⑤finalize gc時用來肯定被回收對象時候沒有被引用

相關文章
相關標籤/搜索