1. Java語言的發展史
java是哪家公司哪一年推出的?
sun公司在1995推出的編程語言
java之父是誰?
詹姆斯.高斯林
java的主要發展歷程?
1995由sun公司推出。
2004推出JDK1.5,這是里程碑式的版本。
2009年sun公司被oracle(甲骨文公司)收購。
目前最新版本JDK12。
java的三大技術架構
JavaSE:java標準版,主要用於桌面應用軟件的開發。比如計算器,QQ軟件等。
JavaEE:java企業版,基於JavaSE的企業級應用的開發。比如淘寶,京東,ERP系統等。(大型互聯網)
JavaME:java微型版,應用於移動設備和電子類產品的嵌入式開發。比如手機遊戲,手機軟件等。(安卓,IOS,HTML,微信小程序)
2. Java語言跨平臺原理
java語言的特點
java語言具有簡單易學、面向對象、健壯性、安全性、與平臺無關性等特點。
什麼是平臺?
平臺即操作系統,目前主流的有微軟Windows系統,蘋果Mac系統,Linux系統
什麼是java跨平臺?
通過java語言編寫的應用程序可以在不同的操作系統上直接運行。具有一次編譯,到處運行的特點。
java如何實現跨平臺?
通過JVM虛擬機實現的跨平臺。在不同的操作系統上安裝對應的JVM虛擬機。
java跨平臺的原理
java程序並非是直接運行的, javac編譯器將java源程序(.java文件)編譯成與平臺無關的字節碼文件(.class文件),然後通過java運行工具啓動java虛擬機,由java虛擬機(JVM)對字節碼文件解釋執行。所以在不同的操作系統下, 只需安裝不同的java虛擬機即可實現java程序的跨平臺
3. JVM、JRE、JDK
JVM、JRK、JDK三者之間的關係
JVM:Java虛擬機,保證java程序跨平臺。
//JVM保證java程序的跨平臺性
JRE:Java運行環境,包含JVM和核心類庫。如果只是想運行java程序,只要安裝JRE即可。
//JRE=JVM+核心類庫
核心類庫包括:java.util包中的Random/Scanner/Arrays等
JDK:Java開發工具包,包含JRE和開發工具。如果程序員想要開發java程序,需要安裝JDK環境
//JDK=JRE+開發工具
開發工具包括:編譯工具javac.exe ,運行工具java.exe 等
JVM、JRE、JDK關係圖解
4. 常用的DOS命令
進入DOS命令行窗口
快捷鍵win + R打開運行窗口,輸入cmd,按回車進入。
常用DOS命令
操作 | 說明 |
---|---|
盤符名稱 | 盤符切換。E:回車,表示切換到E盤 |
dir | 查看當前路徑下的內容 |
cd 目錄 | 進入單級目錄。cd develop,表示進入develop文件夾 |
cd … | 回退到上一級目錄 |
cd 目錄1\目錄2… | 進入多級目錄。cd develop\java,表示進入develop下的java文件夾 |
cd \ | 回退到盤符根目錄 |
cls | 清屏 |
exit | 退出命令提示符窗口 |
5. Path環境變量的配置
什麼是環境變量
環境變量:指在操作系統中用來指定操作系統運行環境的一些參數
爲什麼要配置環境變量
開發java程序, 需要使用JDK提供的開發工具(比如javac.exe、java.exe等命令),而這些工具在JDK的安裝目錄的bin目錄下,如果不配置環境變量,那麼這些命令只可以在該目錄下執行。 我們不可能把所有的java文件都放到JDK的bin目錄下, 所以配置環境變量的作用就是可以使bin目錄下的java相關命令可以在任意目錄下使用。
常見配置的環境變量
環境變量名 | 作用 |
---|---|
JAVA_HOME | 指 JDK 安裝的根目錄,如:C:\develop\Java\jdk-11 |
PATH | 指 java 開發工具的位置,如:C:\develop\Java\jdk-11\bin |
CLASSPATH | 指 JVM 在運行時到哪一個目錄去加載字節碼文件 |
6. 註釋
註釋的作用?
對代碼進行解釋說明,便於開發人員理解和維護代碼。
註釋不會被程序編譯和運行。
註釋的分類?
單行註釋 // 註釋內容,單行註釋可以嵌套。
多行註釋 /* 註釋內容 /,多行註釋不能嵌套使用。
文檔註釋 /* 註釋內容 */,文檔註釋不能嵌套使用。
7. 關鍵字
什麼是關鍵字?
在java語言中有特殊意義的英文單詞。
java關鍵字的特點?
單詞全部小寫。
在高級開發工具中,關鍵字會有特殊的顏色標記。
java中的關鍵字/保留字
goto和const是java中的預留關鍵字(goto和const也叫保留字)。
8. 常量
什麼是常量?
在程序運行過程中,其值不可以發生改變的量。
常量的分類
字符串常量:使用雙引號 "" 括起來的0到多個字符。"java" ,"程序員" , "" , " ","A" // 大於等於0個字符
字符常量:使用單引號 '' 括起來的單個字符。 'a' , '0' ,'我' //1個字符
整數常量:正負整數 10 -20
小數常量:帶小數點的數字 -3.14 5.12
布爾常量:表示真或假,只有true或false兩個值
空常量:值爲null,不能使用輸出語句直接輸出。//System.out.println(null),會編譯報錯
定義的final變量
9. 數據類型
java是強類型的語言,每一個數據都有對應的數據類型。
位:計算機計算的基本單位,計算機底層是二進制 0 1
字節:計算機存儲的基本單位,1字節=8位。
java數據類型分類?
基本數據類型:4型8種
整數:byte short int long (整數默認是:int類型)
小數:float double (小數默認是:double類型)
字符:char
布爾:boolean
引用數據類型:字符串,數組,類,接口 ,null
基本數據類型分類
1.定義 long 類型加L
int number = 100L;
2.定義 float 類型加F
int f = 10.0F;
10. 變量
什麼是變量?
變量指程序運行過程中,其值在一定範圍內會發生變化的量。
變量的定義格式
數據類型 變量名 = 初始化值
int a = 12;
變量的分類
成員變量:(也叫全局變量,字段)
直接定義在類中,方法外,默認有初始值
1.類成員變量:使用static修飾符修飾的成員變量
2.實例成員變量:沒有使用static修飾符修飾的成員變量
局部變量:變量除了成員變量之外,其他就是局部變量
分爲:方法形參,方法內變量,代碼塊變量
沒有初始化值,必須先初始化才能使用
變量使用的注意事項
1、變量可以定義時初始化,也可以先定義,使用前進行初始化。
//定義的時候初始化
double d = 3.14;
//先定義,後初始化
double d;
d = 3.14;
2、沒有初始化的變量不能直接使用。
int a ;
System.out.println(a); //編譯報錯,
3、相同範圍內,變量名不能重複。
//第一種:方法的形參上變量名不能相同
public static void sum(int a,int a){ //編譯報錯
}
//第二種:一對 {} 內變量名不能相同
public static void sum(){
int a = 10; //編譯報錯
int a = 20; //編譯報錯
}
4、整數默認是int類型,定義long類型時需要加L 或者l,建議加L。
long num = 10L;
5、小數默認是double類型,定義float類型的時候需要在數字後面加F或者f,建議加F。
float f = 3.14F;
6、一行代碼上可以定義多個變量。(不推薦)
int a=10,b=20;
int a,b =20;
a=10;
變量的生命週期
存在位置 | 生命週期開始 | 生命週期結束 | 在內存中的位置 | |
---|---|---|---|---|
類成員變量 | 使用static修飾的成員變量 | 當所在字節碼被加載進JVM | 當JVM停止 | 方法區 |
實例成員變量 | 沒有使用static修飾的成員變量 | 當創建所在類的對象的時候 | 當該對象被垃圾回收器回收 | 堆 |
局部變量 | 方法形參,代碼塊中,方法內 | 當代碼執行到初始化變量的時候 | 所在的方法/代碼塊結束 | 棧 |
11. 標識符
標識符的作用
給 包,類,方法,變量起名的符號。
標識符的組成規則
大小寫英文字母、數字、下劃線_、美元符$、中文(不推薦)
注意事項:
1、不能是數字開頭
2、不能是關鍵字
3、區分大小寫
標識符的命名規範
小駝峯式命名:變量名、方法名
第一個單詞首字母小寫,從第二個單詞開始每個單詞的首字母大寫。
userName,maxValue等
大駝峯式命名:類名
每個單詞的首字母都大寫。
String, ArrayList等
建議:標識符的起名儘量做到見名知意。
12. 類型轉換
隱式類型轉換(自動類型轉換)
從範圍小的類型到範圍大類型的轉換,系統會自動進行類型提升,稱爲自動類型轉換。
1.boolean不參與類型轉換
2.byte不能自動類型轉換爲char
3.char不能自動類型轉換爲short
4.short不能自動類型轉換爲char
強制類型轉換
從範圍大的類型到範圍小的類型的轉換,需要進行強制類型轉換。
格式:
目標數據類型 變量名 = (目標數據類型)變量值(常量值);
弊端:會造成數據精度丟失。儘量少用強制轉換。
1.boolean不參與類型轉換
2.char可以強制類型轉換爲byte
3.short可以強制類型轉換爲char
4.char可以強制類型轉換爲short
13. 運算符和表達式
運算符:對常量或者變量進行操作的符號。
表達式:通過運算符連接起來的式子
例如:
+ 是運算符,10 + 20 是表達式
- 是運算符,a - b 是表達式
常用的運算符
算術運算符、賦值運算符、自增自減運算符、關係運算符、邏輯運算符、三元運算符
13.1 算術運算符
符號 | 作用 | 說明 |
---|---|---|
+ | 加 | 對數字進行加法運算,對字符串進行拼接 |
- | 減 | 進行減法操作 |
* | 乘 | 進行乘法操作 |
/ | 除 | 整數相除的結果只能是整數,想要得到小數,必須有浮點數參與運算。 a / b ,獲得 a 和 b 的商 |
% | 取餘 | a%b 獲得 a 和 b 相除的餘數 |
13.1.1 表達式類型提升
byte、short、char變量之間進行運算時,類型自動提升爲int。
變量參與運算時,最終結果以最高類型爲準。
/*
表達式類型提升:
1. byte、short、char變量之間進行運算時,類型自動提升爲int。
2. 變量參與運算時,最終結果以最高類型爲準。
*/
public class OperatorDemo02 {
public static void main(String[] args) {
// 1、byte、short、char變量之間進行運算時,類型自動提升爲int。
byte b = 10;
//編譯報錯,b+5,變量b會自動提升爲int類型,運算結果爲int,賦值給byte需要強轉。
// byte b2 = b + 5;
int b2 = b+5;
System.out.println(b2);
// 2. 變量參與運算時,最終結果以最高類型爲準。
int num1 = 10;
long num2 = 20L;
long num3 = num1 + num2; //int + long --->long
System.out.println(num3);
}
}
13.1.2 字符的 + 運算
字符參與運算的規則:
將字符換算成編碼表裏對應的數值進行運算。
等價於:把char類型數據換成對應的十進制數來參與運算
編碼表:
計算機底層使用二進制運算,所以文字和符號必須轉換成二進制數才能被計算機識別,編碼表就是將文字等符號編成對應的數的表格,因爲二進制記錄起來比較麻煩,所以使用十進制數進行文字編碼。
世界上第一張編碼表ASCII(美國標準信息交換碼)。常用編碼表都兼容ASCII碼錶。
常用的編碼:
ASCII編碼:美國標準信息交換碼,世界上第一張編碼表。
GB2312編碼:簡體中文編碼,對常用漢字進行了編碼,兼容ASCII。
GBK:加強版的中文編碼表,對更多漢字進行了編碼,兼容ASCII
UTF-8編碼:萬國碼表,常作爲瀏覽器上的網頁編碼,可以統一顯示各國文字,兼容ASCII。
常見字符對應的十進制數:
‘ a’ ~ ‘z’ : 97 ~ 122
‘A’ ~ ‘Z’ : 65 ~ 90
‘0’ ~ ‘9’ : 48 ~ 57
基本漢字:19968 ~ 40869
char類型表示的範圍:0~65535
ASCII編碼表
/*
字符參與運算的規則:
將字符換算成編碼表裏對應的數值進行運算。
*/
public class CharDemo2{
public static void main(String[] args){
//a~z 97~122
//A~Z 65-90
//0~9 48~57
//基本漢字:19968 ~ 40869
char c = 'a';
int b = c + 10;
System.out.println(b); //c是char類型,參與運算先轉爲十進制,在參與運算 //107
char c2 = 97;
System.out.println(c2); //c2是char,打印c2就是打印他的char類型數據 //a
//char類型範圍 0~65535
// char c3 = 65536; //報錯,超過了char的範圍
int c3 = '中';
int c4 = '國';
System.out.println(c3); //20013
System.out.println(c4); //22269
char c5 = 20013;
char c6 = 22269;
System.out.println(c5); //中
System.out.println(c6); //國
char c7 = '9'; //9
char c8 = 57; //9
char c9 = 9; //打印的結果不是數字9,而是9對應的編碼表的符號73
}
}
13.1.3 字符串的+運算
與字符串進行 “+” 運算,是進行字符串拼接操作,運算結果還是字符串。
字符串只能進行 + 運算
//字符串的加法運算
public class StringAddDemo{
public static void main(String[] args){
int age = 25;
System.out.println("我的年齡是:"+age+"歲"); //輸出結果:我的年齡是:25歲
}
}
13.2 賦值運算符
賦值運算符作用
將表達式或者常量值賦給變量。
賦值運算符分類
符號 | 作用 | 說明 |
---|---|---|
= | 賦值 | a=10,將10賦值給變量a |
+= | 加後賦值 | a+=b,將a+b的值給a |
-= | 減後賦值 | a-=b,將a-b的值給a |
*= | 乘後賦值 | a*=b,將a×b的值給a |
/= | 除後賦值 | a/=b,將a÷b的商給a |
%= | 取餘後賦值 | a%=b,將a÷b的餘數給a |
注意:擴展的賦值運算符隱含了強制類型轉換。
/*
賦值運算符:
擴展賦值運算符隱含了強制類型轉換
*/
public class FuZhiDemo {
public static void main(String[] args) {
//1. 基本賦值運算符 =
int a = 10;
System.out.println(a);
//2. 擴展賦值運算符
int b = 20;
// b+=5;
// b-=5;
// b*=5;
// b/=5;
b%=5; //b = b%5;
System.out.println(b);//0
// 3. 擴展賦值運算符隱含了強制類型轉換
byte num = 10;
num+=5; // 相當於:num = (byte)(num+5);
// num = num + 5; //報錯
System.out.println(num);
}
}
13.3 自增自減運算符
1、++ 、 – 可以放在變量的前面,也可以放在變量的後面。
單獨進行運算時放在前面或者後面,效果一樣。
2、參與其他運算的時候:
a++ :先將a的值參與其他運算,運算結束後再自身加1。
++a :先將a自身加1,再將自增後的值參與其他運算。
自減與自增規則相同。
3、最常見用法:單獨使用。
13.4 關係運算符
符號 | 作用 | 說明 |
---|---|---|
== | 等於 | a == b,判斷如果a等於b,則爲true,否則爲false |
!= | 不等於 | a!=b,判斷如果a不等於b,則爲true,否則爲false |
> | 大於 | a>b,如果a大於b,則爲true,否則爲false |
>= | 大於等於 | a>=b,如果a大於等於b,則爲true,否則爲false |
< | 小於 | a<b,如果a小於b,則爲true,否則爲false |
<= | 小於等於 | a<=b,如果a小於等於b,則爲true,否則爲false |
注意:
- 關係運算符的運算結果都是boolean類型,要麼是true,要麼是false。
- = 是賦值符號, == 纔是判斷是否相等的符號。
13.5 邏輯運算符
什麼是邏輯運算符?
1、邏輯運算符用於連接關係表達式,描述更復雜的邏輯關係。
2、邏輯運算符的運算結果是boolean類型。
邏輯運算符有哪些
符號 | 說明 | 格式 | 運算結果 |
---|---|---|---|
& | 邏輯與 | 表達式1 & 表達式2 | 有false則false |
| | 邏輯或 | 表達式1 | 表達式2 | 有true則true |
! | 邏輯非 | ! (表達式) | 對表達式結果取反 |
^ | 邏輯異或s | 表達式1 ^ 表達式2 | 不同爲true,相同爲false |
短路邏輯運算符(掌握)
符號 | 作用 | 說明 |
---|---|---|
&& | 短路與 | 作用和&相同,但是有短路效果 |
|| | 短路或 | 作用和|相同,但是有短路效果 |
區別:
- 表達式1 & 表達式2 :所有表達式都會執行。
- 表達式1 && 表達式2 :如果表達式1爲false,則右邊表達式不再執行,可以提高效率。
- 表達式1 | 表達式2 :所有表達式都會執行。
- 表達式1 || 表達式2 :如果表達式1爲true,則右邊表達式不再執行,可以提高效率。
實際開發中,會使用短路與&&、短路或||來提高運算效率。
13.6 三元運算符(三目運算符)
語法格式:
判斷表達式 ? 表達式1 : 表達式2;
執行流程:
執行判斷表達式,判斷結果是boolean類型,爲true時執行表達式1並返回結果,false執行表達式2並返回結果。
應用場景
/*
需求:(使用三元運算符)把三個整數按從小到大打印。
步驟:
求最小值
求最大值
中間值:三個數的和 - 最小值 - 最大值
*/
public class SanYuanDemo4{
public static void main(String[] args){
int a = 60;
int b = 20;
int c = 30;
//求最小值
int tempMin = a<b? a:b;
int min = tempMin<c? tempMin:c;
//求最大值
int tempMax = a>b?a:b;
int max = tempMax>c?tempMax:c;
//中間值:三個數的和 - 最小值 - 最大值
int mid = a+b+c-min-max;
//按從小到大打印
System.out.println(min);
System.out.println(mid);
System.out.println(max);
}
}
14. 鍵盤錄入:Scanner類
Scanner類的作用是什麼
Scanner是JDK提供的用於獲取鍵盤輸入的數據的工具類。該類位於java.util包下。
Scanner的使用步驟
1、導包 import java.util.Scanner
2、創建Scanner的對象 Scanner sc = new Scanner(System.in);
3、調用方法接收數據 int num = sc.nextInt();
/*
需求:Scanner錄入數據求兩個整數的和
*/
//導包
import java.util.Scanner;
public class ScannerDemo2 {
public static void main(String[] args) {
//創建Scanner對象
Scanner sc = new Scanner(System.in);
//提示用戶輸入
System.out.println("請輸入第一個數字:");
//獲得鍵盤輸入
int a = sc.nextInt();
System.out.println("請輸入第二個數字:");
int b = sc.nextInt();
//求和
int sum = a + b;
//打印求和結果
System.out.println("和爲:" + sum);
}
}
15. 進制
15.1 概念
進制也就是進位制,是人們規定的一種進位方法。 對於任何一種進制—X進制,就表示某一位置上的數運算時是逢X進一位。
十進制是逢十進一,十六進制是逢十六進一,二進制就是逢二進一,以此類推,x進制就是逢x進位。
15.2 常見的進制
二進制:由兩個基本數字0,1組成,運算規律是逢二進一.計算機都使用二進制表示數據.
八進制:由0、1、2、3、4、5、6、7組成,運算規律是逢八進一.
十進制:由0,1,2、3、4、5、6、7、8、9組成.
十六進制:由0~9以及A,B,C,D,E,F組成.
15.3 進制之間的轉換
15.3.1 十進制和二進制之間轉換
十進制—>二進制
對於整數部分,用被除數反覆除以2,除第一次外,每次除以2均取前一次商的整數部分作被除數並依次記下每次的餘數。
另外,所得到的商的最後一位餘數是所求二進制數的最高位。
二進制—>十進制
進制數第1位的權值是2的0次方,第2位的權值是2的1次方,第2位的權值是2的2次方……公式:第N位 * 2的N-1次方,結果再相加.
15.3.2 十進制和十六進制之間轉換
十進制—>十六進制:
10進制數轉換成16進制的方法,和轉換爲2進制的方法類似,唯一變化:除數由2變成16。
十六進制—>十進制:
第0位的權值爲16的0次方,第1位的權值爲16的1次方,第2位的權值爲16的2次方……
16. 原碼、反碼、補碼
16.1 概述
在計算機內,有符號數有3種表示法:原碼、反碼和補碼,所有數據的運算都是採用補碼進行的
16.2 原碼
寫出二進制,正數符號位爲0,負數符號位爲1
16.3 反碼
正數的反碼是本身,負數的反碼是在其原碼的基礎上, 符號位不變,其餘各個位取反
16.4 補碼
正數的補碼就是其本身,負數的補碼是在其原碼的基礎上, 符號位不變, 其餘各位取反, 最後+1. (即在反碼的基礎上+1)
17. 流程控制語句
流程控制語句分爲哪幾類
順序結構、選擇(分支)結構、循環結構
17.1 順序結構
按照代碼書寫順序,從上往下執行。
17.2 選擇結構(if switch)
17.2.1 if結構
if語句格式1
if (關係表達式) {
語句體;
}
執行流程:
1、首先計算關係表達式的值。
2、表達式的值爲 true 時執行語句體,爲 false 時不執行語句體。
3、往下執行 if結構後面的語句內容。
if語句格式2
if(關係表達式){
語句體1;
}else{
語句體2;
}
執行流程:
1、首先計算關係表達式的值。
2、表達式的值爲 true 時執行語句體1,爲 false 時執行語句體2。
3、繼續執行 if-else 結構後面的語句內容。
if語句格式3
if(關係表達式1){
語句體1;
}else if(關係表達式2){
語句體2;
}else{
語句體3;
}
//【注意】 該格式中可以有多個else if結構,可以沒有else結構。
執行流程:
1、首先計算關係表達式1的值。
2、如果爲 true 則執行語句體1,爲 false 時計算關係表達式2的值。
3、如果爲 true 則執行語句體2,爲 false 時計算關係表達式3的值,以此類推。
4、所有關係表達式都爲false時,執行else裏的語句體n+1。
//案例:鍵盤錄入一個1~7的整數,輸出對應的星期一到星期日。
//導包
import java.util.Scanner;
public class IfTest{
public static void main(String[] args){
//創建Scanner對象
Scanner sc = new Scanner(System.in);
System.out.println("請輸入一個整數(1~7):");
//接收鍵盤錄入的整數
int week = sc.nextInt();
//使用if-elseif結構判斷
if(week==1){
System.out.println("星期一");
}else if(week==2){
System.out.println("星期二");
}else if(week==3){
System.out.println("星期三");
}else if(week==4){
System.out.println("星期四");
}else if(week==5){
System.out.println("星期五");
}else if(week==6){
System.out.println("星期六");
}else if(week==7){
System.out.println("星期日");
}else{
System.out.println("您輸入的數字無效!");
}
}
}
17.2.2 switch結構
switch語句格式
switch(表達式){ //整數 byte short int //char 字符串 //枚舉
case 值1:
語句體1;
break;
case 值2:
語句體2;
break;
...
default
語句體n+1;
break;
}
執行流程:
1、先計算括號中表達式的值。
2、將結果依次和case後面的值比較,匹配上的就執行case對應的語句體,遇到break就結束switch結構。
3、當所有的case值都不匹配時,執行default後面的語句體n+1, default省略break,效果一樣。
/*
需求: 鍵盤輸入1 2 3, 輸出對應的 "冠軍" ,"亞軍", "季軍"
*/
public class SwitchDemo {
public static void main(String[] args) {
//獲取鍵盤錄入
Scanner sc = new Scanner(System.in);
System.out.println("請輸入一個整數(1~3):");
int num = sc.nextInt();
switch(num){
case 1:
System.out.println("冠軍");
break;
case 2:
System.out.println("亞軍");
break;
case 3:
System.out.println("季軍");
break;
default:
System.out.println("無");
}
}
}
switch的注意事項:
1、switch中表達式的值:byte short char int , 枚舉, 字符串
2、case 後面的值不能重複,不能是變量,只能是常量
3、case的值都不匹配的時候,執行default的內容,default可以省略(不建議),default可以改變位置(不建議)
4、break的作用是結束switch語句
5、break可以省略,但是會有case穿透現象
case穿透現象:不用再判斷case的值,直接執行下面的語句,直到遇到break或者程序結束。
case穿透案例:
/*
春夏秋冬
需求:
一年有12個月,分屬於春夏秋冬4個季節,鍵盤錄入一個月份,
請用程序實現判斷該月份屬於哪個季節,並輸出。
春:3、4、5
夏:6、7、8
秋:9、10、11
冬:12、1、2
*/
import java.util.Scanner;
public class SwitchDemo {
public static void main(String[] args) {
//鍵盤錄入月份數據,使用變量接收
Scanner sc = new Scanner(System.in);
System.out.println("請輸入一個月份:");
int month = sc.nextInt();
//case穿透
switch(month) {
case 3:
case 4:
case 5:
System.out.println("春季");
break;
case 6:
case 7:
case 8:
System.out.println("夏季");
break;
case 9:
case 10:
case 11:
System.out.println("秋季");
break;
case 12:
case 1:
case 2:
System.out.println("冬季");
break;
default:
System.out.println("你輸入的月份有誤");
}
}
}
17.3 循環結構
循環語句可以在滿足循環條件的情況下,反覆執行某一段代碼,這段被重複執行的代碼被稱爲循環體語句,當反覆 執行這個循環體時,需要在合適的時候結束循環,否則循環將一直執行下去,形成死循環。
17.3.1 for循環
for循環格式
for (初始化語句; 條件判斷語句; 條件控制語句) {
循環體語句;
}
//案例:for循環打印5次HelloWorld
for(int i=1; i<=5; i++){
System.out.println("HelloWorld");
}
執行流程
1、執行初始化語句:int i = 1(只會執行一次)。
2、執行條件判斷語句 i<=5,如果爲true,執行循環體語句,如果爲false,則結束循環。
3、執行循環體語句 : System.out.println(“HelloWorld”);
4、執行條件控制語句 :i++
5、回到第2步繼續往下執行。
/*
需求:使用for循環統計水仙花數的個數
*/
public class ForDemo5 {
public static void main(String[] args) {
//定義統計變量
int count = 0;
// 1. for循環獲取所有三位數
for(int i=100; i<1000; i++) {
// 2. 得到每個三位數的個,十,百位上的數字
int unit = i/1%10;
int ten = i/10%10;
int hundred = i/100%10;
// 3. 判斷是否是水仙花數 : 個, 十, 百位立方和等於該三位數本身
if(unit*unit*unit + ten*ten*ten + hundred*hundred*hundred == i) {
//4. 統計個數
count++;
}
}
// 5. 循環結束打印個數
System.out.println(count);
}
}
17.3.2 while循環
while循環格式
初始化語句;
while(條件判斷語句){
循環體語句;
條件控制語句;
}
//案例:while循環打印5次HelloWorld
int i = 1;
while(i<=5){
System.out.println("HelloWorld");
i++;
}
執行流程圖
/*
需求:使用while循環求1~100的偶數個數
*/
public class WhileDemo{
public static void main(String[] args){
//定義統計變量
int count = 0;
//初始化循環條件
int i = 1;
//循環獲得1~100的整數
while(i<=100){
//獲得偶數
if(i%2==0){
//統計個數
count++;
}
//控制循環條件
i++;
}
//循環結束,打印偶數個數
System.out.println("1~100的偶數個數爲:"+count);
}
}
17.3.3 do while循環
do-while循環格式
初始化語句;
do {
循環體語句;
條件控制語句;
}while(條件判斷語句);
//案例:while循環打印5次HelloWorld
int i = 1;
do{
System.out.println("HelloWorld");
i++;
}while(i<=5);
執行流程
1、執行初始化語句。(只執行一次)
2、執行循環體語句。
3、執行條件控制語句。
4、執行條件判斷語句,如果爲false則結束循環,如果爲true則回到第2步繼續執行。
注意:do-while循環至少會執行一次循環體語句。
17.3.4 三種循環的區別
for | while | do-while | |
---|---|---|---|
特點 | 先判斷,再執行 | 先判斷,再執行 | 先執行,後判斷(至少執行一次) |
初始化變量 | for循環外無法使用初始化變量 | 循環結束後,初始化變量能繼續使用 | 循環結束後,初始化變量能繼續使用 |
適用場景 | 循環次數確定的情況 | 循環次數不確定的情況 | 循環至少需要執行一次 |
依次推薦使用:for循環 、while循環 、do-while循環
三種循環的死循環簡單寫法:
//1、for循環
for(;;){
}
//2、while循環(建議)
while(true){
}
//3、do-while循環
do{
}while(true);
17.4 跳轉控制語句
17.4.1 break關鍵字
break使用場景:
1、在switch中,用於結束switch結構。
2、在循環中,用於結束break所在循環。
3、當有循環嵌套時,可以爲循環加上標籤,讓break結束指定循環。
注意:
break語句後面不能直接跟其他語句,否則會編譯報錯。
17.4.2 continue關鍵字
continue使用場景:
1. continue只能在循環中使用,用於跳過一次循環,開始下一次循環。
2. 當有循環嵌套時,可以配合標籤,跳到指定循環繼續執行。
注意:
continue後面不能直接跟其他語句,否則會編譯報錯。
17.4.3 break和continue的區別
break:結束整個循環。
continue:跳過本次循環,繼續下一次循環。
public class ControlDemo{
public static void main(String[] args){
for(int i=1; i<=5; i++){
if( i%2==0 ){
continue; //遇到continue開始下次循環:打印奇數
// break; //遇到break結束整個循環
}
}
System.out.println(i);
}
}
/*
模擬一個用戶系統
控制檯顯示一個用戶菜單:
輸入數字選擇您要的操作:
1.新增用戶 2.修改用戶 3.刪除用戶 4.查看信息 5.退出系統
工作人員輸入對應的編號進行操作,當輸入5時退出系統。
*/
import java.util.Scanner;
public class BreakDemo{
public static void main(String[] args){
//創建鍵盤錄入對象
Scanner sc = new Scanner(System.in);
//死循環
loop:while(true){
System.out.println("輸入數字選擇您要的操作:");
System.out.println("1.新增用戶 2.修改用戶 3.刪除用戶 4.查看信息 5.退出系統");
int num = sc.nextInt();
switch(num){
case 1:
System.out.println("新增成功");
break;
case 2:
System.out.println("修改成功");
break;
case 3:
System.out.println("刪除成功");
break;
case 4:
System.out.println("當前用戶數1000");
break;
case 5:
System.out.println("歡迎使用本軟件");
//結束指定循環:loop
break loop; //結束loop標誌的的循環
default:
System.out.println("您的輸入有誤,請重新輸入!");
}
}
}
}
18. 隨機數:Random類
認識Rondom類
Random是java提供的工具類,位於【 java.util 】包下,用於產生隨機數。
Random類的使用步驟
1.導包
import java.util.Random;
2.創建對象
Random r = new Random();
3.產生隨機數
int num = r.nextInt(100);//獲取0~99的隨機數
注意:r.nextInt(100); 獲取0~99的隨機數
r.nextInt(200); 獲取0~199的隨機數
說明:
nextInt( 數值 ):代表隨機生成並返回一個整數,如果括號數值爲10,表示生成0-9的整數,數值20,表示生成0~19的整數
產生範圍65~90之間的整數 int num = r.nextInt(26)+65; 0~25 + 65
產生範圍97~122之間的整數 int num = r.nextInt(26)+97; 0~25 + 97
/*
需求:隨機生成一個1~100之間的整數.
*/
//1.導包
import java.util.Random;
public class RandomDemo{
public static void main(String[] args){
//2.創建Random對象
Random r = new Random();
//3.調用方法產生隨機數
int num = r.nextInt(100)+1;
System.out.println(num);
}
}