3

私は、Oracle を通じて初心者の Java 試験の勉強をしています。

質問の1つは、次のように述べています。

int absoluteValue = abs(-21)

すべてのコードをコンパイルする import ステートメントはどれですか?

正解は次のとおりです。

import static java.lang.Math.abs;

しかし、私の質問は、java.lang.*デフォルトでインポートされている場合、なぜMathクラスがインポートされず、abs()メソッドが利用できないのですか?

4

3 に答える 3

4

しかし、私の質問は、java.lang.* がデフォルトでインポートされている場合、Math クラスがインポートされず、abs メソッドが使用できないのはなぜですか?

そうではないからです。

それがJavaの仕組みだからです。パッケージ内のクラスの暗黙的な (または明示的な) ワイルドカード インポートでは、クラスのみがインポートされます。また、クラス メンバーの静的インポートも行いません。

クラスのすべての静的メンバーを修飾せずに参照する場合は、ワイルドカードの静的インポートを使用する必要があります。例えば

import static java.lang.Math.*;

または、個々のメンバーを静的にインポートできます。例えば

import static java.lang.Math.abs;

なぜ彼らはJavaをこのように定義したのですか?

おそらく、暗黙のインポートによってコードが読みにくくなるという理論的根拠があります。のようなメソッドabsがデフォルトでインポートされる場合、コードの真の意味を理解するために、それらがすべて何であるか、どこからインポートされるかを知る必要があります。

静的インポートは Java 5 でのみ追加されたことを知っておく価値があります。それ以前は、修飾Math.absなしで参照することはできませんでした。Math


静的メンバーではなくクラスをインポートするだけの場合、インポートすると何が得られますか?

クラス名を取得するだけです。例えば:

import java.util.HashMap;

etceteranew HashMap()ではなく書くことができます。new java.util.HashMap()これは重要です。(常にフルネームでクラスを参照しなければならない場合を想像してみてください....)

于 2015-02-11T13:07:54.180 に答える