zoukankan      html  css  js  c++  java
  • 使用new Xxx(){};这种语法创建对象的语义解析

    在看Java并发编程实战这本书的时候,看到一个代码如下

    /**
     * ConnectionDispenser
     * <p/>
     * Using ThreadLocal to ensure thread confinement
     *
     * @author Brian Goetz and Tim Peierls
     */
    public class ConnectionDispenser {
        static String DB_URL = "jdbc:mysql://localhost/mydatabase";
    
        private ThreadLocal<Connection> connectionHolder
                = new ThreadLocal<Connection>() {
                    public Connection initialValue() {
                        try {
                            return DriverManager.getConnection(DB_URL);
                        } catch (SQLException e) {
                            throw new RuntimeException("Unable to acquire Connection, e");
                        }
                    };
                };
    
        public Connection getConnection() {
            return connectionHolder.get();
        }
    }

    这种在构造器声明后面直接接一个{}代码块的方法感觉以前好像见过,但是又不太确定,因为不属于匿名内部类的写法。于是在网上搜到一篇博客,做个记录,如下,解决了疑惑,其实这样的写法是对方法进行了重写。因为ThreadLocal里是有initialValue()这个方法的,会在初次调用ThreadLocal.get()方法的时候调用该方法来获取初始值。只不过书里的这个代码示例没有加@Override的注解标识,导致我有些误解,以为是直接新加了一个方法,想着也没有这样的语法啊,所以导致不理解。

    另外还有一个嵌入静态代码块的方法也可以用这种类似的写法,下面这个博客的博主也提到了(重要,比较优美的写法)

    https://blog.csdn.net/shenhaiyushitiaoyu/article/details/84142618

  • 相关阅读:
    Deep Learning ——Yann LeCun,Yoshua Bengio&Geoffrey Hinton
    numpy模块
    损失函数、正则化、优化
    最近邻分类器,K近邻分类器,线性分类器
    python json,pickle模块
    python os,sys模块
    python random模块
    到2030年,人工智能会发展成什么样?
    AI的偏见:机器就是绝对理性的么?
    5G和AI:现在和未来的互补技术
  • 原文地址:https://www.cnblogs.com/skyvalley/p/15335840.html
Copyright © 2011-2022 走看看