0

私は見つけることができるすべてのチュートリアルと本を読んでいますが、それでも些細な概念が私に質問を残します:

  1. CLASSPATHは、JVM に登録された変数であり、classes/jars/etc の検索を開始するルート ディレクトリを Java に伝えますか?

  2. importインクルード (C/C++) に似ていますが、パッケージ経由で名前空間を提供しますか? インポートを使用せずに、java.util.String (おそらく無効な言い訳) などのすべてのクラス (FQCN を使用) のパッケージ/名前空間を明示的に指定する必要がある方法を読んだところです。クラスを単純に String として参照するコード。

インポートについて私を混乱させるのは、次のようなインポートの使用例です。

import java.util.*;  // import all public classes from java.util package
import java.util.Hashtable;  // import only Hashtable class (not all classes in java.util   package)

はい、記事もフォローアップします。

インポートのみを行うパッケージ レベルに格納されたパブリック クラスを呼び出すことができることに注意してください。インポートするパッケージのサブパッケージに属するクラスは使用できません。たとえば、パッケージをインポートする場合、クラスworldのみを使用できますが、クラスは使用できません。HelloWorldHelloMoon

それで、インポートで * を使用すると、すべてのサブパッケージを再帰的にインポートしないということですか?

4

4 に答える 4

1

7.5.2. タイプ インポート オンデマンド宣言

import java.util.*;

パッケージ java.util で宣言されたすべての public 型の単純名が、コンパイル単位のクラスおよびインターフェイス宣言内で使用可能になります。したがって、Vector という単純な名前は、コンパイル単位内のすべての場所で、パッケージ java.util 内の Vector 型を参照します。この型宣言は、その型宣言が隠蔽 (§6.4.1) または不明瞭 (§6.4.2) されていません。

宣言は、単純な名前が Vector である型の単一型インポート宣言によって隠されている可能性があります。Vector という名前の型で、コンパイル単位が属するパッケージで宣言されています。またはネストされたクラスまたはインターフェース。

この宣言は、Vector という名前のフィールド、パラメーター、またはローカル変数の宣言によって隠されている可能性があります。

(これらの条件のいずれかが発生することはまれです。)

于 2012-09-14T13:27:25.257 に答える
1

あなたは正しいです。

C/C++ インクルードとは異なり、Java のインポートはオプションです。Java は CLASSPATH で見つかったすべてのクラスをロードするためです。

Java の import ステートメントを使用すると、よく使用されるクラスに別名を付けることができるため、毎回それらを完全に修飾する必要はありません。

次のクラスが定義されているとします。

package com.foo.bar;

public class Bazz {
    public static final int ONE = 1;
    public static final int TWO = 2;
    public static final int THREE = 3;

    ... some methods ...
}

インポートを使用するには、いくつかの方法があります。

import com.foo.bar.*;  // import all classes belonging to package com.foo.bar, and com.foo.bar only.
import com.foo.bar.Bazz;  // import class com.foo.bar.Bazz only
import static com.foo.bar.Bazz.*;  // import all static constants in class com.foo.bar.Bazz
import static com.foo.bar.Bazz.ONE;  // import static constant com.foo.bar.Bazz.ONE only

あなたが述べているように、パッケージを再帰的にインポートする方法はありません。

余談ですが、ほとんどの IDE はクラスを自動インポートします。たとえば、Eclipse は CTRL+SHIFT+O を押すとこれを行います。

于 2012-09-14T13:34:18.810 に答える
0

質問で提供した例のように、

import java.util.*;

すべてのパブリッククラスをjava.utilパッケージにインポートします。java.utilパッケージの外部にあるパブリッククラスはインポートしません。

Eclipseのような統合開発環境(IDE)は、個別のクラスインポートを作成します。グローバルインポート(アスタリスク付き)をコーディングする理由はもうありません。

于 2012-09-14T13:29:01.120 に答える
0

はい。それがそれです。 ただし、ステートメント
で絶対パスを指定することをお勧めします。import

于 2012-09-14T13:35:12.373 に答える