Java基礎複習

Java基礎複習

1 進制

世界上又兩種人,認識二進制的和不認識二進制的人java

1.1 常見進制

283975 #按照權值進行分型
    2 * 10^5 #該位置數字乘以權值
+     8 *10^
+       3*10^3
+           9*10^2
+               7*10^1
+                   5*10^0
    # 權值 = 10^N 十進制數
  • 十進制:逢10進1,計算權值時以10爲底的n次冪
  • 二進制:逢2進1,計算權值時以2爲底的n次冪
  • 八進制:逢8進1,計算權值時以8爲底的n次冪
  • 十六進制:逢16進1,計算權值時以16爲底的n次冪(1..九、A...F)

0xffff 使用前綴ox表示該數字爲十六進制數 07使用0前綴表示八進制 0b二進制bash

示例:00110110轉換爲十進制數
2^1 + 2^2 + 2^4 + 2^5 = 2+4+16+32 = 54

示例:0x2371轉換爲十進制數
1*16^0 + 7*16^1 + 3*16^2 + 2*16^3 = 1+112+768+8192 = 9073

1.2 進制對照

二進制 八進制 十六進制 十進制
0000 0 0 0
0001 1 1 1
0010 2 2 2
0011 3 3 3
0100 4 4 4
0101 5 5 5
0110 6 6 6
0111 7 7 7
1000 10 8 8
1001 11 9 9
1010 12 A 10
1011 13 B 11
1100 14 C 12
1101 15 D 13
1110 16 E 14
1111 17 F 15
10000 20 F1 16
10001 21 F2 17

ps. 0b1111 1111 = 0x ff ps.計算機底層存儲數據使用二進制函數

示例:將十六進制數 0x2B3C7F82轉換爲二進制
 2     B   3    C    7    F    8    2
0010 1011 0011 1100 0111 1111 1000 0010

示例:將二進制數 01111010111010101010110010101100轉十六進制
0111 1010 1110 1010 1010 1100 1010 1100
 6    A    E    A    A    C    A    C
 結果爲:0x6AEAACAC

1.3 符號位

​ 正數的補碼是其原碼,負數的補碼爲其反碼加一測試

ps.反碼即該編碼各位上的數依次取反的結果編碼

示例:
    0000 0111 byte型整數:十六進制 0x07 十進制 7
    
    1110 0110 byte型負數:十六進制 0x1A 十進制 26
    減一:1110 0110 - 1 = 1110 0101    取反:0001 1010
byte型
最大值:1111 1111 : -1
最小值:1000 1000 : -128

short型
最大值:0111 1111 1111 1111 = 0x7FFFF = 32767
最小值:1000 0000 0000 0000 = 0x8000  = -32768

int型
最大值:0111 1111 1111... = 0x7FFFFFFF
最小值:1000 0000 0000... = 0x80000000

long型
最大值:0x7FFFFFFFFFFFFFFF
最小值:0x8000000000000000

char型
最大值:0xFFFF
最小值:0x0000

2 運算符

2.1 位運算符

位運算 運算 示例
<< 左移(保留符號位) 3<<2 = 12 (左移兩位 322)
>> 右移(保留符號位) 3>>1=1 (0011 => 0001)
>>> 無符號右移 3>>>1
& 與運算 6 & 3 = 2
| 或運算 6 | 3 = 7
^ 異或運算 6 ^ 3 = 5
~ 取反 ~ 6 = -7
示例:
public class BinaryTest{
  public static void main(String[] args){ 
    byte b = (byte)0xC2; // 0x000000C2
    System.out.println(b);
    System.out.println(b << 2); //-248
  }
}

ps.位運算是直接對二進制進行運算code

public class BinaryTest{
  public static void main(String[] args){ 
    int n1 = 0xd7;
        int n2 = 0xc5;
    //  int n1 = 0x7a;
    //  int n2 = 0x9c;
    /*  d7:1101 0111
            c5:1100 0101
        &: 1100 0101   
        |: 1101 0111
        ^: 0001 0110
        ni:0011 1010
        n2:0011 1010
    */   
        // 0111 1010
        // 1001 1100
        // 0001 1000 = 24
    System.out.println(n1 & n2);
        // 0111 1010
        // 1001 1100
        // 1111 1110 = 254
        System.out.println(n1 | n2);
        // 0111 1010
        // 1000 0101 = -123
        System.out.println(~n1);
        // 1001 1100
        // 0110 0011 = -157
        System.out.println(~n2);
        // 0111 1010
        // 1001 1100
        // 1110 0110 = 230
        System.out.println(n1 ^ n2);
  }
}

