2012-04-11 66 views
2

我学习Java通过使用教科书,其中包含描述使用HttpURLConnection以下代码...Java的HttpURLConnection类类节目

class HttpURLDemo { 
    public static void main(String args[]) throws Exception { 
     URL hp = new URL("http://www.google.com"); 
     HttpURLConnection hpCon = (HttpURLConnection) hp.openConnection(); 

     // Display request method. 
     System.out.println("Request method is " + hpCon.getRequestMethod()); 
     } 
    } 

可能有人请解释为什么hpCon对象在声明下面的方式...

HttpURLConnection hpCon = (HttpURLConnection) hp.openConnection(); 

,而不是宣布它像这样...

HttpURLConnection hpCon = new HttpURLConnection(); 

教科书的作者提供了以下的解释,我真的不明白......

Java提供的URLConnection的子类,提供了对HTTP连接的支持。 这个类叫做HttpURLConnection。通过调用URL对象上的openConnection(),您可以获得与刚刚显示的 相同的HttpURLConnection,但您必须将结果 转换为HttpURLConnection。 (当然,你必须确保你实际上是打开一个 HTTP连接。)一旦你获得一个HttpURLConnection的对象, 你可以使用任何从URLConnection的

回答

1

java.net.URLConnection是一个抽象类,有助于通过各种协议与各种类型的服务器通信(ftphttp等)。

协议的具体子类是隐藏SUN的包内,这些隐藏的类负责具体落实的协议。

在你的例子中,因为你的URL是一个http://www.google.com,通过解析URL,URL的内部知道必须使用HTTP处理程序/子类。
因此,当您打开到服务器的连接hp.openConnection();时,您将获得一个实现HTTP协议的类的具体实例。

那类是HttpURLConnection一个实例(实际上因为HTTPURLConnection一个子类也abstract,这就是为什么你可以这样做:。

HttpURLConnection hpCon = (HttpURLConnection) hp.openConnection();,并没有得到类转换异常

因此,与Java的设计,你可以如你所问,不要做HttpURLConnection hpCon = new HttpURLConnection(hp);,因为这不是设计者希望你使用这些API的方式。

预计您将工作URL s和URLConnections,只能担心输入/输出。
您不用担心其他问题

4

声明继承的方法的引用你不明白为什么不使用:

HttpURLConnection hpCon = new HttpURLConnection(); 

不提供有关您想要打开连接的URL的信息。这就是为什么你应该使用理由:

HttpURLConnection hpCon = new HttpURLConnection(hp); 

因为这样的构造知道你要打开的URL "http://www.google.com"的连接。