banner
Onei

Onei

github
nintendo switch
discord server
steam
pixiv
bento
follow

☕ Java 入門

🏗️ Java 技術棧#

  • 程式基礎
  • 面向對象
  • 陣列
  • 異常機制
  • 常用 API
  • 集合 + Map
  • IO 流
  • 多執行緒
  • 網路程式設計
  • 正則表達式
  • lambda 表達式 + 函數式介面
  • 反射機制
  • GUI

📌 Java 方向#

  • JavaSE
  • JavaME
  • JavaWEB
  • JavaEE

🔰 Java 特性#

  • 多執行緒
  • 跨平台
  • 面向對象
  • 自動垃圾回收

Java 屬於靜態強類型解釋性語言
靜態類型 創建變數時指定資料類型
動態類型 創建變數時無需指定資料類型 運行後賦值時確定資料類型
強類型 需通過強制轉換類型 轉換類型
弱類型 根據程式上下文環境自動修改資料類型
編譯型 使用編譯器來編譯執行的程式語言
解釋型 使用解釋器來解釋執行的程式語言

javacjava

xxx.java ----->xxx.class ----->Hello World

Windows/Linux/MacOS

  • 執行:運行時 JVM 開機,將所運行的類載入記憶體空間中的靜態區
    • 加載完成後,JVM 會自動調用該類的 main 方法 (只要是方法調用,就會在堆疊記憶體中開闢堆疊幀並壓堆)
    • 如果 main 方法中,有別的方法調用
      • 如果調用的是其他類中的方法,則先把對應類加載到靜態區,然後再堆疊記憶體中開闢堆疊幀
      • 如果調用的是當前類中的方法,則直接在堆疊記憶體開闢堆疊幀
    • 如果被調用的方法中,還有其他方法調用,則繼續開闢堆疊壓堆,一直到堆疊頂部元素,執行完成彈堆 返回上個堆繼續執行
    • 直到main 堆幀彈堆,則整個程式生命週期終止

💾 結構#

記憶體存儲#

電子位 bit 八位 一字節

最高位為符號位

記憶體劃分#

靜態區 / 方法區#

保存靜態資源文件 例如靜態變數 方法 運行時的 class 文件等

VM 堆疊#

以堆疊資料結構為模型創建的一塊空間
主要用於執行方法
結構特徵 先進後出

  • 堆疊頂部元素 最後放進去的元素
  • 堆疊底部元素 第一个放進去的元素
  • 堆疊幀 堆疊資料結構中的元素

壓堆 把堆疊幀放到堆疊空間的過程
彈堆 把堆疊幀在堆疊空間彈出去的過程
每當調用一個方法的時候,該方法就會在堆疊記憶體中開闢一個堆疊,並壓堆到堆疊空間。開始執行,方法執行完後 彈堆 堆銷毀

堆記憶體#

保存類物件和成員變數及成員方法

🧾 資料類型#

基本資料類型#

  • 數值型
    • 整數型
      • byte 8bit
      • short 16bit
      • int 32bit
      • long 64bit
    • 浮點型
      • float 32bit
      • double 64bit
  • 布林型 boolean
  • 字元型 char

注意 ⚠️

  • byte
    取值 127~-128
  • short
    取值 32767~-32768
  • int
    取值 2147483647~-2147483648
  • long
    需要以Ll結尾
  • float
    需要以Ff結尾
    由於 float 採用科學計數法進行存儲 float 的 32 位存儲量遠大於long 的 64 位
  • double
    需要以Dd結尾 或不寫
  • boolean
    只有 truefalse
  • char
    使用單引號表示 並且有且只有一個字元
    char 範圍 0~65535 不需要負數
    支持 Unicode 編碼 4bit 十六進制整型值 0~f \u0000 ~ \uffff

引用資料類型#

  • 陣列
  • 介面

字串#

\ 轉義符
+ 字串拼接符

💱 類型轉換#

布林型 不能參與轉換

  • 低精度到高精度 可以自動類型轉換
  • 高精度 到低精度 需要強制類型轉換

自動類型轉換#

byte --> short --> int --> long --> float --> double

char --> int --> long --> float --> double

強制類型轉換#

多出的高位部分被截斷 有可能損失精度
整數轉換為 char 時 當不考慮符號位時 對應的是 65271
整數轉換為 char 時 忽略負數 將響應負數的二進制轉換為對應的正數 然後再進行 ASCII 碼對照

多類型混合運算#

當進行多類型混合運算時 結果為參與運算的最大類型
當混合運算類型只出現了 byte short int char 四種類型時
任意一種或多種進行運算,結果一定是 int 類型 (可以理解為混合運算的結果為參與運算的最大類型,但最低也是 int 類型)

💬 註解#

單行註解

// XXX

多行註解

/*
 * XXX
 * YYY
 */
/**
 * XXX
 * YYY
 */

可生成 Javadoc 文檔

📛 命名#

強制規則 只允許使用大小寫字母、$_ 、數字(數字不能開頭)不能使用關鍵字和保留字
非強制規則 駝峰命名 見名之意

💩 變數#

全域變數#

全域變數一般是指可以直接調用,不需要二次引用的變數
Java 中不存在全域變數

變數聲明#

使用資料類型劃分記憶體空間 給空間取名,並賦值

變數分類#

分為四類

  • 局部變數 在方法中寫的變數
    無初始值 需初始化
  • 靜態變數 在類體中 被 static 修飾的變數
  • 成員變數 在類體中 沒有被 static 修飾的變數 存放在堆記憶體中
  • 常量
    同時被 staticfinal 修飾的變數

預設值#

  • 整數 0
  • 小數 0.0
  • 字元 \u0000
  • 布林 false
  • 引用 null

作用域#

靜態變數調用 使用類名。靜態變數名 需要考慮權限修飾符

區分#

使用類名區分同名的局部變數和靜態變數
使用 this 區分同名的局部變數和成員變數

優先級#

局部變數可以和靜態變數 / 成員變數可同名
靜態變數和成員變數 不可同名

📐 運算符#

算術運算符#

關係運算符#

> >= < <= == != 結果是布林型
== 基本類型比較數值 引用類型比較記憶體地址

邏輯運算符#

  • & &&
    支持與運算 兩邊是數字 即可進行與運算
    兩個數轉換為二進制進行每位比較 同 1 取 1 反之取 0 結果不大於兩個數中的最小數
  • | ||
  • !
  • ^ 異或 兩邊不一致為真
    兩邊是數字進行異或運算 每二進制位進行比較 不同取 1 相同取 0
  • >> 右移運算
    右移一次 就相當於該數除 2 (符號位不變)
  • >>>
    不考慮符號位 並且不考慮正負數 只在最左邊補0 負數有可能變正數
  • << 左移運算
    向左移動一位 刪除左邊 (非符號位) 右邊補0 相當於該數乘 2

赋值运算符#

+= -= *= /= %=

計算過程中自動進行強制類型轉換

賦值運算屬於右結合,同優先級從右到左計算

int result = x = y = z = 10; 

由於=的右結合性,先執行 z = 10; 再執行 y = z 再執行 x = y 運算

三目運算符#

xxx?yyy:zzz

  • xxx 需要判斷的語句 布林型
  • yyy 判斷為真時執行的語句
  • zzz 判斷為假時執行的語句
載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。