2.2 自增注意事項

int n = 10;
n = n++;
system.out.println("n="+n);
//n的值爲10 賦值語句從右至左 
// 右n的值爲10待賦值給左
// 右n自增爲11
// 將待賦值的10賦值給左側
//結束

2.3 += 和 + 的區別

short s =3;
s = s+2; //發生了類型變化 右側爲int型
s+=2;       // 未發生類型變化

2.4 比較運算符

運算符 運算 範例 結果 適用範圍
== 相等於 1 == 1 true 全部數據
!= 不等於 1 != 1 false 全部數據
< 小於 2<3 true 基本數據
> 大於 2>3 false 基本數據
<= 小等於 2<=3 true 基本數據
>= 大等於 2>3 false 基本數據
instanceof

2.5 邏輯運算符

  • &邏輯與
  • |邏輯或
  • !邏輯非
  • && 短路與
  • ||短路或
  • ^邏輯異或

ps. & 運算兩邊都會參與運算 不會短路 && 運算會短路對象

a b a&b a|b !a a&&b a^b a||b
true fase true true fase true fase true
true fase fase true fase fase true true
fase true fase true true fase true true
fase true fase fase true fase fase fase
示例:
    3<x<6  //錯誤寫法
    x>3 & x<6
 
  int x = 1;
    int y = 1;
if(x++ == 2 & ++ y =2) System.out.println("判斷爲真!");
//此處 x最終爲2 y最終爲2

  int x = 1;
    int y = 1;
if(x++ == 2 && ++ y =2) System.out.println("判斷爲真!");
//此處 x最終爲2 y最終爲1 發生了運算短路

2.5 三目運算符

​ (條件表達式)?表達式1:表達式2blog

  • 表示式爲ture取表達式1的值
  • 表達式爲fals取表達式2的值
變量以下:
    int n = 10;
    int m = 20;
    int k = 40;
    int max;
示例:取兩個數中較大的數
    max = (n>m)?n:m;
示例:取出三個數中的較大數
    max = (n>m)?(n>k)?n:k:(m>k)?m:k

2.6 運算符優先級

​ 從左到右,搞優先級優先進行運算get

3 流程控制

  • 順序結構:程序按順序從上到下執行
  • 分支結構:根據判斷條件選擇分支進行執行
  • 循環結構:按照循環條件進行循環執行

3.1 分支結構

3.1.1 基本if語句

​ 當括號中的條件爲真時執行後面的分支內容。it

ps.java中分支結構括號中的內容必須時布爾型

if(a == 0) System.out.println("a等於0");

if(a != 0 ){
        System.out.println("a不等於0");
        System.out.println("請從新輸入!");
}

3.1.2 if-else語句

​ 當括號中的條件爲真時,執行if後的分支內容,括號條件爲假時,執行else後的分支內容。

if(a == 0)  System.out.println("a等於0");
  else{
      System.out.println("a不等於0");
      System.out.println("請從新輸入!");
  }

3.1.3 if-else嵌套

​ 判斷規則與if-else相同,將if-else進行嵌套。

if(a == 0) System.out.println("a等於0");
    else if(a == 1)  System.out.println("a等於0");
                else { 
          if (a==3) System.out.println("a等於3");
          System.out.println("a不等於1或者0");
        }

3.1.4 switch分支結構

選擇變量

​ 變量的數據類型:byte,int,char,short,String,枚舉型

基本結構
switch(變量){
    case 常量1:
      ...
      break;
    case 常量2:
      ...
      break;
        case 常量3:
      ...
      break;
    case 常量4:
      ...
      break; 
    case 常量5:
      ...
      break; 
    default:
        ...
      break;
}

3.2 循環結構

​ 在某些條件知足的狀況下,反覆執行特定代碼的功能,包含一下四個部分。

  • 初始化部分(init_statement)
  • 循環條件部分(test_exp)
  • 循環體部分(body_statement)
  • 迭代部分(alter_statement)

