JAVA語法基礎

覆手為雲p發表於2018-06-30

一、基礎

1、java 語言是物件導向的程式設計語言,基本組成單元就是類;

2、一個應該程式必須包含一個main()方法,它是程式的入口和起點;

3、java嚴格區分大小寫;對於類名,應該以大寫字母開頭;

4、//註釋;          /*多行註釋*/   /**文件註釋*/

5、變數命名規則:任意不以數字開頭的字母、數字、下劃線、$的組合;

6、變數使用前必須先宣告,一次可同時宣告多個相同型別的變數並賦值,以逗號分隔;如果是常量則需要用final關鍵字進行限定;

7、Java支援:多型,繼承,封裝,抽象,類,物件,例項,方法,過載;

 

二、運算子

               賦值:+=,-+,*=,/+,(%)= ,= (可將多個變數的賦值連在一起來賦值,a=b=c=1)

               算術:+,-,*,/,%,++,--

               比較:>,<,==,>=,<=,!=

               邏輯:&&,||,!

               位運算:&(與),|(或),~(取反),^(異或,同取0,異取1),<<(用0補空位),>>(用最高位數字補空位),>>>(用0補空)        (都是針對於2進位制數位運算的。)

               條件:  ? :

               優先順序:括號>正負>自增、減、非>算術>位移>比較>&>^>|>&&>||>條件>賦值;

 

三、資料型別

1、整型

包括:byte(8位),short(16位),int(32位),long(64位)

以0開頭的為八進位制,以0x開頭的為16進位制;

2、浮點型

包括:float(16位),double(32位)

3、char字元型別

用單引號包圍,如果單個字元用雙引號包圍則表示的是一個字串;

常用方法:

isLetter()        是否是字母;
isDigit()         是否是數字;
isWhitespace()    是否是空格;
isUpperCase()     是否是大寫字母;
isLowerCase()     是否是小寫字母;
toUpperCase()     轉換為大寫;
toLowerCase()     轉換為小寫;
toString()        返回字串形式; 

4、布林型別  boolean 

5、資料型別轉換

隱式資料型別轉換(低階向高階):byte<int<short<long<float<double

顯示資料型別轉換:格式如下  int a = (int)2.2 

6、Number類常用方法(所有整型、浮點型資料都是它的子類)

typeValue()        將Number物件轉換為type資料型別並返回(如:intValue(Num))
compareTo()        比較,返回值;
equals()           比較,返回boolean值;
valueOf()          返回指定型別資料;
toString()         以字串形式返回值;
parseInt()         將字串解析為int型別;
Math類常用方法(Math類中的方法都是static的,可直接使用): abs() 返回引數絕對值; ceil() 返回大於等於給定引數的最小整數; floor() 返回小於等於給定引數的最大整數; rint() 返回與引數最接近的整數的double形式; round() 四捨五入; min() 返回兩個引數中小的; max() 返回兩個引數中大的; exp() 返回自然底數e的引數次方; log() 返回自然數底數對數值; pow() 次方; sqrt() 平方根; sin() 正弦;相似還有cos(),tan(),asin(),acos(),atan(); toDegrees() 將引數轉換為角度; toRadians() 轉換為弧度; random() 返回一個隨機數;

 

四、字串String

1、所有由雙引號包圍的都是字串;

2、多個字串可用+號連線在一起,當與其他型別的資料連線時也會將其他資料自動轉換成字串;

但是如果快速頻繁的使用字串連線,可使用StringBuilder類來實現,因為+會新例項一個字串,會消耗記憶體資源。

轉義字元: 

\n        換行;
\r        回車;
\f        換頁;
\b        退格;
\0        空字元;
\s        字串;
\t        製表符;
\"        雙引號;
\'        單引號;
\\        \;
\ddd       八進位制字元;
\uxxxx    十六進位制字元;

3、常用字串類的方法:

