Java 語言規範(JLS)強制要求:構造器第一條執行語句必須是 `super(...)` 或 `this(...)`**。否則編譯錯誤:Constructor call must be the first statement in a constructor。
MyBatis `SqlSessionTemplate` 構造器原始碼中,`super(...)` 似乎不在第一行(圖片截圖)。
// 1. 看位元碼
javap -c -v SqlSessionTemplate.class | grep -A 20 "public "
// 2. 寫測試代碼故意違規,確認編譯報錯
class Test {
Test() {
System.out.println("before super"); // 編譯錯誤
super();
}
}
`super()` **必須是構造器第一條可執行語句**,這是 JVM 強制規則,無例外。看到「不在第一行」的代碼,**99% 是反編譯視圖誤導或讀錯了初始化塊**。信任編譯器與位元碼,不信反編譯器的排版。