2012-04-11 71 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"的連接。