Java 是工程學科,唯有「大量寫代碼、大量讀代碼、大量改代碼」才能內化為能力。本文傳授三大核心練功法:破壞式學習、JDK 源碼研讀、個人片段庫建設。
標準 HelloWorld 跑通後,刻意破壞:
// 1. 改 main 方法名 → 編譯錯誤:找不到主類入口
// 2. 去掉 public → 編譯錯誤:主方法必須 public
// 3. 去掉 static → 編譯錯誤:主方法必須 static
// 4. String[] → int[] / String → 編譯錯誤:參數類型不匹配
// 5. args 改名 otherArgs → 正常運行(參數名不影響語義)
// 6. System.out → System.err → 輸出重定向到錯誤流
每次破壞 → 觀察錯誤 → 分析規範要求 → 修復。擴展到所有關鍵字:
static:去掉 → 實例方法需對象調用;加在塊 → 靜態初始化塊。final:修飾類/方法/變量/參數,嘗試繼承/覆寫/重賦值。try-catch-finally:finally 必執行性驗證(return/throw/System.exit() 場景)。throw new RuntimeException(e) vs throw e 堆疊差異。一個示例破壞 7-8 次,徹底搞清語言規則邊界,勝讀十遍教程。
JAVA_HOME/src.zip (JDK 9+ 為 lib/src.zip) 解壓,得到完整 java.*, javax.* 源碼。String, StringBuilder → ArrayList, HashMap (JDK 8 紅黑樹化) → ThreadPoolExecutor → HashMap → ConcurrentHashMap (CAS+節點鎖) → ClassLoader (雙親委派) → DynamicProxy → Stream 管道實現。HashMap 擴容死循環、ThreadLocal 內存洩漏),源碼即答案。// 目錄結構建議
snippets/
concurrency/
ThreadPoolTemplate.java // 線程池標準配置、拒絕策略、監控
CompletableFutureChain.java // 異步編排模式
persistence/
JpaRepositoryBase.java // 通用 JPA Repository 封裝
MyBatisMapperTemplate.xml // 通用 CRUD Mapper
web/
GlobalExceptionHandler.java // 統一異常處理、錯誤碼映射
RequestTraceFilter.java // 鏈路追蹤 TraceId 注入
util/
DateUtils.java // 線程安全日期格式化
JsonUtils.java // Jackson 配置、脫敏序列化
維護原則:
README.md:適用場景、依賴版本、決策理由、已知限制、測試用例。java -verbose:class:類加載順序、來源 (JAR/路徑),排查衝突/重複加載。javac -verbose:編譯路徑、註解處理器、隱式編譯文件。jcmd PID VM.flags:運行時 JVM 參數驗證。jhsdb / jstack / jmap / jfr:生產診斷全家桶。破壞式學習建立直覺,讀源碼建立深度,片段庫建立復用資產。三法合一,配合項目實戰反饋,是從「會用 API」到「懂原理、能造輪子、出高質量交付」的最短路徑。