Java(入門之語法基礎)
(一)入門
1、Java SE(標準版,標準版基礎核心)、Java EE(企業版,大型企業應用開發)、Java ME(嵌入式開發)
2、(1)JDK:Java Development kit(Java開發工具包),除錯、編譯原始檔,生成文件等,包含各種開發工具(
安裝完JDK後就有JRE和JVM),現在已經更新到JDK11(現在要做的就是,趕緊熟悉JDK 8,現在已經是很多互聯
網企業標配。如果還在使用JDK4-7,那真的是要OUT,小黃呼籲大家趕緊趕緊更新新技術)
以下是各版本的名稱及釋出日期:
版本 |
名稱 |
發行日期 |
JDK 1.1.4 |
Sparkler(寶石) |
1997-09-12 |
JDK 1.1.5 |
Pumpkin(南瓜) |
1997-12-13 |
JDK 1.1.6 |
Abigail(阿比蓋爾–女子名) |
1998-04-24 |
JDK 1.1.7 |
Brutus(布魯圖–古羅馬政治家和將軍) |
1998-09-28 |
JDK 1.1.8 |
Chelsea(切爾西–城市名) |
1999-04-08 |
J2SE 1.2 |
Playground(運動場) |
1998-12-04 |
J2SE 1.2.1 |
none(無) |
1999-03-30 |
J2SE 1.2.2 |
Cricket(蟋蟀) |
1999-07-08 |
J2SE 1.3 |
Kestrel(美洲紅隼) |
2000-05-08 |
J2SE 1.3.1 |
Ladybird(瓢蟲) |
2001-05-17 |
J2SE 1.4.0 |
Merlin(灰背隼) |
2002-02-13 |
J2SE 1.4.1 |
grasshopper(蚱蜢) |
2002-09-16 |
J2SE 1.4.2 |
Mantis(螳螂) |
2003-06-26 |
Java SE 5.0 (1.5.0) |
Tiger(老虎) |
2004-09-30 |
Java SE 6.0 (1.6.0) |
Mustang(野馬) |
2006-04 |
Java SE 7.0 (1.7.0) |
Dolphin(海豚) |
2011-07-28 |
Java SE 8.0 (1.8.0) |
Spider(蜘蛛) | 2014-03-18 |
Java SE 9 | 2017-09-21 | |
Java SE 10 | 2018-03 |
https://www.oschina.net/news/100305/java-11-released-sep-25?from=timeline&isappinstalled=0(可瞭解)
(3)JVM:Java Vistual Machine(Java虛擬機器,Java語言跨平臺就是通過JVM實現的) (2)JRE:Java Runtime Environment(Java執行時環境),執行位元組碼檔案,包含基礎API和JVM
(1)原始檔(.java)、(2)編譯、(3)位元組碼檔案(.class)、(4)直譯器執行
開發經驗:多練、多問、自己動手,除錯錯誤、複習和總結。
不追求技術的新,而是追求技術的穩定。
(二)變數和常量
1、Java關鍵字:Java 語言中有一些具有特殊用途的詞被稱為關鍵字
2、Java識別符號:識別符號就是用於給 Java 程式中變數、類、方法等命名的符號。
使用識別符號時,需要遵守幾條規則:
(1)識別符號可以由字母、數字、下劃線(_)、美元符($)組成,但不能包含 @、%、空格等其它特殊字元,不能以數字
開頭。譬如:123name 就是不合法滴
(2)識別符號不能是 Java 關鍵字和保留字( Java 預留的關鍵字,以後的升級版本中有可能作為關鍵字),但可以包含關
鍵字和保留字。如:不可以使用 void 作為識別符號,但是 Myvoid 可以
(3)識別符號是嚴格區分大小寫的。 所以涅,一定要分清楚 imooc 和 IMooc 是兩個不同的識別符號哦!
(4)識別符號的命名最好能反映出其作用,做到見名知意。
3、變數
在 Java 中,我們通過三個元素描述變數:變數型別、變數名以及變數值。
JAVA變數命名規則:
(1)變數名由多單片語成時,第一個單詞的首字母小寫,其後單詞的首字母大寫,俗稱駱駝式命名法(也稱駝峰式命名
法),如 myAge
(2)變數命名時,儘量簡短且能清楚的表達變數的作用,做到見名知意。如:定義變數名 stuName 儲存“學生姓名”信
息
PS: Java 變數名的長度沒有限制,但 Java 語言是區分大小寫的,所以 price 和 Price 是兩個完全不同的變數哦!
JAVA變數使用規則:先聲明後使用(可以宣告變數的同時進行初始化,也可以先聲明後賦值)
4、資料型別
Java 語言是一種強型別語言。通俗點說就是,在 Java 中儲存的資料都是有型別的,而且必須在編譯時就確定其型別。
Java 中有兩類資料型別:基本資料型別、引用資料型別,在 Java 的領域裡,基本資料型別變數存的是資料本身,而引用
型別變數存的是儲存資料的空間地址。
PS: 原生型別都是小寫,原生型別的包裝類是大寫;可以這樣寫,但是這道題裡120.5後面沒有f,所以用double,主要是
double price=120.5d的d可以省略不寫,float不可以省略
在 Java 程式中,不同的基本資料型別的資料之間經常需要進行相互轉換(自動型別轉換和強制型別轉換)
【自動型別轉換】
滿足特定的條件:
1、目標型別能與源型別相容,如 double 型相容 int 型,但是 char 型不能相容 int 型
2、目標型別大於源型別,如 double 型別長度為 8 位元組, int 型別為 4 位元組,因此 double 型別的變數裡直接可
以存放 int 型別的資料,但反過來就不可以了
【強制型別轉換】
語法:( 資料型別 ) 數值(強制型別轉換可能會造成資料的丟失)
PS:就相當於一被水可以倒進一個桶,沒有任何問題,小型別到大型別屬於自動轉換。一桶水倒進杯子,如果你非要強制執
行,肯定會溢位,屬於大型別到小型別,強制轉換(記憶體溢位)
5、常量的應用
所謂常量,可以理解為是一種特殊的變數,值被設定後,在程式執行過程中不允許改變。語法:final 常量名 =
值;
程式中使用常量可以提高程式碼的可維護性。例如,在專案開發時,我們需要指定使用者的性別,此時可以定義一個常量 SEX
,賦值為 "男",在需要指定使用者性別的地方直接呼叫此常量即可,避免了由於使用者的不規範賦值導致程式出錯的情況。
PS: 常量名一般使用大寫字元
(三)常用運算子
運算子是一種“功能”符號,用以通知 Java 進行相關的運算。譬如,我們需要將變數 age 的值設定為 20 ,這時候就需
要一個“=”,告訴程式需要進行賦值操作。
1、算術運算子:算術運算子主要用於進行基本的算術運算,如加法、減法、乘法、除法等。
PS:int b=a++;(將a的值賦給b,然後再執行自增)
int b=++a;(讓a先執行自增,然後將值賦給b)
自增和自減運算子只能用於操作變數,不能直接用於運算元值或常量
2、賦值運算子(% 用來求餘數,也稱為”取模運算子“)
3、比較運算子(比較運算子用於判斷兩個資料的大小,例如:大於、等於、不等於。比較的結果是一個布林值( true 或
false ))
(1)> 、 < 、 >= 、 <= 只支援左右兩邊運算元是數值型別
(2)== 、 != 兩邊的運算元既可以是數值型別,也可以是引用型別
4、邏輯運算子
(1)與:要求所有人都投票同意,才能通過某議題
(2)或:只要求一個人投票同意就可以通過某議題
(3)非:某人原本投票同意,通過非運算子,可以使其投票無效
(4)異或:有且只能有一個人投票同意,才可以通過某議題(a ^ b)
5、條件運算子
條件運算子( ? : )也稱為 “三元運算子”。
語法形式:布林表示式 ? 表示式1 :表示式2
運算過程:如果布林表示式的值為 true ,則返回 表示式1 的值,否則返回 表示式2 的值
String mark = (score>=60 ) ? "及格":"不及格";(表示式記得加括號)
【運算子優先順序】
實際開發中,一般會使用小括號輔助進行優先順序管理
(四)流程控制語句
【條件語句】
1、if
if(條件){
條件成立時執行程式碼
}
PS:如果 if 條件成立時的執行語句只有一條,是可以省略大括號滴!但如果執行語句有多條,那麼大括號就是不可或缺
的
2、if... else
if(條件的布林表示式){
程式碼塊1
}else{
程式碼塊2
}
3、多重if
if(條件1){
程式碼塊1
}else if(條件2){
程式碼塊2
}else{
程式碼塊3
}
PS:當需要判斷的條件是連續的區間時,使用多重 if 語句是非常方便
4、巢狀if(只有當外層 if 的條件成立時,才會判斷內層 if 的條件)
if(條件1){
if(條件2){
程式碼塊1
}else{
程式碼塊2
}
}else{
程式碼塊3
}
5、switch
使用規則:
(1)switch 後面小括號中表達式的值必須是整型或字元型
(2)case 後面的值可以是常量數值,如 1、2;也可以是一個常量表達式,如 2+2 ;但不能是變數或帶有變數的表示式
,如 a * 2
(3) case 匹配後,執行匹配塊裡的程式程式碼,如果沒有遇見 break 會繼續執行下一個的 case 塊的內容,直到遇到
break 語句或者 switch 語句塊結束 ,如果沒有匹配的 case 語句則執行 default 塊的程式碼
【迴圈語句】
Java 常用的 3 種迴圈: while 、 do...while 、 for
1、while
while(判斷條件){
迴圈操作
}
先判斷,後操作
2、do... while
do{
迴圈操作
}while(判斷條件)
先執行,後判斷
3、for
for(迴圈變數初始化;迴圈條件;迴圈變數變化){
迴圈操作
}
4、break(跳出整個迴圈)
5、continue(跳出本次迴圈)
6、多重迴圈
迴圈體中包含迴圈語句的結構稱為多重迴圈。三種迴圈語句可以自身巢狀,也可以相互巢狀,最常見的就是二重迴圈。在
二重迴圈中,外層迴圈每執行一次,內層迴圈要執行一圈。
(五)陣列
陣列可以理解為是一個巨大的“盒子”,裡面可以按順序存放多個型別相同的資料,比如可以定義 int 型的陣列
scores 儲存 4 名學生的成績(陣列下標從0開始)
1、使用陣列(三個步驟)
(1)宣告陣列
語法: 資料型別[ ] 陣列名;(或資料型別 陣列名[ ];)
其中,陣列名可以是任意合法的變數名
(2)分配空間
語法: 陣列名 = new 資料型別 [ 陣列長度 ];(陣列長度就是陣列中能存放元素的個數)
(3)賦值(初始化)
分配空間後就可以向陣列中放資料了,陣列中元素都是通過下標來訪問的
PS:在 Java 中還提供了另外一種直接建立陣列的方式,將宣告陣列、分配空間和賦值合併完成
int[] scores={1,2,3,4};
int[] scores=new int[]{1,2,3,4};(不能指定長度)
2、遍歷陣列中的元素(陣列名.length 用於獲取陣列的長度)
(1)陣列下標從 0 開始。因此 scores[3] ,表示陣列中的第 4 個元素,而並非第 3 個元素
(2)陣列下標的範圍是 0 至 陣列長度-1 ,如果越界訪問,就會報錯
// 使用迴圈遍歷陣列中的元素
for(int i=0;i<hobbys.length;i++){
System.out.println(hobbys[i])
}
3、使用Arrays運算元組
Arrays 類是 Java 中提供的一個工具類,在 java.util 包中。該類中包含了一些方法用來直接運算元組,比如可直接
實現陣列的排序、搜尋等
(1)語法: Arrays.sort(陣列名);
可以使用 sort( ) 方法實現對陣列的排序,只要將陣列名放在 sort( ) 方法的括號中,就可以完成對該陣列的排
序(按升序排列)
(2)語法: Arrays.toString(陣列名);
可以使用 toString( ) 方法將一個數組轉換成字串,該方法按順序把多個數組元素連線在一起,多個元素之間
使用逗號和空格隔開
4、使用 foreach 運算元組
foreach 並不是 Java 中的關鍵字,是 for 語句的特殊簡化版本,在遍歷陣列、集合時, foreach 更簡單便捷。
語法:foreach(元素型別 元素變數:遍歷物件){
執行的程式碼
}
5、二維陣列
所謂二維陣列,可以簡單的理解為是一種“特殊”的一維陣列,它的每個陣列空間中儲存的是一個一維陣列。
(1)宣告陣列並分配空間
資料型別[][] 陣列名=new 資料型別[行的個數][列的個數];
(2)賦值:二維陣列的賦值,和一維陣列類似,可以通過下標來逐個賦值,注意索引從 0 開始,也可以在宣告陣列的同
時為其賦值
(3)處理陣列:二維陣列的訪問和輸出同一維陣列一樣,只是多了一個下標而已。在迴圈輸出時,需要裡面再內嵌一個
迴圈,即使用二重迴圈來輸出二維陣列中的每一個元素
(六)方法
語法:訪問修飾符 返回值型別 方法名(引數列表){
方法體
}
其中:
1、 訪問修飾符:方法允許被訪問的許可權範圍, 可以是 public、protected、private 甚至可以省略 ,其中 public 表示
該方法可以被其他任何程式碼呼叫,其他幾種修飾符的使用在後面章節中會詳細講解滴
2、 返回值型別:方法返回值的型別,如果方法不返回任何值,則返回值型別指定為 void ;如果方法具有返回值,則需要
指定返回值的型別,並且在方法體中使用 return 語句返回值
3、 方法名:定義的方法的名字,必須使用合法的識別符號
4、 引數列表:傳遞給方法的引數列表,引數可以有多個,多個引數間以逗號隔開,每個引數由引數型別和引數名組成,以
空格隔開
根據方法是否帶參、是否帶返回值,可將方法分為四類:
Ø 無參無返回值方法
Ø 無參帶返回值方法
Ø 帶參無返回值方法
Ø 帶參帶返回值方法
5、 方法的過載:如果同一個類中包含了兩個或兩個以上方法名相同、方法引數的個數、順序或型別不同的方法,則稱為方法
的過載,也可稱該方法被過載
判斷方法過載的依據:
(1)必須是在同一個類中
(2)方法名相同
(3)方法引數的個數、順序或型別不同
(4)與方法的修飾符或返回值沒有關係