scala class中孤立代碼塊揭祕

在 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

相關文章
相關標籤/搜索