猿问

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

先上代码


    CaseNode node=new CaseNode(){{
        //这两项都是CaseNode类中的setter方法
        setNodeName("nodename");
        setNodeKey("nodeKey");
        ...
        setter**
    }}
    
    System.out.print(node.getNodeName()); //==>> "nodename"
    System.out.print(node.getNodeKey());  //==>> "nodeKey"
    

这是什么语法。有没有考参考的资料可以进一步了解的

杨魅力
浏览 444回答 3
3回答

12345678_0001

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

猛跑小猪

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

相关分类

Java
我要回答