知識回顧:
1) 強調學習方法,it和其他知識不同的,數學,思維能力,抽象能力(難)語文,背。It是非常好學,工作22年,15年在軟件企業中(初級、中級、高級、系統分析師、架構師、技術總監、後面走管理)知識都是應用,反覆多敲多練。例如main,敲上上萬變。
2) 什麼是裝箱拆箱?
a) 裝箱,把基本類型變量轉換包裝類型
(包裝類型)Integer i = 10;(基本類型)
明顯=左邊右邊,不是一個相同類型,爲什麼在java中,自動裝箱(轉換)
真正代碼:(包裝類型)Integer i = new Integer(10);(包裝類型)
b) 拆箱,把包裝類型轉換基本類型
(基本類型)int j = i;(包裝類型)
明顯=左邊右邊,不是一個相同類型,爲什麼在java中,自動拆箱(轉換)
真正代碼:int j = i.intValue(); (包裝類型Integer提供方法intValue,它結果是Integer類型裏值,10整數)
爲什麼寫了不報錯,底層工作原理。瞭解即可。真正開發你寫上面代碼能運行即可。
3) 三目運算符,java唯一一個三目運算符(三元運算符)
a) 有三個參數
b) 固定格式:(布爾表達式,只能有2個結果,true/false)(x>y)?x:y(死記)
4) 2個數求最大值?
package test;
//導入單元測試import org.junit.Test;
//求最大值public class Max {
@Test //求2個數最大值
public void max2() {
int x = 10;
int y = 20;
//三目表達式
int max = (x>y) ? x : y;
//下面+不是一個數字,如果遇到字符串,+連接符,連接兩邊字符串
System.out.println("最大值是:" + max);
}
@Test //求3個數最大值
public void max3() {
//思路?2次三目運算符應用
int x = 10;
int y = 20;
int z = 30;
int max = (x>y) ? x : y; //把x和y中最大值就賦值給max變量
//複用上面max變量,變量可以再次賦值
max = (max>z) ? max : z;
System.out.println("最大值是:" + max);
}}
今天內容:以後開發中最常見語法
流程控制:
1) 異常
2) 分支判斷
a) 單分支 if
b) 多分支 switch
3) 循環結構
a) for
b) while
c) do-while
這些結構幾乎後面開發中每天都用!!
流程控制:
1) 一般代碼順序執行,都執行
2) 判斷是否執行,根據條件部分代碼執行,部分代碼不執行,其中就會跳過部分代碼(if語句,三目運算符)
3) 循環,反覆執行一段代碼
1) 異常
a) 判斷執行(部分代碼執行,部分代碼不執行)
b) 遇到關鍵字:try試圖/catch捕獲異常/finally最終/throw拋出異常/throws接收異常
c) 所有異常父親:Exception
2) 經典異常,主動創建異常
被0除,數學上 1/0,分母不能爲0,規定。出錯,java如何處理錯誤?
一般情況下控制檯中出現紅色字就是錯誤。
怎麼看英文:找一些關鍵字 Exception異常,main線程(操作系統)
java.lang.ArithmeticException,java提供常見異常Arithmetic數學
具體錯誤:/ by zero,違反了分母爲0規則
package test;
public class TestArea {
public static void main(String[] args) {
//處理異常 try/catch,語法:固定格式
try {
//沒有就執行下面的語句,一旦出錯跳入catch中
//可能出錯代碼 int y = 100/0;
//編寫,保存:編譯都不會做檢查
System.out.println(y);
System.out.println("正確");
}catch(Exception e) { //已經出錯,纔會執行,不出錯,就不執行
System.out.println("錯誤");
}
System.out.println("執行完成");
}
}
finally 是try/catch不論代碼執行正常還是錯誤都必須執行代碼
特殊作用,以後例如數據庫代碼中,釋放Connection鏈接,非常耗費資源,必須釋放資源。
package test;
public class TestArea {
public static void main(String[] args) {
try {
int y = 100/0;
System.out.println("正確");
}catch(Exception e) {
//展示具體錯誤信息
System.out.println("錯誤:"+ e.getMessage());
}finally {
//System.err打印字紅色,error錯誤
System.err.println("管你正確還是錯誤,都必須執行我!!!");
}
System.out.println("執行結束");
}
}
Try、catch就是典型流程控制,如果正常,我們只執行裏面try{}部分代碼,如果出錯,try中出錯語句後面代碼就不會執行,直接跳轉catch中代碼。不論代碼執行哪些try也好,catch也好,都必須執行finally中的內容。
Throw 拋出異常
Throws 接收異常
Try/catch屬於自己處理異常,如果異常處理不了呢?
攤上大事了,我沒本事去解決?throw就可以把異常交給上級(java就是你的調用者)
package test;
public class TestArea { //手寫,提示生成,兩種方式都可以接收異常
public static void main(String[] args) throws Exception{
try {
int y = 100/0; // by zero
System.out.println("正確");
}catch(Exception e) {
//展示具體錯誤信息
System.out.println("錯誤:"+ e.getMessage());
//拋出異常
throw new Exception("出錯啦,分母不能是零!"); //創建一個新的異常,拋出,字符串錯誤信息
}finally {
//System.err打印字紅色,error錯誤
System.err.println("管你正確還是錯誤,都必須執行我!!!");
}
System.out.println("執行結束");
}}
經典判斷,分支語句
1) if語句(最多)
男人(男人負責工作掙錢)和女人(女人負責貌美如花)
package test;
public class TestArea { //手寫,提示生成,兩種方式都可以接收異常
public static void main(String[] args){
boolean isMan = false; //true,男人,false,女人
/*
* 如果是男人控制檯輸出:男人負責工作掙錢
* 如果是女人控制檯輸出:女人負責貌美如花
*/
//分支判斷語句
if (isMan) { //括號內是布爾表達式
System.out.println("男人負責工作掙錢");
}else { //是女人要做的事情
System.out.println("女人負責貌美如花");
}
}
}
2) switch語句(很少)
switch可以完全使用if語句去實現,只不過它更加簡潔
swtich和case,default,關鍵字
業務需求:電話
電話:110警察,112醫生,114查詢電話號碼,119火警
package test;
public class TestArea { //手寫,提示生成,兩種方式都可以接收異常
public static void main(String[] args){
//電話:110警察,112醫生,114查詢電話號碼,119火警
/*
* 這個是switch特殊點,和日常思考方式不同
* 找到第一個匹配執行裏面的語句,之後後面不判斷,所有語句都執行
* 找到匹配前面代碼都不執行,都跳過
*/
int phone = 135;
switch (phone) {
case 110:
System.out.println(“我是警察”);
break; //執行完成,就跳出switch語句
case 112:
System.out.println(“我是醫生”);
break;
case 114:
System.out.println(“我是查號臺”);
break;
case 119:
System.out.println(“我是火警”);
break;
default :
System.out.println(“這個電話不認識”);
}
System.out.println(“執行完成”);
}
}
Switch語句可以用if語句替代
package test;
import org.junit.Test;
public class TestArea {
@Test //多重if語句嵌套
public void testIf() {
int phone = 120;
if(phone==110) {
System.out.println("我是警察");
}else if(phone==120) {
System.out.println("我是醫生");
}else if(phone==114) {
System.out.println("我是查號臺");
}else if(phone==119) {
System.out.println("我是火警");
} else {
System.out.println("這個電話不認識");
}
}
@Test
public void testSwitch(){
int phone = 135;
switch (phone) {
case 110:
System.out.println("我是警察");
break; //執行完成,就跳出switch語句
case 120:
System.out.println("我是醫生");
break;
case 114:
System.out.println("我是查號臺");
break;
case 119:
System.out.println("我是火警");
break;
default :
System.out.println("這個電話不認識");
}
System.out.println("執行完成");
}
}
上午總結:
1) 異常:程序中會出現錯誤,日常開發工具中出錯(編譯器錯誤),程序隱性的錯誤。(運行時錯誤)
a) 總的異常,所有異常父親,Exception,所有異常根
b) try 試圖,只要代碼中可能發生異常,這樣代碼就必須放在try中
c) catch 捕獲異常,如果出錯就執行catch裏面代碼 Exception e,e.getMessage()
d) finally 對複雜對象要釋放資源(數據庫鏈接對象Connection)不論代碼正確錯誤都執行
e) throw 拋出異常,我們自己不去處理,我們處理不了,交給代碼調用方法,main來處理。
f) throws 接收異常,main() throws Exception{},接盤俠
2) 流程控制
a) 順序結構:代碼從上往下執行,從左往右執行int i = 100*200;
b) 分支結構:有些代碼執行,有些代碼不執行,根據條件
c) 循環結構:反覆執行一段代碼
3) 分支語句
a) 單分支:if語句
b) 多分支:if-if else-else,switch語句