在 scala class中,常常會有不少的代碼塊須要執行,它們不在任何方法中,只是孤立的代碼塊。java
案例:this
1 class Tester(val name:String, num:Integer) { 2 private[this] val _name:String = name 3 println(name) 4 try { 5 1 / num 6 } catch { 7 case e:Exception => e.printStackTrace() 8 } 9 }
反編譯class文件以後部分代碼以下:spa
1 private final String name; 2 private final String _name; 3 4 public String name() { 5 return this.name; 6 } 7 8 public Tester(String name, Integer num) { 9 this.name = name; 10 this._name = name; 11 .MODULE$.println(name); 12 13 try { 14 BoxesRunTime.boxToInteger(1 / .MODULE$.Integer2int(num)); 15 } catch (Exception var4) { 16 var4.printStackTrace(); 17 BoxedUnit var10000 = BoxedUnit.UNIT; 18 } 19 }
能夠看出,成員變量初始化和try catch代碼其實被放到了構造方法中了。注意,這個跟成員變量賦值的順序是有關係的,成員變量必定要在使用前賦值,不然會有空指針異常等意外錯誤。
在線反編譯網址: http://javare.cn/scala