首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Java 基礎核心:運算符優先級、堆棧記憶體、數組與關鍵字詳解

     編輯:Java 綜合教學

Java 基礎核心:運算符優先級、堆棧記憶體、數組與關鍵字詳解

在 Java 程式設計的學習旅程中,掌握基礎語法與記憶體模型是構建高效程式的基石。本文將系統梳理運算符優先級與結合性、Java 關鍵字速查、JVM 記憶體區域劃分、基本輸入輸出、類型轉換、流程控制語句以及數組的核心特性與操作,幫助你建立扎實的知識體系。

一、運算符:優先級與結合性

運算符決定了運算式的求值順序。記住這句口訣:「點號自反非,算關邏賦移」,即可快速回憶優先級從高到低的順序:

  • 點號(.)、自增/自減(++、--)、反/非(~、!)
  • 算術(*、/、%、+、-)
  • 關係(>、>=、<、<=、instanceof)
  • 邏輯(&、^、|、&&、||)
  • 賦值(=、+=、-= 等)
  • 移位(<<、>>、>>>)

同優先級運算符通常遵循左結合性(從左往右),賦值運算符則為右結合性。

二、Java 關鍵字速查表

Java 保留關鍵字約 50 個,按功能分類如下:

分類關鍵字
存取控制private、protected、public
類別/介面/繼承class、interface、extends、implements、abstract、final
基本型別boolean、byte、char、short、int、float、double、long、void
流程控制if、else、switch、case、default、for、while、do、break、continue、return
例外處理try、catch、finally、throw、throws
多執行緒/同步synchronized、volatile、strictfp、native
封裝/匯入package、import
物件建立/引用new、this、super、instanceof
常值true、false、null
其他static、transient、default、enum、assert、goto*、const*

* goto 和 const 為保留字,目前未使用。

重點關鍵字補充:

  • instanceof:判斷左側物件是否為右側類別/介面的實例,回傳 boolean。
    String s = "Hello"; boolean b = s instanceof Object; // true
  • volatile:保證變數跨執行緒可見性,禁止指令重排序。
  • transient:標記欄位不參與序列化。
  • strictfp:強制浮點運算遵循 IEEE 754 標準,確保跨平台一致性。
  • native:標記方法由 JNI 實現(C/C++)。

三、JVM 記憶體區域劃分與作用

Java 虛擬機在執行時將記憶體劃分為四大區域:

區域儲存內容特點
堆區new 出來的物件、陣列所有執行緒共享,GC 主要作用區,可擴展
棧區基本型別變數、物件參考(引用地址)、方法幀執行緒私有,生命週期隨執行緒,速度快
方法區/資料段類別資訊、常數、靜態變數、字串常量池共享,JDK 8 後移至 Metaspace(元空間)
程式計數器/代碼段當前執行的位元碼指令位址執行緒私有,極小

JVM 記憶體結構圖

四、程式設計細節必知必會

1. Scanner 基本輸入

Scanner in = new Scanner(System.in);
int x = in.nextInt();          // 讀取整數
String str = in.nextLine();    // 讀取整行(含空白)
in.close();                    // 釋放資源

2. int 與 String 相互轉換

int → String(兩種常用方式)

int i = 123;
String s1 = i + "";                 // 方式 1:字串串接(簡潔,但會建立 StringBuilder)
String s2 = String.valueOf(i);      // 方式 2:靜態方法(推薦,null 安全,效率略高)

差異:i + "" 若 i 為 null 會拋 NPE(基本型別不會),String.valueOf 內部處理了 null 回傳 "null" 字串。

String → int

String str = "456";
int num1 = Integer.parseInt(str);        // 回傳基本型別 int(推薦)
Integer num2 = Integer.valueOf(str);     // 回傳包裝類 Integer(會緩存 -128~127)

差異:parseInt 直接回傳 primitive,避免拆箱/裝箱開銷;valueOf 回傳物件,利用緩存池可減少物件建立。

int轉String差異 String轉int方式 兩種轉換差異

五、跳轉語句:break 與 continue

  • break:完全終止最近的迴圈(for/while/do-while)或 switch 區塊。
  • continue:跳過本次迴圈剩餘程式碼,直接進入下一次迭代判斷。
  • Java 保留 goto 但不可使用,標籤配合 break/continue 可實現多層跳轉。

六、數組深度解析

核心特性

  1. 同質性:元素型別相同。
  2. 連續記憶體:堆區分配,索引存取 O(1)。
  3. 定長:一經宣告長度不可變(需用集合類實現動態)。
  4. 索引從 0 開始,支援多維陣列(陣列的陣列)。
  5. 只能在堆區分配,new 操作符類似 C 的 malloc。

宣告與初始化四種寫法

// 1. 僅宣告引用,未分配記憶體
float[] fAry;

// 2. 宣告並分配長度,元素為預設值(0/false/null)
char[] chAry = new char[10];

// 3. 宣告、分配、靜態初始化(推薦)
int[] ary1 = new int[]{1, 2, 3, 4, 5};

// 4. 簡寫語法糖(僅限宣告時)
int[] ary2 = {1, 2, 3, 4, 5};

陣列賦值與引用共享陷阱


int[] a = {1, 2, 3};
int[] b = a;        // b 指向同一個陣列物件
b[0] = 99;
System.out.println(a[0]); // 輸出 99!兩個引用操作同一堆記憶體

陣列賦值引用共享示意圖

結論:陣列變數儲存的是引用,賦值只是複製引用。若需獨立副本,請用 Arrays.copyOf、clone() 或迴圈逐元素複製。


掌握這些基石知識,能讓你在進階學習(集合框架、多執行緒、JVM 調優)時更得心應手。建議動手實驗每個範例,加深記憶體模型與語法行為的直觀理解。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved