A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© leon_hm 中级黑马   /  2014-4-2 21:34  /  947 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

public URLConnection openConnection() throws java.io.IOException {
        return handler.openConnection(this);
}

以上是类URL中openConnection的代码。
handler是一个抽象类URLStreamHandler的变量。

从jdk API文档来看URLStreamHandler是没有子类的。
那是如何创建URLStreamHandler对象的呢?
抽象类应该不能new对象的吧。

评分

参与人数 1技术分 +1 收起 理由
itpower + 1

查看全部评分

3 个回复

倒序浏览
handler在这里是URLStreamHandler 类的一个引用,你仔细看源码的话会发现:
static Hashtable handlers = new Hashtable();
URLStreamHandler handler = (URLStreamHandler)handlers.get(protocol);
               if (handler != null) {
                    handlers.put(protocol, handler);
                }

                if (handler == null) {
                    handler = context.handler;
                }

评分

参与人数 1技术分 +1 收起 理由
itpower + 1

查看全部评分

回复 使用道具 举报
Engle 发表于 2014-4-2 22:01
handler在这里是URLStreamHandler 类的一个引用,你仔细看源码的话会发现:
static Hashtable handlers = n ...

那这个引用接收到的是什么对象呢?
handlers是个hashtable。
handlers.get(protocol);获取的是什么对象呢?
回复 使用道具 举报
handlers是用来存储handler对象的,我这里只是贴出了源代码的一部分,你要想弄明白,你就得自己去看源码,你可以Ctrl+F去源码里搜索我恢复的这几行源码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马