http://hc.apache.org/downloads.cgiLZ 去下你项目对包对应的源码必须版本相同
然后在myeclipse7.0中指定路径源码然后DEBUG就能看到了

解决方案 »

  1.   

    这些都是抽象类,这些方法被最终实现类覆盖了.那些类在sun的包下.看下URL类的open方法(或者是connect方法)那里有如何通过协议找到协议对应连接实现类的处理过程.
      

  2.   

    其实是一套标准,具体的都需要向tomcat,我们的程序等,实现
      

  3.   

    试着解释下:
    首先URLConnection是个代表所有类型连接的连接类,包括文件连接,Http等协议的连接。所以它自身并不实现任何涉及到协议相关的方法。针对getHeaderField()方法,为什么它的修饰词不是abstract的,也不是native的,而是public的?因为URLConnection并不要求子类一定要实现这个方法,所以不是abstract的,并且它不是由本地代码实现的,所以不是native的,包外面的类需要访问它,所以不能使用默认的修饰词。对getInputStream()方法也可按照上述思路解释。
    你在debug时看不到source,很简单,因为你没有最终子类的源代码,实际运行的类肯定不是HttpURLConnection,因为它是abstract类,不能实例化。
      

  4.   

    URLConnection 是根据各种协议交给不同的协议处理实现子类去处理的,这是典型的多态。http:// 的 HTTP 协议交给 java.net.HttpURLConnection 的子类 sun.net.www.protocol.http.HttpURLConnection 处理
    ftp:// 的 FTP 协议交给 URLConnection 的子类 sun.net.www.protocol.ftp.FtpURLConnection 处理
    file:// 的 FILE 协议交给 URLConnection 的子类 sun.net.www.protocol.file.FileURLConnection 处理
    https:// 的 HTTPS 协议交给 javax.net.ssl.HttpsURLConnection 的子类 sun.net.www.protocol.https.HttpsURLConnectionImpl 处理
    jar:// 的交给 java.net.JarURLConnection 子类 sun.net.www.protocol.jar.JarURLConnection 处理
    mailto:// 的交给 URLConnection 的子类 sun.net.www.protocol.mailto.MailToURLConnection 处理
      

  5.   

    com.sun 和 sun 开头包名的类都是 JRE 的底层,被找包在 rt.jar 这个 jar 包中。虽然在 Eclipse 中可以使用反编译工具打开,但是如果想要看这些类带有注释的源代码的话,应该去下载 JDK 所有的源代码。http://download.java.net/openjdk/jdk6/
      

  6.   

    对楼主的钻研态度感到敬佩~~~~自愧不如。打开相关的class看了下,的确如楼主所见,返回为null,又写了个非常简单的程序测试,代码如下,没有其他调用了:
            try
            {  
                URL url = new URL("http://www.google.com.cn"); 
                URLConnection con = url.openConnection(); 
                con.setDoOutput(true); 
                con.setDoInput(true); 
                con.setReadTimeout(0); 
                con.setConnectTimeout(0); 
                con.connect();
                System.out.println("HeaderField:" + con.getHeaderField("content-type"));
            }
            catch(Exception e)
            {
                System.out.println("Exection:" + e.getMessage());
            }
     
    可以看见能打印出HeaderField,而不是null!
    又查到帮助文档上有这样的话:
    “openConnection返回的连接将为该子类的类型。例如,对于 HTTP,将返回 HttpURLConnection,对于 JAR,将返回 JarURLConnection。”
    所以getHeaderField应该是某个子类的方法。调用的应该不是URLConnection的getHeaderField,根据帮助文档应该返回的是HttpURLConnection,但从代码也找不到该方法,但是有个调用,需要继续研究。如果需要在debug下看见源代码,项目中需要把相关的源代码装入。在java安装目录下的src.zip有源代码。
      

  7.   

    比如HttpURLConnection的话,是在URL类的static URLStreamHandler getURLStreamHandler(String protocol)方法中确认其具体实现子类的某类型URLStreamHandler(通过反射) 再通过其openConnection方法获得 
      

  8.   

    哇哇哇回帖质量远远超过我的想象,可惜我只能发100分的帖子,
    谢谢各位了,特别是huangwj20042008,火龙果,qqbz,dracularking.
    对火龙果的敬仰之情真如长江之水,连绵不绝啊。

    还有就是我想知道:
    “http:// 的 HTTP 协议交给 java.net.HttpURLConnection 的子类 sun.net.www.protocol.http.HttpURLConnection 处理 
    ftp:// 的 FTP 协议交给 URLConnection 的子类 sun.net.www.protocol.ftp.FtpURLConnection 处理 ”
    你是用什么方法获得这个的
      

  9.   

    楼主,其实这个很简单:URLConnection connection = url.openConnection();
    System.out.println(connection.getClass().getName());呵呵,明白了吧?
      

  10.   

    至于 URL#openConnection() 是如何实例化子类、子类是如何工作的,那就需要查看相关类的源代码了。