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/

posted @ 2019-07-01 19:04  JohnnyBai  阅读(598)  评论(0编辑  收藏  举报