新获知的Java语法。不懂,求解答
伊谢尔伦
伊谢尔伦 2017-04-18 10:26:40
[Java讨论组]

先上代码


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

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

伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

全部回复(3)
大家讲道理

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

伊谢尔伦

这个

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

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

迷茫
List<String> headerNames = new ArrayList<String>() {{
        add("xxx");
        add("yyy");
    }};

这个是很常见的写法吧??

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号