今日目標
1.理解基本的數(shù)據(jù)類型之間的轉(zhuǎn)化
2.了解常用運算符
3.掌握java中的方法概念,以及使用
4.了解基本的流程控制語言。
1. 數(shù)據(jù)類型
Java程序中要求參與的計算的數(shù)據(jù),必須要保證數(shù)據(jù)類型的一致性,如果數(shù)據(jù)類型不一致將發(fā)生類型的轉(zhuǎn)換

1.1自動轉(zhuǎn)換
一個 int 類型變量和一個 byte 類型變量進行加法運算,運算結(jié)果,變量的類型將是 int 類型,這就是出現(xiàn)了數(shù)據(jù)類型的自動類型轉(zhuǎn)換現(xiàn)象。
自動轉(zhuǎn)換:將取值范圍小的類型 自動提升為 取值范圍大的類型 。
從上圖中的位數(shù)我們看到,int的位數(shù)大于byte,因此最終的結(jié)果會轉(zhuǎn)換為int
public static void main(String[] args) {
int i = 1;
byte b = 2;// byte x = b + i; // 報錯//int類型和byte類型運算,結(jié)果是int類型
int j = b + i;
System.out.println(j);
轉(zhuǎn)換原理圖如下
byte 類型內(nèi)存占有1個字節(jié)(8位),在和 int 類型運算時會提升為 int 類型 ,自動補充3個字節(jié)(3*8位),因此計算后的結(jié)果還是 int 類
同理 當我們用int和double變量進行運算的時候,最終得到的必然會是double類型
轉(zhuǎn)換規(guī)則:
前面提過其規(guī)則是范圍小的類型向范圍大的類型提升, byte、short、char 運算時直接提升為 int。8大基本類型的總體規(guī)則如下
byte、short、char‐‐>int‐‐>long‐‐>float‐‐>doub
在學習這里的時候不要死記,記住他們的大小關(guān)系既可。
1.2 強制轉(zhuǎn)換
現(xiàn)在知道了小類型可以自動的轉(zhuǎn)化為大的類型,那么反過來呢。將一個小數(shù)賦值給int,我們將會看到編譯失敗。
其主要原因就是double 類型內(nèi)存8個字節(jié), int 類型內(nèi)存4個字節(jié)。 1.5 是 double 類型,取值范圍大于 int ??梢岳斫鉃?double 是8升的水壺, int 是4升的水壺,不能把大水壺中的水直接放進小水壺。此時我們就要用到強制轉(zhuǎn)化類型
轉(zhuǎn)換格式:
數(shù)據(jù)類型 變量名 = (數(shù)據(jù)類型)被轉(zhuǎn)數(shù)據(jù)值;
將 1.5 賦值到 int 類型,
代碼修改為:
// double類型數(shù)據(jù)強制轉(zhuǎn)成int類型,直接去掉小數(shù)點。
int i = (int)1.
同理,當一個 short 類型與 1 相加,我們知道會類型提升,但是還想給結(jié)果賦值給short類型變量,就需要強制轉(zhuǎn)換。
public static void main(String[] args) {
//short類型變量,內(nèi)存中2個字節(jié)
short s = 1;
/*出現(xiàn)編譯失敗s和1做運算的時候,1是int類型,s會被提升為int類型s+1后的結(jié)果是int類型,將結(jié)果在賦值會short類型時發(fā)生錯誤short內(nèi)存2個字節(jié),int類型4個字節(jié)必須將int強制轉(zhuǎn)成short才能完成賦
*/
s = s + 1;//編譯失敗
s = (short)(s+1);//編譯成功
轉(zhuǎn)換原理圖

需要注意的是:
- 浮點轉(zhuǎn)成整數(shù),直接取消小數(shù)點,可能造成數(shù)據(jù)損失精度。
- int 強制轉(zhuǎn)成 short 砍掉2個字節(jié),可能造成數(shù)據(jù)。
1.3AscII編碼
在計算機的內(nèi)部都是二進制的0、1數(shù)據(jù),如何讓計算機可以直接識別人類文字的問題呢?就產(chǎn)生出了編碼表的概念。
編碼表 :就是將人類的文字和一個十進制數(shù)進行對應(yīng)起來組成一張表.

2 運算符
2.1算數(shù)運算符

前面的加減乘除都比較簡單,我們來看最后的自增和自減
++ 運算,變量自己增長1。反之, -- 運算,變量自己減少1,用法與 ++ 一致。
獨立運算:變量在獨立運算時, 前++ 和 后++ 沒有區(qū)別 。變量 前++ :例如 ++i 。變量 后++ :例如 i++
混合運算:和其他變量放在一起, 前++ 和 后++ 就產(chǎn)生了不同。
變量 前++ :變量a自己加1,將加1后的結(jié)果賦值給b,也就是說a先計算。a和b的結(jié)果都是2
b=++a;
變量 后++ :變量a先把自己的值1,賦值給變量b,此時變量b的值就是1,變量a自己再加1。a的結(jié)果是2,b的結(jié)果是1
b=a++;
2.2 賦值運算符

因為這些比較簡單就不做過多解釋
2.3 比較運算符

兩個數(shù)據(jù)之間做比較,返回值為booblean值
2.4 邏輯運算符

2.5 三元運算符
三元運算符格式:
數(shù)據(jù)類型 變量名 = 布爾類型表達式?結(jié)果1:結(jié)果2
三元運算符計算方式:
布爾類型表達式結(jié)果是true,三元運算符整體結(jié)果為結(jié)果1,賦值給變量。
布爾類型表達式結(jié)果是false,三元運算符整體結(jié)果為結(jié)果2,賦值給變結(jié)果2
3.方法
- 方法:就是將一個功能抽取出來,把代碼單獨定義在一個大括號內(nèi),形成一個單獨的功能
定義格式:
修飾符 返回值類型 方法名 (參數(shù)列表){
代碼...return;
}
定義格式解釋: - 修飾符: 目前固定寫法 public static 。
- 返回值類型: 目前固定寫法 void ,其他返回值類型在后面的課程講解
- 方法名:為我們定義的方法起名,滿足標識符的規(guī)范,用來調(diào)用方法。
- 參數(shù)列表: 目前無參數(shù), 帶有參數(shù)的方法在后面的課程講解。
- return:方法結(jié)束。因為返回值類型是void,方法大括號內(nèi)的return可以不寫。有返回值時必須寫返回值。
3.1方法的調(diào)用
如果在main方法中調(diào)用,可以直接寫方法名字。
public static void main(String[] args) {
//調(diào)用定義的方法
method();
}
//定義方法,被main方法調(diào)用
public static void method() {
System.out.println("自己定義的方法,需要被main調(diào)用運行")
}
注意事項:
- 方法必須定義在一類中
- 方法外方法不能定義在另一個方法的
4.流程控制
一個代碼的執(zhí)行時按照相應(yīng)的順序,我們在編寫代碼的時候必然需要控制相關(guān)代碼的順序來完成我們的邏輯。
4.1順序執(zhí)行。
所謂順序執(zhí)行就是根據(jù)代碼所寫一行一行從上到下執(zhí)行,不會有翻轉(zhuǎn)到前面執(zhí)行的情況。
public static void main(String[] args){
//順序執(zhí)行,根據(jù)編寫的順序,從上到下運行
System.out.println(1);
System.out.println(2);
System.out.println(3);
}
4.2判斷語句
- if語句
第一種格式:
if(關(guān)系表達式){
語句體
}
執(zhí)行流程:
- 首先判斷關(guān)系表達式看其結(jié)果是true還是false
- 如果是true就執(zhí)行語句體
-
如果是false就不執(zhí)行語
圖片.png
public static void main(String[] args){
System.out.println("開始");
// 定義兩個變量
int a = 10;
int b = 20;//變量使用if判斷
if (a == b){
System.out.println("a等于b");
}
int c = 10;
if(a == c){
System.out.println("a等于c");
}
System.out.println("結(jié)束")
- if...else
if(關(guān)系表達式) {
語句體1;
}else {
語句體2
}
執(zhí)行流程:
- 首先判斷關(guān)系表達式看其結(jié)果是true還是false
- 如果是true就執(zhí)行語句體1
-
如果是false就執(zhí)行語句2
圖片.png - if..else if...else
if (判斷條件1) {
執(zhí)行語句1;
} else if (判斷條件2) {
執(zhí)行語句2;
}
...
}else if (判斷條件n) {
執(zhí)行語句n;
} else {
執(zhí)行語句n+1;
}
執(zhí)行流程:
- 首先判斷關(guān)系表達式1看其結(jié)果是true還是false
- 如果是true就執(zhí)行語句體1
- 如果是false就繼續(xù)判斷關(guān)系表達式2看其結(jié)果是true還是false
- 如果是true就執(zhí)行語句體2
- 如果是false就繼續(xù)判斷關(guān)系表達式…看其結(jié)果是true還是false…
-
如果沒有任何關(guān)系表達式為true,就執(zhí)行語句體n+1
圖片.png
4.3 選擇語句switch
格式:
switch(表達式) {
case 常量值1:語句體1;break;
case 常量值2:語句體2;break;
...
default:語句體n+1;break
執(zhí)行流程:
- 首先計算出表達式的值
- 其次,和case依次比較,一旦有對應(yīng)的值,就會執(zhí)行相應(yīng)的語句,在執(zhí)行的過程中,遇到break就會結(jié)束。
- 最后,如果所有的case都和表達式的值不匹配,就會執(zhí)行default語句體部分,然后程序結(jié)束。
注意:一定要有break語句,要不然會進入后不出來的,程序只會遇到break才會停止case。在switch語句中,如果case的后面不寫break,將出現(xiàn)穿透現(xiàn)象,也就是不會在判斷下一個case的值,直接向后運行,直到遇到break,或者運行完整體switch結(jié)束。

switch語句中,表達式的數(shù)據(jù)類型,可以是byte,short,int,char,enum(枚舉),JDK7后可以接收字符
4.4循環(huán)語句for,while,do---while
- for循環(huán)語句格式
for(初始化表達式①; 布爾表達式②; 步進表達式④){
循環(huán)體
}
執(zhí)行流程:
- 執(zhí)行順序:①②③④>②③④>②③④…②不滿足為止。
-
①負責完成循環(huán)變量初始化
-②負責判斷是否滿足循環(huán)條件,不滿足則跳出循環(huán)
-③具體執(zhí)行的語句
-④循環(huán)后,循環(huán)條件所涉及變量的變化
圖片.png - while循環(huán)語句格式
初始化表達式①
while(布爾表達式②){
循環(huán)體③
步進表達式
}
執(zhí)行流程
- 執(zhí)行順序:①②③④>②③④>②③④…②不滿足為止。
- ①負責完成循環(huán)變量初始化。
- ②負責判斷是否滿足循環(huán)條件,不滿足則跳出循環(huán)。
- ③具體執(zhí)行的語句。
-
④循環(huán)后,循環(huán)變量的變化情況
圖片.png - do...while循環(huán)
初始化表達式①
do{
循環(huán)體③
步進表達式④
}while(布爾表達式②)
#######執(zhí)行流程
執(zhí)行順序:①③④>②③④>②③④…②不滿足為止。
①負責完成循環(huán)變量初始化。
②負責判斷是否滿足循環(huán)條件,不滿足則跳出循環(huán)。
-
③具體執(zhí)行的語句
-④循環(huán)后,循環(huán)變量的變化
圖片.png for 和 while 的小區(qū)別:
1.控制條件語句所控制的那個變量,在for循環(huán)結(jié)束后,就不能再被訪問到 了,而while循環(huán)結(jié)束還可以繼續(xù)使用,如果你想繼續(xù)使用,就用while,否則推薦使用for。原因是for循環(huán)結(jié)束,該變量就從內(nèi)存中消失,能夠提高內(nèi)存的使用效率。
2.在已知循環(huán)次數(shù)的時候使用推薦使用for,循環(huán)次數(shù)未知的時推薦使用while
兩種跳出循環(huán)的方式:break
使用場景:
主要用于終止switch或者循環(huán)在選擇結(jié)構(gòu)switch語句中
在循環(huán)語句中
離開使用場景的存在沒有意義
continue
使用場景:
結(jié)束本次循環(huán),繼續(xù)下一次的,多用在for循環(huán)
注意:一定要在循環(huán)的時候設(shè)置出口,否則會死循環(huán),例如你在while(true)這樣永遠無法跳出while循環(huán)
4.5嵌套調(diào)用
簡單總結(jié)就是for循環(huán)里面還有一個for循環(huán)。
- 嵌套循環(huán)格式
for(初始化表達式①; 循環(huán)條件②; 步進表達式⑦) {
for(初始化表達式③; 循環(huán)條件④; 步進表達式⑥) {
執(zhí)行語句⑤;
}
}
- 嵌套循環(huán)執(zhí)行流程:
- 執(zhí)行順序:①②③④⑤⑥>④⑤⑥>⑦②③④⑤⑥>④⑤⑥
- 外循環(huán)一次,內(nèi)循環(huán)多次。
打印5*8的矩形
public static void main(String[] args) {
//5*8的矩形,打印5行*號,每行8個//外循環(huán)5次,內(nèi)循環(huán)8次
for(int i = 0; i < 5; i++){
for(int j = 0; j < 8; j++){
//不換行打印星號
System.out.print("*");
}
//內(nèi)循環(huán)打印8個星號后,需要一次換行
System.out.println();
}
}





