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

Java 基礎核心筆記(二):程序結構、數據類型、變量、運算符、字符串深度解析

     編輯:Java 綜合教學

Java 基礎核心筆記(二):程序結構、數據類型、變量、運算符、字符串深度解析

本文系統梳理 Java 基礎語法核心知識點,涵蓋程序骨架、八大基本類型、變量常量、運算符優先級、字符串不可變機制與 API 實戰,適合入門鞏固、面試速查、知識體系構建。

一、一個最小化 Java 程序剖析

public class FirstExample {
    public static void main(String[] args) {
        System.out.println("we will not use 'hello world' ");
    }
}

核心要素速記

元素 規則/說明
大小寫敏感main ≠ Main,類名大寫開頭,方法小寫開頭
訪問修飾符public:對所有類可見;private/protected/default 見後續封裝章節
類與文件文件名 = 公有類名 + .java(如 FirstExample.java)
main 方法JVM 入口,固定簽名 public static void main(String[] args)
語句結束分號 ;,換行不結束,可跨行寫長語句
代碼塊{ } 界定類體、方法體、塊作用域
字符串字面量雙引號 "...",單引號 'c' 為字符字面量

二、註釋規範

// 單行註釋
/* 多行註釋:不能嵌套,代碼中含 */ 時不可用 */
/** 文檔註釋:javadoc 提取生成 API 文檔,支持 @param @return @see 等標籤 */

三、八大基本數據類型詳細表

1. 整數類型(4 種)

類型 位數/字節 取值範圍 默認值 字面量後綴
byte8 位 / 1 字節-128 ~ 1270無
short16 位 / 2 字節-32,768 ~ 32,7670無
int32 位 / 4 字節-2,147,483,648 ~ 2,147,483,6470無(默認)
long64 位 / 8 字節-9.22e18 ~ 9.22e180LL / l

關鍵點:Java 整型範圍固定跨平台,解決了 C/C++ 移植性問題。整型字面量默認 int,賦值 long 需加 L(如 long x = 100L;)。

2. 浮點類型(2 種)

類型 位數/字節 有效位數 取值範圍 字面量後綴
float32 位 / 4 字節6~7 位±3.4e38F / f
double64 位 / 8 字節15 位±1.79e308D / d(默認)

特殊值:Double.POSITIVE_INFINITY、NEGATIVE_INFINITY、NaN。判斷 NaN 必須用 Double.isNaN(x),x == Double.NaN 永為 false。

3. 字符類型 char

  • 16 位無符號,UTF-16 代碼單元,範圍 \u0000 ~ \uFFFF(0 ~ 65535)。
  • 'A' (字符常量, 65) ≠ "A" (字符串對象)。
  • 轉義字符:\n \t \\ \' \" \uXXXX(Unicode 轉義可出現在標識符/註釋外)。
  • 不建議直接操作 char,輔助字符需雙代碼單元(代理對),易出 Bug,優先用 String、codePoint API。

4. 布爾類型 boolean

  • 只有 true/false,不可與數值互換(C/C++ 中 0/非 0 可作布爾)。
  • if (x = 0) 編譯報錯(賦值非布爾),避免了 C 系經典 Bug。

四、變量與常量

1. 變量聲明初始化

// 語法:類型 變量名 [= 初始值] [, 變量名...];
int a = 10, b = 20;
double rate = 3.14;
boolean flag = true;
  • Java 無「聲明 vs 定義」區分,int i = 10; 同時完成聲明、定義、初始化。
  • 命名規範:駝峰法 lowerCamelCase,見名知意,避免拼音/單字母。

2. 常量 final

final double PI = 3.14159;           // 實例常量,大寫下劃線分隔
static final int MAX_SIZE = 100;     // 類常量(編譯期常量),推薦用於多方法共享
  • const 是保留關鍵字但未使用,必須用 final。
  • 引用類型 final 只固定引用地址,對象內容仍可修改。

五、運算符優先級與核心陷阱

優先級表(高→低,同級左結合,除右結合標註)

1. [] . () (方法調用)                    ← 最高
2. ! ~ ++ -- + - (一元) (類型轉換) new   ← 右結合
3. * / %                                 ←
4. + - (二元)                            ←
5. << >> >>>                             ←
6. < <= > >= instanceof                  ←
7. == !=                                 ←
8. & (位與)                              ←
9. ^ (位異或)                            ←
10. | (位或)                             ←
11. && (邏輯與)                          ← 短路
12. || (邏輯或)                          ← 短路
13. ?: (三元)                            ← 右結合
14. = += -= *= /= %= &= ^= |= <<= >>= >>>= ← 右結合,最低