length()         獲取字串的長度;
indexOf()        查詢指定字元或字串的位置,如果沒有找到返回-1;
lastIndexOf()    逆向查詢指定字元或字串的位置,如果沒有找到返回-1;
charAt()         返回指定索引位置的字元;
substring()      擷取指定位置的字串,接受開始和結束兩個引數,如果只有一個則到結束位置;
trim()           去掉開始和結尾的空格;
replace()        替換字元或字串,接受原字元和新字元兩個引數;
startsWith()     判斷是否以某個字元或字串開頭;
endsWith()       判斷是否以某個字元或字串結尾;
equals()         比較和指定字串是否相同(如果是用==比較其實是比較的記憶體地址);
equalsIgnoreCase()    忽略大小寫比較;
compareTo()      比較和指定字串的大小,相同返回0,否則為一個正數或負數;
toLowerCase()    轉換為小寫;
toUpperCase()    轉換為大寫;
toCharArray()    轉換為陣列;
split()          將字串在指定字串(可接受正規表示式)處拆分,還可以接受一個可選的拆分次數的引數;
concat()         將引數字串連線到此字串最後;
format(format,obj)    字串格式化輸出;

4、常用格式化轉換符:

%b、%B    轉換為布林型別;
%h、%H    轉換為雜湊碼型別;
%s、%S    轉換為字串型別;
%c、%C    轉換為字元型別;
%d        轉換為十進位制;
%o        轉換為八進位制;
%x、%X    轉換為十六進位制;
%e        轉換為科學計數;
%a        轉換為帶有有效位數和指數的十六位制浮點值;
%n        轉換為特定平臺的分隔符;
%%        字面量‘%’; 

5、常用日期Date()資料格式化轉換符:

%tF        ‘年-月-日’格式時間(4位)
%tD        ‘月/日/年’格式時間(2位)
%tc        全部日期和時間資訊;
%tr        “hh:mm:ss pm"格式時間;
%tT        "hh:mm:ss"24小時時間;
%tR        ”hh:mm"24小時制時間;

%te        一個月的一天;
%tb        指定語言環境下月份簡稱;
%tB        指定語言環境下月份全稱;
%ta        指定語言環境下星期簡稱;
%tA        指定語言環境下星期全稱;
%tc        包括全部日期和時間資訊;
%ty        2位的年份顯示;
%tY        4位的年份顯示
%tj        一年中的第幾天;
%td        一個月中的第幾天;
%tm        月份;

%tH        2位數字的24小時制小時;
%tI        2位數字的12小時制小時;
%tk        24小時制小時;
%tl        12小時制小時;
%tM        2位分鐘數;
%tS        2位秒數;
%tL        3位毫秒數;
%tN        9位微秒數;
%tp        指定語言環境下上下午標記;
%tz        相對於GMT RFC 82格式的數字時區偏移量;
%tZ        時區縮寫;
%ts        1970至現在經過的秒數;
%tQ        1970至現在經過的毫秒數;

 以上都是print的格式輸出,如:System.out.printf("%tF", new Date());

五、陣列Array

1、宣告: type name[] 或者 type[] name

2、例項化分配記憶體地址: name = new type[n]; 或者直接給定陣列,{value1,value2,...}

3、Java支援多維陣列;

4、可使用foreach語句來遍歷陣列,格式:for(type name : arrayName){}

5、Arrays的常用靜態方法:

fill(arrayName,value)            用value值為arrayName所有元素賦值;其中還可新增起始位置;
sort(arrayName)                   排序;
copyOf(arrayName,length)         複製陣列,lengh為新陣列的長度,如果length大於arrayName長度,則用0補充;
copyOfRang(arrayName,start,end)    複製陣列;
binarySearch(arrayName,key)       查詢元素的索引,如果沒有結果則返回-1或-插入點。還可以加入可選的起始位置引數;

6、列舉enum

 

六、控制結構

1、條件

(1)if(booleanExpression)
{
    sentences;
}
else if(booleanExpression)
{
    sentences;
}
...
else
{
    sentences;
}

(後邊的else if和else結構都是可選使用的;) (
2)switch(Expression) { case 常量1: sentences; break; case 常量2: sentences; break; ... default: sentences; break; }

(在1.7以前,表示式必須是整型或字元型,在從1.7開始以後還可以使用字串型別進行判斷)

2、迴圈

(1)while(booleanExpression)
{
    sentences;
}

(2)do
{
    sentences;
}while(booleanExpression)

(3)for(;;)
{
    sentences;
}

(4) for(元素:被遍歷物件)
{
    sentences;
}
可使用break和continue來控制迴圈;使用break 迴圈體標籤;來跳出指定迴圈體(標籤的使用:    標籤名:任意識別符號)

 

七、類Class

1、方法格式

