2

私は教科書を使って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は、HTTP接続のサポートを提供するURLConnectionのサブクラスを提供します。このクラスはHttpURLConnectionと呼ばれます。URLオブジェクトでopenConnection()を呼び出すことにより、上記と同じ方法でHttpURLConnectionを取得しますが、結果をHttpURLConnectionにキャストする必要があります。(もちろん、実際にHTTP接続を開いていることを確認する必要があります。)HttpURLConnectionオブジェクトへの参照を取得すると、URLConnectionから継承された任意のメソッドを使用できます。

4

2 に答える 2

4

使用しない理由がわからないという宣言:

 HttpURLConnection hpCon = new HttpURLConnection();

接続を開くURLに関する情報を提供しません。これがあなたが使うべき理由です:

HttpURLConnection hpCon = new HttpURLConnection(hp);

このようにして、コンストラクターは、URLへの接続を開きたいことを認識しているためです"http://www.google.com"

于 2012-04-11T19:16:27.133 に答える
1

java.net.URLConnectionftp httpは、さまざまなプロトコル(など) を介してさまざまなタイプのサーバーとの通信を容易にする抽象クラスです。

プロトコル固有のサブクラスはSUNのパッケージ内に隠されており、これらの隠されたクラスはプロトコルの具体的な実装を担当します。

あなたの例では、URLはURLhttp://www.google.comを解析することによるものであるため、URLクラスの内部は、HTTPハンドラー/サブクラスを使用する必要があることを認識しています。
したがって、サーバーへの接続を開くとhp.openConnection();、HTTPプロトコルを実装するクラスの具体的なインスタンスを取得します。

そのクラスはのインスタンスですHttpURLConnection(実際にはサブクラスHTTPURLConnectionもあるのでabstract、それがあなたができる理由です:

HttpURLConnection hpCon = (HttpURLConnection) hp.openConnection();クラスキャスト例外を取得しません。

したがって、Javaの設計HttpURLConnection hpCon = new HttpURLConnection(hp);では、設計者がこれらのAPIを使用する方法ではないため、要求どおりに実行することはできません。

URLあなたはsを回避することが期待されておりURLConnections、入出力についてのみ心配します。
残りのことは気にしないでください

于 2012-04-12T07:55:24.340 に答える