1. 程式人生 > 其它 >回顧Java基礎1

回顧Java基礎1

學習方法

  1. 需求:為什麼學習新技術
    • 工作需要
    • 技術控
  2. 日常工作需求觀察:能否用傳統技術解決
    • 能解決,但是不完美
    • 解決不了
  3. 引出新技術和知識點:知曉新技術優勢所在
  4. 學習進技術或者知識點的基本原理和語法(不考慮細節)
    • 快速入門新技術(基本程式,crud)
    • 能搭出一個大的框架
  5. 等到需求的時候,再研究細節(細節是無止境的,根據專案學習)
    • 注意事項
    • 使用細節
    • 使用規範
    • 如何優化

Java程式碼的一些規範

  1. 類、方法的註釋,要用Javadoc的方式來寫
  2. 非Javadoc的註釋,往往是給程式碼的維護者看的,著重告訴讀者為什麼要這麼寫,如何修改,注意什麼問題等
  3. 使用tab操作,實現縮排,預設整體向右移動,shift+tab整體向左移
  4. 運算子和 = 兩邊習慣性各加一個空格。如:2 + 4 * 5 + 345 - 89
  5. 原始檔使用utf-8編碼
  6. 行寬度不要超過80字元
  7. 程式碼編寫次行風格和行尾風格

運算子

取模運算子的本質

例如

a % b = a - a / b * b;
10 % 3 = 10 - 10 / 3 * 3;   // 1
(-10) % 3 = (-10) - (-10) / 3 * 3;  // -1
10 % (-3) = 10 - 10 / (-3) * (-3);  // 1
(-10) % (-3) = (-10) - (-10) / (-3) * (-3);  // -1

自增運算子

int i = 1;
i = i++;
sout(i);//i = 1
//原理等同於
int i = 1;
int temp;
temp = i++;//temp = 1, i = 2
i = temp;//i = 1
sout(i);//i = 1 temp = 2,但是temp被丟棄了

邏輯運算子

&和&&的區別

邏輯與和短路與的區別,功能上相同,短路與如果第一個條件為false,則不會判斷第二個條件,邏輯與無論第一個條件是什麼,第二個條件都要判斷。效率低。開發中使用的基本都是短路與,效率高。

|與||同理

練習題

boolean x = true;
boolean y = false;
short z = 46;
if((z++ == 46)&&(y = true)) z++;
    T  47         T          48   
if((x = false)||(++z == 49)) z++;
    F             T    49    50
sout(z);// 50

邏輯運算子基本不用&和|,&和|也是位運算子。

賦值運算子

複合賦值運算子會進行型別轉換(強制)

byte b = 2;
b += 3;//正確 
b = b + 3;//錯誤,int型不能轉到byte型

三元運算子

條件?表示式1:表示式2

表示式1和表示式2要為可以賦給接受變數的型別(或強制轉換)

int a = 3;
int b = 5;
int c = a > b ? a : b;//a和b要和c的型別保持一致,或可自動轉換的,或強制轉換為c型別
int c = a > b ? 1.1 : 3.4;//錯    double型別不能轉成int型別
int c = a > b ? (int)1.1 : (int)3.4;//對

原碼、反碼、補碼

  1. Java沒有無符號位,換言之,Java中的數都是有符號的。
  2. 二進位制的最高位表示符號位,0位正,1位負。
  3. 正數的原碼、反碼、補碼都一樣。
  4. 負數的補碼=反碼+1,反碼=補碼-1。
  5. 計算機的儲存和運算都是以補碼的形式。
  6. 看運算結果的時候,看的是原碼。

位運算子

  • &與
  • |或
  • ^異或
  • ~非
  • <<算術左移:符號位不變,低位補0:本質是*2
  • 算術右移:低位溢位,符號位不變,並用符號位補益出的高位:本質是/2
  • 邏輯右移:無符號右移:低位溢位,高位補0

沒有<<<符號

有關位運算

  1. 先將運算數的原碼錶示出來
  2. 將原碼轉換成補碼,進行運算
  3. 獲得結果補碼,回推成原碼
  4. 根據原碼轉換成運算數

原碼、反碼、補碼的轉換,符號位不變

位運算子~。按位取反,符號位也變

程式流程控制

分支控制

  1. 多分支可以沒有else,如果所有的條件表示式都不成立,則一個執行入口都沒有。

  2. 如果有else,所有的條件表示式都不成立,則預設執行else程式碼塊。

巢狀分支

不要超過3層(可讀性不好)

switch分支結構

switch(表示式)中的表示式返回值必須是byte、short、int、char、enum、String這幾種