許可權修飾符 返回值型別 方法名(引數型別 引數名,...)
{
    具體方法內容;
} 

this        關鍵字使用訪問自身成員,可用於解決區域性變數;

super     關鍵字使用訪問父類成員;訪問的是上一級的方法,而不是最高階的;如果上一級不存在此方法就再向上一級追溯;

 

2、構造方法:每個類都有構造方法,也可以有多個不同引數的構造方法;構造方法名與類名相同;

finalize()                              這個方法在物件被收集器回收之前呼叫,類似於解構函式;

 

3、類的繼承extends

格式: class childClass extends parentClass{}

子類擁有父類的非private屬性和方法,且可有自己的擴充套件方法,可對父類的方法進行重寫;

Java是單繼承,但可以多重繼承;

當繼承介面時使用implements,介面可以是多繼承的;

 

4、方法重寫規則:

1)引數列表與返回型別必須與重寫方法相同;

2)訪問許可權不能比父類的更低;

3)宣告為final和static的不能被重寫,但static的可以被再次宣告;

4)構造方法不能被重寫;

 

5、多型就是同一個方法具有多個不同的引數從而具有不同的實現的能力,也是同一個介面使用不同的例項而執行不同操作;

 

八、介面interface

1、在java中是一個抽象型別,抽象方法的集合;使用interface宣告;

2、介面不能用於例項,沒有構造方法,所有的方法都必須是抽象的,介面的方法不是被繼承了,而是要被類實現;

3、介面是預設方法抽象的,不用使用abstract來宣告;

4、類在實現介面方法時,不能丟擲強制性異常,只能在介面中或者繼承介面的抽象類中丟擲該強制異常;

5、如果是抽象類,則就沒有必要實現該操的方法;

6、一個類可以繼承多個介面,介面可以被介面繼承;

7、標記介面:沒有任何方法的介面,主要用於給某個物件一個標記,使物件擁有某些特權;

8、extends和implements

extends有繼承的意思,implements有實現的意思;介面繼承介面只能使用extends,implements物件可以有多個;

9、如果需要一個有很多方法的介面中的一幾個方法,可以使用一個抽象類來繼承此介面(把必須要實現的方法設為abstract),然後再繼承此抽象類;Java8中可對介面中的方法使用default關鍵字修飾,來包含一些預設的方法實現,在繼承這個介面時可不用重寫這個方法,而直接呼叫此方法的預設實現;

10、介面可以巢狀介面、類,類也可的巢狀類、介面; 

 

九、其他

1、包package

1)、把功能相似或相關的類或介面放在一起,方便查詢和使用,也限定了訪問許可權

2)、要使用某個包需要用import關鍵字來引入包;

 

2、訪問修飾符:

public        公用,所有可見;
protected     本類和子類可見;
private       只有本類可見;對於巢狀類中宣告為私有的類的公用方法,也不能從外部呼叫;
default       預設,同一包內可見;

其他修飾符:
static 靜態的,唯一的,無論有多少例項,靜態變數都只有一個值;區域性變數不能被宣告為靜態的;靜態方法不能使用類的非靜態變數; final 關鍵字修飾的類不能被繼承,修飾的方法不能被重寫覆蓋;修飾變數只能賦值一次;如果和static一起來修飾變數則是常量; abstract 抽象類不能被例項,可以包含抽象和非抽象方法,但如果一個類含有抽象方法則必須宣告為抽象類,抽象類不能用final修飾;抽象方法不能用final和static修飾,如果抽象類的子類不是抽象類則必須實現父類的抽象方法; synchronized 修飾的方法同一時間只能被一具執行緒訪問; transient 修飾變數定義時用來預處理類和變數的資料型別,不會持久化; volatile 修飾的變數在每次被執行緒訪問時都強制從共享記憶體重新讀取該變數的值;且當變數發生變化時,會強制執行緒將變化值回寫到共享記憶體;

 

3、異常處理

1)捕獲

try{} catch(ExceptionName e){}

2)多重捕獲

try{} catch(ExceptionName1 e){} catch(ExceptionName2 e){}...

3)丟擲異常

如果一個方法沒有捕獲一個檢查性異常,那麼些方法需要使用throws來宣告;

throw可在方法丟擲一個指定異常;

在所有捕獲異常後,還可以加一個finally{}模組,寫入無論什麼結果都會執行的語句;