數據類型 | 大小 | 範圍 | 默認值 | |
整型 | 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 |
類(class) 接口(interface) 數組(array)java
一元運算符 | ||||
正 | 負 | 自增1 | 自減1 | |
+ | - | ++ | -- | |
二元運算符 | ||||
加 | 減 | 乘 | 除 | 取餘 |
+ | - | * | / | % |
十進制轉二進制express
按位與 | & | 兩個數都爲1則爲1,不然爲0 |
按位或 | | | 有一個爲則爲1,不然爲0 |
異或 | ^ | 兩個數字相同則爲0,不然爲1 |
非 | ~ | 1轉0,0轉1,而後轉補碼(正數補碼爲本身,負數補碼符號位不變再按位取反加1) |
帶符號左移 | << | 左移低位補0 |
帶符號右移 | >> | 右移使用符號擴展機制,若是正數,則高位補0,若是負數,則高位補1. |
無符號右移 | >>> | 不管正數仍是負數,都高位補0 |
等於 | 不等於 | 小於 | 大於 | 不大於 | 不小於 | |
== | != | < | > | <= | >= |
與 | 或 | 非 | 短路與 | 短路或 |
& | | | ! | && | || |
布爾表達式?表達式1:表達式2
true 返回表達式1值,false返回表達式2值編程
=、+=、-=、*=、/=、%=、<<=、>>=、>>>=、&=、|=、^=數組
a instanceof B 若a繼承B或a是B類型,則爲true;不然false
注:
a爲某個實例,且a必須是能夠經過(B)a強轉成B類型的,否則編譯器會報錯。 B不能指定泛型參數安全
優先級 | 運算符 | |
1 | ()、[] | 從左往右 |
2 | !、+(正)、-(負)、~、++、-- | 從右往左 |
3 | *、/、% | 從左往右 |
4 | +(加)、-(減) | 從左往右 |
5 | <<、>>、>>> | 從左往右 |
6 | <、<=、>、>=、instanceof | 從左往右 |
7 | ==、!= | 從左往右 |
8 | &(按位與) | 從左往右 |
9 | ^ | 從左往右 |
10 | | | 從左往右 |
11 | && | 從左往右 |
12 | || | 從左往右 |
13 | ?: | 從左往右 |
14 | =、+=、-=、*=、/=、%=、<<=、>>=、>>>=、&=、|=、^= | 從右往左 |
1.if-else
if(A)
①
else
②
A爲true執行①,不然執行②多線程
2.if-else if-esle if...
if(A)
①
else if(B)
②
else if(C)
③
A爲true執行①跳出結構體,下面代碼不執行併發
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
break、continue、return
注:
①break是跳出當前循環,continue是跳出當前當次循環
②若循環裏嵌套循環break只能跳出一個,return能夠跳出整個循環
1.switch
switch(A)
case B:
①;
break;
case C:
②;
break;
注:
①A必須是byte、short、char、int及其包裝類、String(jdk1.7以上)、enum
②若不用break,不會跳出結構體代碼會繼續執行
1.封裝
把對象的屬性、方法結合成一個獨立的總體,並儘量隱藏對象的內部細節,只須要調用不用知道里面的如何實現,就像調試接口同樣,只要管入參和返回結果便可,這樣作有利於程序的安全以及能夠減小耦合度。舉個例子,我想吃碗湯麪,去哪家麪館都行,可是若是我知道有一家麪館湯是藥草精煉特製而成能大補,我會更想去那家依賴大補的功能,假若我知道那湯是如何作的,我能夠把配方拿出去賣,對於那家麪館就失去了核心競爭力。
2.繼承
子類繼承父類,子類能夠獲取父類的屬性和行爲,並根據自身的須要擴展新的屬性和行爲,這樣利於代碼的複用以及程序的擴展。舉個例子,先定義一個類湯麪,有屬性:湯、面,而這時我須要給湯麪加塊大肉就能夠派生出大肉湯麪或者加塊大排骨就能夠派生出排骨湯麪。
注:
①.子類繼承父類,子類會擁有父類全部行爲和屬性,可是訪問權(指子類調用)不必定都有
修飾符 | 當前類 | 同包內 | 子孫類 | 其餘包 |
public | √ | √ | √ | √ |
protected | √ | √ | √ | × |
default | √ | √ | × | × |
private | √ | × | × | × |
重載:發生在同一個類,方法名必須相同,參數類型不一樣,個數不一樣,方法返回值和訪問修飾符能夠不一樣
重寫:發生在父子類,方法簽名必須相同,返回值類型不大於父類,拋出異常不大於父類,訪問修飾符不小於父類
static修飾的是屬於這個類,和類對象無關,建議直接用類調用便可.
注:
①.執行順序:
父類靜態變量和靜態代碼塊
子類靜態變量和靜態代碼塊
父類成員變量和非靜態代碼塊
父類構造方法
子類成員變量和非靜態代碼塊
子類構造方法
②靜態方法不會預先執行,非靜態代碼塊在每申明一個新對象時都會執行一次
③.由於static修飾的最早加載,因此static修飾的方法不能直接調用非靜態的方法和屬性,也所以不能使用this、super,不能被重寫
final就是最終的,不可修改的意思。修飾的類不能被繼承,修飾的方法不能被重寫,修飾的變量爲常量只能賦值一次
call by value:值傳遞(值指基本數據類型),不會改變實際參數的數值
call by reference:引用傳遞,不能改變實際參數的參考地址, 能改變實際參數的內容
注:
不管哪一種傳遞傳參傳遞的都是是參數的拷貝
①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時用來肯定被回收對象時候沒有被引用