本文系統梳理 Java 基礎語法核心知識點,涵蓋程序骨架、八大基本類型、變量常量、運算符優先級、字符串不可變機制與 API 實戰,適合入門鞏固、面試速查、知識體系構建。
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 等標籤 */
| 類型 | 位數/字節 | 取值範圍 | 默認值 | 字面量後綴 |
|---|---|---|---|---|
| byte | 8 位 / 1 字節 | -128 ~ 127 | 0 | 無 |
| short | 16 位 / 2 字節 | -32,768 ~ 32,767 | 0 | 無 |
| int | 32 位 / 4 字節 | -2,147,483,648 ~ 2,147,483,647 | 0 | 無(默認) |
| long | 64 位 / 8 字節 | -9.22e18 ~ 9.22e18 | 0L | L / l |
關鍵點:Java 整型範圍固定跨平台,解決了 C/C++ 移植性問題。整型字面量默認
int,賦值long需加L(如long x = 100L;)。
| 類型 | 位數/字節 | 有效位數 | 取值範圍 | 字面量後綴 |
|---|---|---|---|---|
| float | 32 位 / 4 字節 | 6~7 位 | ±3.4e38 | F / f |
| double | 64 位 / 8 字節 | 15 位 | ±1.79e308 | D / d(默認) |
特殊值:
Double.POSITIVE_INFINITY、NEGATIVE_INFINITY、NaN。判斷 NaN 必須用Double.isNaN(x),x == Double.NaN永為 false。
\u0000 ~ \uFFFF(0 ~ 65535)。'A' (字符常量, 65) ≠ "A" (字符串對象)。\n \t \\ \' \" \uXXXX(Unicode 轉義可出現在標識符/註釋外)。String、codePoint API。true/false,不可與數值互換(C/C++ 中 0/非 0 可作布爾)。if (x = 0) 編譯報錯(賦值非布爾),避免了 C 系經典 Bug。// 語法:類型 變量名 [= 初始值] [, 變量名...];
int a = 10, b = 20;
double rate = 3.14;
boolean flag = true;
int i = 10; 同時完成聲明、定義、初始化。lowerCamelCase,見名知意,避免拼音/單字母。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. = += -= *= /= %= &= ^= |= <<= >>= >>>= ← 右結合,最低
Infinity/NaN。int m=7; int a=2*++m; // m=8,a=16 vs int n=7; int b=2*n++; // n=8,b=14。if(x!=0 && 1/x > y) 避免除零,&&/|| 短路求值。& | ^ ~ << >> >>>,移位操作數取模 32(long 模 64),1 << 35 == 1 << 3。Math.sqrt/abs/max/min/round/random 為 static 方法,JDK 5+ 可 import static java.lang.Math.*; 直接用方法名。表達式中:double > float > long > int,低向高提升。byte/short/char 參與運算直接提升為 int。
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 丟失低位。b ? 1 : 0。
final char[] value(JDK 9+ 改為 byte[] + coder 緊湊字符串)。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
| 分類 | 方法 | 說明 |
|---|---|---|
| 長度/獲取 | length() | 代碼單元數(UTF-16 char 數),輔助字符算 2 |
codePointCount(0, len) | 真實字符數(代碼點數) | |
charAt(index) / codePointAt(index) | 獲取代碼單元/代碼點 | |
| 查找/判斷 | indexOf/lastIndexOf(str/char, fromIndex) | 返回索引,無則 -1 |
contains/startsWith/endsWith | boolean 判斷 | |
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/stripTrailing | JDK 11+ strip 支持 Unicode 空白 | |
| 拼接/格式化 | + / concat / String.join / String.format | + 編譯器優化為 StringBuilder |
StringBuilder / StringBuffer | 可變字符序列,非線程安全/線程安全 |
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
}
StringBuilder,最終 toString();少量拼接 + 可讀性優先。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 基礎語法看似簡單,實則暗藏精妙:基本類型固定跨平台、字符串不可變共享池、運算符短路與優先級、數值提升與精度損失,每一處設計都體現了「簡單、健壯、安全」的工程哲學。建議將本文作為桌面速查手冊,編碼時隨時翻閱,久而久之內化為直覺。下一章我們將進入面向對象核心:類與對象、封裝繼承多態、接口與抽象類,敬請期待!