2019-3-8 java基礎(chǔ)篇第二天

今日目標

1.理解基本的數(shù)據(jù)類型之間的轉(zhuǎn)化
2.了解常用運算符
3.掌握java中的方法概念,以及使用
4.了解基本的流程控制語言。

1. 數(shù)據(jù)類型

Java程序中要求參與的計算的數(shù)據(jù),必須要保證數(shù)據(jù)類型的一致性,如果數(shù)據(jù)類型不一致將發(fā)生類型的轉(zhuǎn)換


圖片.png

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 類
圖片.png

同理 當我們用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)換原理圖


圖片.png

需要注意的是:

  • 浮點轉(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)起來組成一張表.


圖片.png

2 運算符

2.1算數(shù)運算符

圖片.png

前面的加減乘除都比較簡單,我們來看最后的自增和自減
++ 運算,變量自己增長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 賦值運算符

圖片.png

因為這些比較簡單就不做過多解釋

2.3 比較運算符

圖片.png

兩個數(shù)據(jù)之間做比較,返回值為booblean值

2.4 邏輯運算符

圖片.png

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é)束。
圖片.png
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();
  }  
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容