1.選擇結構if語句
if(表達式1){
語句體1;
}else if(表達式2){
語句體2;
}else if(表達式3){
語句體3;
}
...
else{
語句體n+1;
}
執行流程:
計算出表達式1的值
如果值為true執行語句體1
如果值為false計算表達式2的值
如果值為true就執行語句體2
如果值為false就計算表達式3的值
如果只為true就執行語句體3
如果值為false就計算表達式n的值
如果值為true就執行語句體n
如果值為false,表示所有的情況都不成立,就執行else里面的語句體n+1
2.選擇結構switch語句
switch(表達式){
case 常量值1:
語句體1;
break;
case 常量值2:
語句體2;
break;
case 常量值3:
語句體3;
break;
...
default:
語句體n+1;
break;
}
格式解析:
表達式:可以取char,int,short,byte,int JDK1.7可以取String值
case:拿表達式的值和case后面的常量值進行匹配
語句體:就是要干的事情,可以是一條或者多條語句
break:結束switch語句的
default:如果所有的case都不匹配,那么就執行default里面的語句體
執行流程:
首先計算表達式的值,然后和case后面的常量值進行匹配,如果匹配成功,那么就執行對應的語句體;直到遇到break或者執行
到程序的末尾才結束switch循環;如果所有的case都不匹配那么就執行default里面的語句體
注意事項:
case后面只能是常量值,不能是變量
break是可以省略的,如果省略的了,那么就會繼續執行底下的語句體
default是可以省略的,如果省略了,那么就沒有默認的處理語句
case的順序可以是無序的,隨意的擺放
if語句:
條件是boolean的時候更適合用if
針對范圍判斷的時候,更適合用if
switch語句:
更適合針對幾個常量值進行匹配的
3.循環結構for語句
初始化語句:初始化一些值
判斷條件語句:判斷條件是否成立,語句是否可以繼續執行
循環體語句:就是我們要反復執行的代碼
控制條件語句:讓循環在合適的時候結束,一般都是通過更改某些值決定的
for(初始化語句;判斷條件語句;控制條件語句){
循環體語句;
}
執行流程:
A:執行初始化語句
B:執行判斷條件語句,看其結果是true還是false
如果是true就繼續執行C步驟
如果是false就結束for循環
C:執行循環體語句
D:執行控制條件語句
E:回到B步驟
注意事項:
for循環的判斷條件語句的結果必須是boolean類型
for語句默認控制一條語句,如果想要控制多條語句必須有大括號
4.循環結構while語句
初始化語句;
while(判斷條件語句){
循環體語句;
控制條件語句;
}
執行流程:
A:執行初始化語句
B:執行判斷條件語句,看其結果是true還是false
如果是true就執行C步驟
如果是false就結束while語句
C:執行循環體語句
D:執行控制條件語句
E:回到B步驟
5.循環結構do...while語句
初始化語句;
do{
循環體語句;
控制條件語句;
}while(判斷條件語句);
執行流程:
A:執行初始化語句
B:執行循環體語句
C:執行控制條件語句
D:執行判斷條件語句,看其結果是true還是false
如果是true則回到B步驟
如果是false結束循環
6.三種循環語句的不同和使用場景
while和for的區別:當循環結束之后,初始化變量還需要繼續訪問就使用while;如果不需要繼續使用就用for,因為for語句結束之后
在for循環的初始化語句初始化的變量都會消失
while和for語句的循環體語句想要執行,必須是判斷條件語句返回true才可以
do...while語句不論判斷條件是true還是false都會至少執行一次
for:更適合做固定范圍內的循環
while:更適合求未知數的循環
do...while:更適合至少循環體語句需要被執行一次的循環
7.跳轉控制語句
break:中斷語句的意思,可以中斷switch語句和所有的循環語句;離開使用場景沒有任何意義
continue:結束本次循環,直接開始下一次循環;可以結束所有的循環語句;離開使用場景沒有任何意義
return:結束當前的方法並將執行權交給上層調用者
1.方法
概述:就是完成特定功能的代碼塊,解決重復代碼編寫問題
格式:
修飾符 返回值類型 方法名(參數列表){
方法體;
return 返回值;
}
格式解析:
修飾符:先階段就用public static
返回值類型:是由返回值類型決定的,接收方的變量類型要和返回值類型保持兼容
方法名:其實就是一個名字,為了調用特定功能代碼塊方便
參數列表:傳遞參數用的,方法體缺少什么就可以通過參數列表問調用者要什么
方法體:就是完成特定功能的代碼塊
return:結束方法並將返回值返回給調用者
返回值:就是最終的結果
有明確返回值的方法:你聲明了對應的返回值類型,那必須返回一個對應的具體值
單獨調用,沒有任何意義
輸出調用,意義也不大, 因為只是想輸出,那么可以直接在方法體內部就輸出了,不必再返回
賦值調用,意義所在,可以拿着返回值做后續的操作
沒有明確返回值的方法:你可以使用return結束方法,但是不能返回一個具體的值
返回值類型是void
只能單獨調用
方法注意事項:
方法和方法之間是平級存在的,不能相互嵌套
方法不調用不執行
方法參數有多個的時候,可以用,隔開
方法傳遞的參數要么是常量值要么是變量
你聲明了對應的返回值類型,那必須返回一個對應的具體值
方法的重載:
java中允許一個類中存在多個同名的方法,但是這多個方法的參數個數和參數的對應類型不能一樣
方法的重載和返回值類型是沒有關系的
JVM是通過參數列表的不同來區分同名的方法
2.數組
概述:存儲同一種數據類型的元素的一個集合(容器)
數組的特點:
數組一旦定義了長度,就無法更改
數組既可以存儲基本數據類型的,還可以存儲引用類型的值
數組的定義格式:
數據類型[] 數組名;:這樣定義僅僅是聲明了一個引用變量數組名,並沒有開辟內存空間
數組的初始化:就是為數組中的每個元素開辟內存空間並賦初始化值
動態初始化:由我們指定數組的長度,由系統為每個數組元素賦初始化值
數據類型[] 數組名 = new 數據類型[數組的長度];
索引:從0開始編號,最大的索引是數組的長度-1
取值:數組名[索引]
賦值:數組名[索引] = 要被賦的值;
棧:存放局部變量,方法也是在棧中執行的;方法執行完畢之后局部變量要會消失,棧不會為其中的變量賦初始化值
堆:存放的都是new出來的東西;它會為里面的變量賦初始化值,基本數據類型的初始化值就是默認值,
引用數據類型的變量的初始化值都是null
靜態初始化:由我們指定數組元素的值,由系統根據元素的個數決定數組的長度
數據類型[] 數組名 = new 數據類型[]{元素值1,元素值2...};
簡化格式:
數據類型[] 數組名 = {元素值1,元素值2...};
1.二維數組
概述:就是一個元素為一位數組的一個數組
格式1:
數據類型[][] 數組名 = new 數據類型[m][n];
m:表示這個二維數組有m個一維數組
n:表示每一個一維數組有n個元素
數組名[i][j]:獲取第i+1個一維數組中的第j+1個元素
格式2:
數據類型[][] 數組名 = new 數據類型[m][];
m:表示這個二維數組有m個一維數組,每一個一維數組的長度可以動態的給出
int[][] arr = new int[3][];
arr[0] = new int[1];第一個一維數組的長度是1
arr[1] = new int[2];第二個一維數組的長度是2
arr[2] = new int[3];第三個一維數組的長度是3
格式3:
數據類型[][] 數組名 = new 數據類型[][]{元素值,元素值2,元素值3},{元素值11,元素值22,元素值33}};
簡化格式:
數據類型[][] 數組名 = {元素值,元素值2,元素值3},{元素值11,元素值22,元素值33}};
2.面向對象
Scanner:我們知道這個類就是java提供給我們的,它具有鍵盤錄入的功能
面向對象思想:可以將任何一個事物都封裝成類,然后通過對象來體現
面向過程思想:遇到事情想着怎么去做
面向對象思想:遇到事情想着找誰去做
面向對象是基於面向過程,因為面向對象是需要封裝的,肯定先開始分析,分析完成之后然后再封裝,
以后我們自己活着別人再使用的時候,直接可以調用對應的類和方法即可
類:是某一事物的屬性和行為的集合,還是java中的最基本的單位
首選分析一個事物的屬性和行為:
屬性:就是描述信息
行為:就是可以干什么事情
對應java類中:
屬性-成員變量
行為-成員方法
想使用類,就需要創建對象:
類名 對象名 = new 類名();
對象名.成員變量;
對象名.成員方法;
java中的成員(成員變量和成員方法)
1.抽象類
概述:當某一事物的功能無法在父類中給出具體的實現時,可以在父類中定義出來這個功能,但是不給出方法體的實現。在java中
規定一個沒有方法體的方法應該定義成抽象的方法,在java中又規定一個具有抽象方法的類必須定義成抽象類
抽象類的格式:abstract class 類名{}
抽象類的成員特點:
成員變量:變量,常量
構造方法:有構造方法,因為抽象類中有具體的成員,子類可能會訪問使用
成員方法:
具體的方法:提高代碼的復用性
抽象的方法:限定子類必須完成某個功能
抽象類如何進行實例化:
抽象類無法進行實例化,可以根據多態的思想,找一個子類繼承這個抽象類,然后實現所有的抽象方法;然后實例化這個子類,
調用抽象的方法,這個叫做抽象類的多態
抽象類的特點:抽象類中不一定有抽象方法,有抽象方法的類一定是抽象類
抽象類子類的特點:子類要么實現所有的抽象方法,要么繼續定義成抽象類
2.接口
概述:有某一部分功能不是某一事物都具有的,這些額外的功能應該定義在接口中,體現事物的擴展性
格式:interface 接口名{}
接口的成員特點:
成員變量:只能是常量,而且有默認的修飾符:public static final
構造方法:沒有,因為接口中沒有具體的實現
成員方法:只能是抽象的,而且有默認的修飾符:public abstract
接口如何進行實例化?
接口也不能直接實例化,可以根據多態的思想,創建一個子類實現接口,然后實現所有的抽象方法;然后實例化該子類,
調用接口中的方法,這個叫做接口的多態
類實現接口的格式:class 子類名 implements 接口名{}
接口的子類特點:
要么實現所有的抽象方法,要么繼續定義成抽象類
3.類和接口以及彼此之間的關系
類與類:繼承關系,單繼承,不能多繼承,可以多層繼承
類與接口:實現關系,可以單實現,多實現,多層實現;還可以在繼承一個類的同時實現多個接口
接口與接口:繼承關系,單繼承,多繼承,多層繼承
4.包
就是一個文件夾
帶包的編譯和運行:
手動式:
使用javac 源文件名.java
然后手動創建對應的文件夾,然后把編譯好的class文件拷貝進對應的文件夾中
使用java 包名.類名運行
自動式:
使用javac -d . 源文件名.java
使用java 包名.類名運行
導包:當一個類中想使用兩個相同類名不同包名的類時,只能選擇導入其中的一個類,另外一個類需要使用全路徑名進行區分
5.權限修飾符
public:修飾的成員,可以在任何地方進行訪問
private:修飾的成員,只能在同一個類中進行訪問
protected:修飾的成員,只能在子類中進行訪問
默認:修飾的成員,只要在同一個包中都可以進行訪問
6.成員內部類:可以訪問外部類中的所有成員包括私有的,外部類想訪問內部類的成員,必須創建內部類的對象、
還可以被static修飾,為了方便內部類的訪問
靜態內部類中不一定有靜態成員,但是有靜態成員的內部類一定是一個靜態的內部類
訪問內部類的成員訪問格式:
非靜態靜態內部類的非靜態成員:
外部類名.內部類名 對象名 = new 外部類名().new 內部類名();
對象名.成員;
靜態內部類中的非靜態成員:
外部類名.內部類名 對象名 = new 外部類名.內部類名();
對象名.成員;
靜態內部類中的靜態成員:
外部類名.內部類名.成員;
1.局部內部類
概述:在方法的內部創建一個類
局部內部類可以使用外部類的成員,包括私有的
外部類想訪問局部內部類時,只能通過在方法內部創建對象,通過對象訪問內部類的成員
2.匿名內部類
概述:就是沒有名字的匿名子類對象
前提:存在一個類或者接口
格式:
new 類名或者接口名(){
要重寫或者實現的方法;
}
本質:其實就是繼承了類或者實現接口的子類匿名對象