ps.while循環、do/while循環、for循環

while循環

語法格式

while(布爾型測試表達式){
  ...
  循環條件修改語句;
}
示例:
  public void testWhile(){  
    int count;
    //初始化語句
    int i = 1;
    //循環因子
    while(i<10){  //循環條件
        count += i;
        //循環體語句
        i++;
        //迭代語句
    }
    System.out.println("count:"+count);
  }

do-while循環

語法格式

do{
  ...
  循環條件修改語句;
}while(布爾型測試表達式)
示例:
public void testDoWhile{
    int result = 0,i=1;
    //初始化語句及循環因子    
    do{
    result+=i
    //循環體語句
    i++
    //迭代語句
  }while(i<=5)//循環條件
    System.out.println("result:"+result);
}

for循環

語法格式

for(初始化語句;布爾測試表達式;循環條件修改語句){        
  ...       
}
int count;
    for(int i=1; i<100; i++) count+=i;
    System.out.println("count:"+count);

無限循環

​ 當循環次數不肯定時,優選while循環。

示例:
    boolean flag = true;
    while(flag){ ... }
    do{...}while(flag)//至少循環一次
示例:
    boolean flag = true;
    for(;;;){...}
    for(;flag;){...}

3.3 特殊流程控制

3.3.1 break 語句

​ break語句用於終止某個語句塊的執行。

示例:
    for(int i=0; i<10; i++)
        if( i==3 ) break;

  label:for(int i=0; i<10; i++){
          for(int i=0; i<10; i++)
            if( i==3 ) break lable;
            }

3.3.2 countinue語句

​ 只能用於循環語句,跳過某次循環。

3.3.3 return語句

​ 結束方法,方法執行的返回。

4 方法

某種功能的封裝 方法 = 方法簽名 + 方法體

​ 方法是類或對象行爲特徵的抽象,也成爲函數。Java中方法不能獨立存在,必須在類中定義。

語法格式

權限修飾符  返回值類型  方法名(參數類型 參數1,參數類型 形參2,...){
  ...
  return 返回值;
}
示例:
    public String printHello(int name){//方法簽名
            Stirng hello = "Hello! "+ name;
            return hello;
    }
  public static void main(String args[]){
        //方法調用
        String welcome = printHello();
        //int a = printHello(); ×
  }
  • 形式參數:在方法被調用時用於接收外部傳入的數據的變量

  • 參數類型:形式參數的數據類型

  • 返回值:方法在執行完畢後返還給調用它的程序的數據

  • 返回值類型:方法要返回的結構的數據類型

  • 實際參數:調用方法時實際穿個函數形式參數的數據

    ps. 返回值爲void的方法表示無返回值

4.1 重載

重載讓方法調用變得簡單

​ 在同一個類中,方法名相同,參數不一樣就造成重載。參數不一樣體如今類型不一樣、順序不一樣、參數個數不一樣。

示例:
    public class OverLoadTest{

    public static int add(int a, int b){
      return a+b;
    }

    public static int add(int a, byte b){
      return a+b;
    }

    public static int add(int a, double b){
      return (int)a+b;
    }
  }

4.2 方法的參數傳遞

​ java中只有值傳遞,形參是實參的一個複製品。

4.3 方法調用的原理

4.3.1 棧幀

​ 方法棧中的組成單元,包括了方法及其局部變量。

4.3.2 方法棧

​ 一個先進後出的結構,用於存放方法,其單元由棧幀組成。

4.3.3 方法棧原理

說明:

  1. main函數中調用add方法
  2. main函數調用參數傳遞後壓棧
  3. 開始add方法的方法體執行
  4. add方法中又調用test方法
  5. add方法入棧
  6. 進行test方法執行
  7. test執行完成出棧
  8. add執行完成出棧 (將返回值拷貝到臨時空間)
  9. main方法執行 (從臨時取得到返回值繼續執行)

4.4 跨類調用方法

​ 經過類名大寫加上.的方式能夠訪問該類的靜態方法。

public class Method{
    public static String getMethod(){
      return "Method";
    }
  }

  public class Test{
    public static void main(String[] args){
      String method = Method.getMethod;
      Sysem.out.println()
    }
 }
相關文章
相關標籤/搜索