必知陷阱實戰

  1. 整數除零拋異常,浮點數除零得 Infinity/NaN。
  2. 自增自減副作用:int m=7; int a=2*++m; // m=8,a=16 vs int n=7; int b=2*n++; // n=8,b=14。
  3. 短路邏輯:if(x!=0 && 1/x > y) 避免除零,&&/|| 短路求值。
  4. 位運算:& | ^ ~ << >> >>>,移位操作數取模 32(long 模 64),1 << 35 == 1 << 3。
  5. Math 工具類:Math.sqrt/abs/max/min/round/random 為 static 方法,JDK 5+ 可 import static java.lang.Math.*; 直接用方法名。

六、數值類型轉換規則

1. 自動提升(隱式)

表達式中:double > float > long > int,低向高提升。byte/short/char 參與運算直接提升為 int。

2. 強制轉換(顯式)

double x = 9.997;
int n1 = (int) x;          // 截斷 → 9
int n2 = (int) Math.round(x); // 四捨五入 → 10
  • 精度損失風險:int n=123456789; float f=n; // f=1.23456792E8 丟失低位。
  • boolean 不參與任何數值轉換,需用三元 b ? 1 : 0。

3. 轉換圖示(實心箭頭無損失,虛線箭頭可能損失精度)

數值轉換關係圖

七、字符串深度解析:不可變性、內存模型與 API 精華

1. 本質:不可變的 Unicode 字符序列

  • 底層 final char[] value(JDK 9+ 改為 byte[] + coder 緊湊字符串)。
  • 不可變意味著:任何修改操作(拼接、替換、截取)都會創建新對象,原對象不變。

2. 字符串常量池與 intern()

String s1 = "hello";           // 常量池中創建/復用
String s2 = "hello";           // 同一引用
String s3 = new String("hello"); // 堆中新對象
String s4 = s3.intern();       // 返回常量池引用
System.out.println(s1 == s2);  // true
System.out.println(s1 == s3);  // false
System.out.println(s1 == s4);  // true

3. 核心 API 速查

分類 方法 說明
長度/獲取length()代碼單元數(UTF-16 char 數),輔助字符算 2
codePointCount(0, len)真實字符數(代碼點數)
charAt(index) / codePointAt(index)獲取代碼單元/代碼點
查找/判斷indexOf/lastIndexOf(str/char, fromIndex)返回索引,無則 -1
contains/startsWith/endsWithboolean 判斷
equals/equalsIgnoreCase內容比較必用此,禁止 ==
截取/分割substring(begin, end)[begin, end),共享底層數組(JDK 7+ 複製)
split(regex, limit)正則分割,返回數組
subSequence實現 CharSequence 接口
替換/大小寫replace(old, new) / replaceAll(regex, repl)前者字面量,後者正則
toUpperCase/toLowerCase(Locale)區域敏感轉換
trim/strip/stripLeading/stripTrailingJDK 11+ strip 支持 Unicode 空白
拼接/格式化+ / concat / String.join / String.format+ 編譯器優化為 StringBuilder
StringBuilder / StringBuffer可變字符序列,非線程安全/線程安全

4. 代碼點與代碼單元實戰

String str = "\uD801\uDC00"; // U+10400 輔助字符,2個char
System.out.println(str.length());           // 2 (代碼單元)
System.out.println(str.codePointCount(0,2)); // 1 (代碼點)
System.out.println(str.codePointAt(0));     // 66560 (十進制)
System.out.println(Character.toChars(0x10400)); // [高代理, 低代理]

// 正確遍歷代碼點
for (int i = 0; i < str.length(); ) {
    int cp = str.codePointAt(i);
    System.out.println(cp);
    i += Character.charCount(cp); // 1或2
}

5. 不可變性設計權衡

  • 優點:線程安全、常量池共享節省內存、HashMap Key 安全、安全性(網絡/文件路徑不可篡改)。
  • 缺點:頻繁修改產生大量臨時對象(GC 壓力),拼接性能差。
  • 最佳實踐:循環/大量拼接用 StringBuilder,最終 toString();少量拼接 + 可讀性優先。

八、輸入輸出、控制流、大數值、數組(大綱預覽)

  • I/O:Scanner/System.in、System.out.printf/format、Files/Paths (NIO.2)。
  • 控制流:if/else/switch/for/while/do-while/break/continue/return、增強 for、標籤跳轉。
  • 大數值:BigInteger/BigDecimal 任意精度整數/小數,金融計算必用。
  • 數組:new int[5]、{1,2,3}、Arrays.sort/binarySearch/toString、多維/不規則數組。

九、總結

Java 基礎語法看似簡單,實則暗藏精妙:基本類型固定跨平台、字符串不可變共享池、運算符短路與優先級、數值提升與精度損失,每一處設計都體現了「簡單、健壯、安全」的工程哲學。建議將本文作為桌面速查手冊,編碼時隨時翻閱,久而久之內化為直覺。下一章我們將進入面向對象核心:類與對象、封裝繼承多態、接口與抽象類,敬請期待!

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