《Java架構築基》從Java基礎講起——Java基礎知識

1. Java標識符規則

1.1 組成規則

  • 英文大小寫字母
  • 數字字符
  • $或_

1.2 注意事項

  • 不能以數字開頭
  • 不能是Java中的關鍵字
  • 區分大小寫
  • 不能有空格

1.3 命名規範【必須見名知意】

  • 下劃線式命名:my_name
  • 駝峯式命名:myName
  • 類,接口命名:必須是大寫字母開頭,比如PersonActivity
  • 方法,變量【字符串】命名:getData(),otherName
  • 常量命名:一般全是大寫,比如MAX_VALUE

2. 常量和變量

2.1 什麼是常量和變量

  • 其值不可以改變的稱之爲常量
  • 其值會發生變化的稱之爲變量

2.2 常量有哪些

  • 字符串常量 用雙引號包括的 "hello world"
  • 整型常量 所有的整數 199
  • 小數常量 所有的小數 4.50
  • 字符常量 用單引號包括的 'a'
  • 布爾常量 true和false
  • 空常量 null

2.3 變量

  • 用來描述值可以變化的量,比如室外溫度,App活躍用戶量等

3. 進制

3.1 進制有哪些

  • 二進制:0和1 前綴0B或者0b 比如:0B1001 轉爲十進制是9
  • 八進制:0-7 前綴0 比如:0103
  • 十進制【我們常用的】:0-9 沒有前綴
  • 十六進制:0-9 和 A-F 前綴0x或者0X 比如:0x123
  • 進制轉化:任何進制轉化爲十進制公式:係數 * 底數 ^ 指數
0b1010 = 1 * 2^3 + 0 *2^2 + 1*2^1 + 0*2^0
       = 8 + 0 + 2 + 0
       = 10

0123  = 1*8^2 + 2*8^1 + 3*8^0
      = 64 + 16 + 3
      = 83

0x123 = 1*16^2 + 2*16^1 + 3*16^0
      = 256 + 32 + 3
      = 291

3.2 補碼

正數的補碼和原碼相同

5
原碼:0000 0101
補碼:0000 0101
    * 負數的補碼是它的反碼加1

-5:
原碼:1000 0101
反碼:1111 1010
    +         1
------------------
補碼  1111 1011

4. 字符編碼

常見的字符編碼

  • ASCII碼
  • GBK碼
  • Unicode碼【佔2個字節】

5. 運算符

5.1 運算符有哪些?

  • 算術運算符
  • 賦值運算符
  • 關係運算符
  • 邏輯運算符
  • 三目運算符
  • 特殊運算符:位運算符

5.2 算術運算符

,- , * , / , %【取餘】 , ++【自加】, --【自減】

5.3 賦值運算符

= , += , -= , *= , /= , %=

5.4 關係運算符

== , > , < , >= , <= , !=

5.5 邏輯運算符

& ,^ ,| ,&& ,|| ,! , ^

5.6 三目運算符

a == b ? c : d
格式:(條件表達式)?表達式1:表達式2

5.7 位運算符

& , | , ^ , ~ , << , >> , >>>

6. Java基本語句結構

6.1 語句結構種類

  • 順序結構
  • 選擇結構
  • 循環結構

6.2 順序結構

從上到下依次執行

6.3 選擇結構【可以嵌套】

if , if else , if else if …… else
switch case【支持byte,short,char,int,String】

6.4 循環結構

for

for(初始化語句;判斷條件語句;控制條件語句) {
         循環體語句;
}
第一步:先執行初始化語句,只執行一次
第二步:執行判斷條件語句
第三部:執行循環體語句
第四步:執行控制條件語句,然後再執行循環體語句【循環】

while

初始化語句;
while(判斷條件語句) {
    循環體語句;
    控制條件語句;
}

do while

