scala class中孤立代码块揭秘
在 scala class中,经常会有很多的代码块需要执行,它们不在任何方法中,只是孤立的代码块。
案例:
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文件之后部分代码如下:
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/