为了账号安全,请及时绑定邮箱和手机立即绑定

新获知的Java语法。不懂,求解答

新获知的Java语法。不懂,求解答

杨魅力 2019-02-22 01:06:32
先上代码 CaseNode node=new CaseNode(){{ //这两项都是CaseNode类中的setter方法 setNodeName("nodename"); setNodeKey("nodeKey"); ... setter** }} System.out.print(node.getNodeName()); //==>> "nodename" System.out.print(node.getNodeKey()); //==>> "nodeKey" 这是什么语法。有没有考参考的资料可以进一步了解的
查看完整描述

3 回答

?
12345678_0001

TA贡献1802条经验 获得超5个赞

如果这个编译成功,那我就这样解释:匿名内部类,然后里面有个代码块。首先,你应该知道什么是匿名内部类,然后再了解代码块是什么,什么时候执行?然后就能听懂我的强行解释了。

查看完整回答
反对 回复 2019-03-01
?
猛跑小猪

TA贡献1858条经验 获得超8个赞

这个

new CaseNode(){{
    //这两项都是CaseNode类中的setter方法
    setNodeName("nodename");
    setNodeKey("nodeKey");
    ...
    setter**
}}

其实就是相当于你写了个CaseNode的子类,里面有个代码块,调用了继承自CaseNode的那些set方法,代码块在对象实例化的时候会被运行一遍,因为你是个子类,所以实例化的时候会先实例化一个父类CaseNode的对象,然后再运行你这个匿名内部类的子类代码块里的代码,正常继承下实际上的执行顺序是(假设没有更高的父类了) 父类静态代码块-父类代码块-父类构造方法-子类静态代码块-子类代码块-子类构造方法
当然匿名内部类没有静态代码块和构造方法,所以他里面的代码块是最后运行的。
另外上面的顺序也没有考虑类已经被初始化的问题,静态代码块只会在类被加载时被调用一次,比如你已经用过有静态代码块的类后,再用就不会调用了,但代码块你每次用类构造对象时都会被调用。
不知道这么说你是否有理解,匿名内部类你就当个子类对待好了。

查看完整回答
反对 回复 2019-03-01
  • 3 回答
  • 0 关注
  • 443 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信