do {
         循環體語句;
}while((判斷條件語句);

7. Java方法

7.1 定義

方法就是完成特定功能的代碼塊

  • 系統方法,只需要會使用,不需要知道內部的結構
  • 自定義方法:方法的內部實現需要我們來寫
  • 方法內部不能再嵌套方法

7.2 格式

  • 方法格式
  • 修飾符   返回值類型   方法名(參數類型 參數 , ……){
     函數體
     return 返回值
    }
  • 修飾符: public static或直接是public或是其它private
  • 返回類型:所有的數據類型(基本類型:int ,char ,float, long, 引用類型:String)
  • 方法名:1:見名知意 2: getMax
  • 參數類型:所有的數據類型 ,如果一個方法沒有返回值,則返回值類型爲void
  • 參數名:變量名
  • 返回值:就是要返回的結果(這個結果必須和返回類型一致)

8.數組

8.1 數組概念

數組是一個容器,可以存儲多個變量,這些變量數據類型要一致
數組既可以存儲基本數據類型,也可以存儲引用數據類型

8.2 一維數組

數組定義格式

格式1:數據類型【】 數組名
格式2:數據類型 數組名【】

int[] a;     定義了一個int類型的數組a;
int a[];    定義了一個int類型的a數組;
推薦使用第一種定義方式。

數組的初始化

  • Java中的數組必須先初始化,然後才能使用。
  • 所謂初始化:就是爲數組中的數組元素分配內存空間,併爲每個數組元素賦值。

初始化分類

  • a:動態初始化: 只指定長度,由系統給出初始化值
  • b:靜態初始化: 給出初始化值,由系統決定長度
  • 注意事項:這兩種方式,只能使用一種,不能進行動靜結合

8.3 二維數組

數組定義格式

  • 數據類型[][] 變量名 = new 數據類型[m][n];
  • m表示這個二維數組有多少個一維數組
  • n表示每一個一維數組的元素個數

舉例:

int[][] arr = new int[3][2];
定義了一個二維數組arr
這個二維數組有3個一維數組,名稱是arr[0],arr[1],arr[2]
每個一維數組有2個元素,可以通過arr[m][n]來獲取,表示獲取第m+1個一維數組的第n+1個元素

9.Java的內存分配以及棧和堆的區別

9.1 先了解幾個概念

  • 方法區
  • 本地方法去
  • 寄存器
A:棧: 存放的是局部變量
局部變量:在方法定義或者方法聲明上的變量都是局部變量。
B:堆: 存放的是所有new出來的東西
特點:
    a: 每一個new出來的東西都會爲其分配一個地制值。
    b: 每一個變量都有一個默認的值
        byte,short,int,long  -- 0
        float,double            -- 0.0
        char                    -- '\u0000'
        boolean                -- false
        引用數據類型               -- null       
    c: 使用完畢就變成了垃圾,等待垃圾回收器對其回收
C:方法區:(面向對象部分講解)
D:本地方法區:(和系統相關)
E:寄存器:(cpu使用)

10. 使用switch和if-else區別

10.1 switch語句特點

  • 使用switch語句時,要注意表達式必須是符合byte,char,short,int或枚舉類型的表達式,而不能使用浮點類型或long類型。
  • switch語句將表達式的值依次與每個case子語句中的常量值相比較。如果匹配成功,則執行該case語句中的語句,直到遇到break語句爲止。
  • default語句是可選的,當表達式的值與任何一個case語句都不匹配時,就執行default後的語句。

10.2 switch語句與if-else比較

  • if-else只是單純地一個接一個比較;if...else每個條件都計算一遍;
  • 使用了Binary,Tree算法;絕大部分情況下switch會快一點,除非是if-else的第一個條件就爲true。編譯器編譯switch與編譯if...else...不同。不管有多少case,都直接跳轉,不需逐個比較查詢;switch只計算一次值,然後都是test , jmp……有很多else if的時候,用switch case比較清晰
  • switch...case與if...else,if的根本區別在於,switch...case會生成一個跳轉表來指示實際的case分支的地址,而這個跳轉表的索引號與switch變量的值是相等的。從而,switch...case不用像if...else那樣遍歷條件分支直到命中條件,而只需訪問對應索引號的表項從而到達定位分支的目的。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章