消息关闭
    暂无新消息!

java源码解读困惑

问题作者 : 广顺兴2017-07-31发布
场景:近来比较有空,就去研究了下java的源码,结果我彻底蒙圈了;

问题:用eclipse去查看源码,然后一层层点进去,发现最后那些方法都是空实现,或者干脆就没进行实现,但是竟然能跑,还有结果。

比如:java.net.URL相关方法

第一步:我尝试着创建了一个链接

URL url = new URL(uri);
URLConnection uc = url.openConnection();
第二步:用eclipse的ctrl+鼠标左键点openConnection()到Open Implementation然后进入到了java.net.URL.openConnection();

结果发现里面就是下面一段代码

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

第三步:好吧,我继续用eclipse的ctrl+鼠标左键点openConnection(this)到Open Implementation然后进入到了org.springframework.remoting.rmi.RmiClientInterceptor.DummyURLStreamHandler.openConnection(URL url);

就在这一步我彻底蒙了,因为这个直接跳到了spring的代码进去了,原代码是这样的

@Override
protected URLConnection openConnection(URL url) throws IOException {
throw new UnsupportedOperationException();
}

直接就是抛了个异常出来,代码没法往下走了啊;

第四步:回到继续用eclipse的ctrl+鼠标左键点openConnection(this)到Open Declaration然后进入到了java.net.URLStreamHandler.openConnection(URL u)

这个的源码如下

  abstract protected URLConnection openConnection(URL u) throws IOException;

哎,心好累,这个就是个抽象方法啊,然后又去看了下实现结果还是到了org.springframework.remoting.rmi.RmiClientInterceptor.DummyURLStreamHandler.openConnection(URL url)

而这个实现就是直接抛异常出来,如何处理url链接,这让我非常伤心与尴尬。

 

这个到底是怎么完成实现的,求教!!先谢过了!!

(谢绝灌水)


7个回答

︿ 3
不是没实现,而是通过多态交给子类去实现,你去父类里面查,哪能查得到?
︿ 2
和前两天的帖子 java 既然开源了,为什么有些源代码看不到? 很类似。到了这一步:

public URLConnection openConnection() throws java.io.IOException {
return handler.openConnection(this);
}
为什么你不去看 handler 是如何初始化的?handler 的 openConnection 是如何实现的呢?都只想着不断的 ctrl + 左键,最终或许看到的大多都是声明。
︿ 1
你要去看实现类具体重写的方法而不是去看父类(父接口)中的被重写的方法
︿ 0
我也曾经有这样的困惑;但现在一层一层解开了,没有开始感觉很难做了:
1、要了解面向对象的概念,买几本JAVA相关的实体书,遇到问题翻几遍实体书(当参考书),先熟悉他;
2、几个重要的知识点,继承,方法,接口;
3、可通过打印找到对应的程序,当然非常费精力,注意哦,找到以后,再翻下参考书,比对下书上的说法;
︿ 0
因为都是通过多态,父类或者接口接收子类对象来做的,直接点过去必然只是一些定义,只是告诉说有这个功能,具体自己实现,只需要找到对应的子类或者实现类就能看到具体源码了
︿ 0
你看源码了吗?你没看他都抛出异常了吗?你能跑起来是因为你把异常抛到最外面了。你用try_catch捕捉一下就知道怎么回事。根本就是一运行就报错。除非给了个链接