今日目標
1.理解基本的數(shù)據(jù)類型之間的轉化
2.了解常用運算符
3.掌握java中的方法概念,以及使用
4.了解基本的流程控制語言损合。
1. 數(shù)據(jù)類型
Java程序中要求參與的計算的數(shù)據(jù)毁嗦,必須要保證數(shù)據(jù)類型的一致性亲茅,如果數(shù)據(jù)類型不一致將發(fā)生類型的轉換
1.1自動轉換
一個 int 類型變量和一個 byte 類型變量進行加法運算,運算結果狗准,變量的類型將是 int 類型克锣,這就是出現(xiàn)了數(shù)據(jù)類型的自動類型轉換現(xiàn)象。
自動轉換:將取值范圍小的類型 自動提升為 取值范圍大的類型 腔长。
從上圖中的位數(shù)我們看到袭祟,int的位數(shù)大于byte,因此最終的結果會轉換為int
public static void main(String[] args) {
int i = 1;
byte b = 2;// byte x = b + i; // 報錯//int類型和byte類型運算捞附,結果是int類型
int j = b + i;
System.out.println(j);
轉換原理圖如下
byte 類型內存占有1個字節(jié)(8位)巾乳,在和 int 類型運算時會提升為 int 類型 您没,自動補充3個字節(jié)(3*8位),因此計算后的結果還是 int 類同理 當我們用int和double變量進行運算的時候胆绊,最終得到的必然會是double類型
轉換規(guī)則:
前面提過其規(guī)則是范圍小的類型向范圍大的類型提升氨鹏, byte、short辑舷、char 運算時直接提升為 int喻犁。8大基本類型的總體規(guī)則如下
byte、short何缓、char‐‐>int‐‐>long‐‐>float‐‐>doub
在學習這里的時候不要死記肢础,記住他們的大小關系既可。
1.2 強制轉換
現(xiàn)在知道了小類型可以自動的轉化為大的類型碌廓,那么反過來呢传轰。將一個小數(shù)賦值給int,我們將會看到編譯失敗谷婆。
其主要原因就是double 類型內存8個字節(jié)慨蛙, int 類型內存4個字節(jié)。 1.5 是 double 類型纪挎,取值范圍大于 int 期贫。可以理解為 double 是8升的水壺异袄, int 是4升的水壺通砍,不能把大水壺中的水直接放進小水壺。此時我們就要用到強制轉化類型
轉換格式:
數(shù)據(jù)類型 變量名 = (數(shù)據(jù)類型)被轉數(shù)據(jù)值烤蜕;
將 1.5 賦值到 int 類型封孙,
代碼修改為:
// double類型數(shù)據(jù)強制轉成int類型,直接去掉小數(shù)點讽营。
int i = (int)1.
同理虎忌,當一個 short 類型與 1 相加,我們知道會類型提升橱鹏,但是還想給結果賦值給short類型變量膜蠢,就需要強制轉換。
public static void main(String[] args) {
//short類型變量蚀瘸,內存中2個字節(jié)
short s = 1;
/*出現(xiàn)編譯失敗s和1做運算的時候狡蝶,1是int類型,s會被提升為int類型s+1后的結果是int類型贮勃,將結果在賦值會short類型時發(fā)生錯誤short內存2個字節(jié),int類型4個字節(jié)必須將int強制轉成short才能完成賦
*/
s = s + 1苏章;//編譯失敗
s = (short)(s+1);//編譯成功
轉換原理圖
需要注意的是:
- 浮點轉成整數(shù)寂嘉,直接取消小數(shù)點奏瞬,可能造成數(shù)據(jù)損失精度。
- int 強制轉成 short 砍掉2個字節(jié)泉孩,可能造成數(shù)據(jù)硼端。
1.3AscII編碼
在計算機的內部都是二進制的0、1數(shù)據(jù)寓搬,如何讓計算機可以直接識別人類文字的問題呢?就產(chǎn)生出了編碼表的概念。
編碼表 :就是將人類的文字和一個十進制數(shù)進行對應起來組成一張表.
2 運算符
2.1算數(shù)運算符
前面的加減乘除都比較簡單至耻,我們來看最后的自增和自減
++ 運算渔期,變量自己增長1。反之唾琼, -- 運算兄春,變量自己減少1,用法與 ++ 一致锡溯。
獨立運算:變量在獨立運算時赶舆, 前++ 和 后++ 沒有區(qū)別 。變量 前++ :例如 ++i 祭饭。變量 后++ :例如 i++
混合運算:和其他變量放在一起芜茵, 前++ 和 后++ 就產(chǎn)生了不同。
變量 前++ :變量a自己加1倡蝙,將加1后的結果賦值給b九串,也就是說a先計算。a和b的結果都是2
b=++a;
變量 后++ :變量a先把自己的值1悠咱,賦值給變量b蒸辆,此時變量b的值就是1,變量a自己再加1析既。a的結果是2躬贡,b的結果是1
b=a++;
2.2 賦值運算符
因為這些比較簡單就不做過多解釋
2.3 比較運算符
兩個數(shù)據(jù)之間做比較,返回值為booblean值
2.4 邏輯運算符
2.5 三元運算符
三元運算符格式:
數(shù)據(jù)類型 變量名 = 布爾類型表達式眼坏?結果1:結果2
三元運算符計算方式:
布爾類型表達式結果是true拂玻,三元運算符整體結果為結果1,賦值給變量宰译。
布爾類型表達式結果是false檐蚜,三元運算符整體結果為結果2,賦值給變結果2
3.方法
- 方法:就是將一個功能抽取出來沿侈,把代碼單獨定義在一個大括號內闯第,形成一個單獨的功能
定義格式:
修飾符 返回值類型 方法名 (參數(shù)列表){
代碼...return;
}
定義格式解釋: - 修飾符: 目前固定寫法 public static 缀拭。
- 返回值類型: 目前固定寫法 void 咳短,其他返回值類型在后面的課程講解
- 方法名:為我們定義的方法起名填帽,滿足標識符的規(guī)范,用來調用方法咙好。
- 參數(shù)列表: 目前無參數(shù)篡腌, 帶有參數(shù)的方法在后面的課程講解。
- return:方法結束勾效。因為返回值類型是void嘹悼,方法大括號內的return可以不寫。有返回值時必須寫返回值层宫。
3.1方法的調用
如果在main方法中調用杨伙,可以直接寫方法名字。
public static void main(String[] args) {
//調用定義的方法
method();
}
//定義方法卒密,被main方法調用
public static void method() {
System.out.println("自己定義的方法缀台,需要被main調用運行")
}
注意事項:
- 方法必須定義在一類中
- 方法外方法不能定義在另一個方法的
4.流程控制
一個代碼的執(zhí)行時按照相應的順序,我們在編寫代碼的時候必然需要控制相關代碼的順序來完成我們的邏輯哮奇。
4.1順序執(zhí)行膛腐。
所謂順序執(zhí)行就是根據(jù)代碼所寫一行一行從上到下執(zhí)行,不會有翻轉到前面執(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(關系表達式){
語句體
}
執(zhí)行流程:
- 首先判斷關系表達式看其結果是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("結束")
- if...else
if(關系表達式) {
語句體1;
}else {
語句體2
}
執(zhí)行流程:
- 首先判斷關系表達式看其結果是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í)行流程:
- 首先判斷關系表達式1看其結果是true還是false
- 如果是true就執(zhí)行語句體1
- 如果是false就繼續(xù)判斷關系表達式2看其結果是true還是false
- 如果是true就執(zhí)行語句體2
- 如果是false就繼續(xù)判斷關系表達式…看其結果是true還是false…
-
如果沒有任何關系表達式為true贸伐,就執(zhí)行語句體n+1
圖片.png
4.3 選擇語句switch
格式:
switch(表達式) {
case 常量值1:語句體1;break;
case 常量值2:語句體2;break;
...
default:語句體n+1;break
執(zhí)行流程:
- 首先計算出表達式的值
- 其次勘天,和case依次比較,一旦有對應的值捉邢,就會執(zhí)行相應的語句脯丝,在執(zhí)行的過程中,遇到break就會結束伏伐。
- 最后宠进,如果所有的case都和表達式的值不匹配,就會執(zhí)行default語句體部分藐翎,然后程序結束材蹬。
注意:一定要有break語句,要不然會進入后不出來的吝镣,程序只會遇到break才會停止case堤器。在switch語句中,如果case的后面不寫break末贾,將出現(xiàn)穿透現(xiàn)象闸溃,也就是不會在判斷下一個case的值,直接向后運行,直到遇到break圈暗,或者運行完整體switch結束掂为。
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)結束后毅糟,就不能再被訪問到 了红选,而while循環(huán)結束還可以繼續(xù)使用,如果你想繼續(xù)使用留特,就用while纠脾,否則推薦使用for。原因是for循環(huán)結束蜕青,該變量就從內存中消失苟蹈,能夠提高內存的使用效率。
2.在已知循環(huán)次數(shù)的時候使用推薦使用for右核,循環(huán)次數(shù)未知的時推薦使用while
兩種跳出循環(huán)的方式:break
使用場景:
主要用于終止switch或者循環(huán)在選擇結構switch語句中
在循環(huán)語句中
離開使用場景的存在沒有意義
continue
使用場景:
結束本次循環(huán)慧脱,繼續(xù)下一次的,多用在for循環(huán)
注意:一定要在循環(huán)的時候設置出口贺喝,否則會死循環(huán)菱鸥,例如你在while(true)這樣永遠無法跳出while循環(huán)
4.5嵌套調用
簡單總結就是for循環(huán)里面還有一個for循環(huán)宗兼。
- 嵌套循環(huán)格式
for(初始化表達式①; 循環(huán)條件②; 步進表達式⑦) {
for(初始化表達式③; 循環(huán)條件④; 步進表達式⑥) {
執(zhí)行語句⑤;
}
}
- 嵌套循環(huán)執(zhí)行流程:
- 執(zhí)行順序:①②③④⑤⑥>④⑤⑥>⑦②③④⑤⑥>④⑤⑥
- 外循環(huán)一次,內循環(huán)多次氮采。
打印5*8的矩形
public static void main(String[] args) {
//5*8的矩形殷绍,打印5行*號,每行8個//外循環(huán)5次鹊漠,內循環(huán)8次
for(int i = 0; i < 5; i++){
for(int j = 0; j < 8; j++){
//不換行打印星號
System.out.print("*");
}
//內循環(huán)打印8個星號后主到,需要一次換行
System.out.println();
}
}