先上代码
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个赞
如果这个编译成功,那我就这样解释:匿名内部类,然后里面有个代码块。首先,你应该知道什么是匿名内部类,然后再了解代码块是什么,什么时候执行?然后就能听懂我的强行解释了。
猛跑小猪
TA贡献1858条经验 获得超8个赞
这个
new CaseNode(){{
//这两项都是CaseNode类中的setter方法
setNodeName("nodename");
setNodeKey("nodeKey");
...
setter**
}}
其实就是相当于你写了个CaseNode的子类,里面有个代码块,调用了继承自CaseNode的那些set方法,代码块在对象实例化的时候会被运行一遍,因为你是个子类,所以实例化的时候会先实例化一个父类CaseNode的对象,然后再运行你这个匿名内部类的子类代码块里的代码,正常继承下实际上的执行顺序是(假设没有更高的父类了) 父类静态代码块-父类代码块-父类构造方法-子类静态代码块-子类代码块-子类构造方法
当然匿名内部类没有静态代码块和构造方法,所以他里面的代码块是最后运行的。
另外上面的顺序也没有考虑类已经被初始化的问题,静态代码块只会在类被加载时被调用一次,比如你已经用过有静态代码块的类后,再用就不会调用了,但代码块你每次用类构造对象时都会被调用。
不知道这么说你是否有理解,匿名内部类你就当个子类对待好了。
添加回答
举报
0/150
提交
取消