import(static import による静的メンバの無修飾利用)難易度 標準無料
次のコードの出力として正しいものを選べ。
1 import static java.lang.Math.PI;
2 import static java.lang.Math.sqrt;
3 public class Q5 {
4 public static void main(String[] args) {
5 System.out.println(sqrt(PI) > 0);
6 System.out.println(PI);
7 }
8 }
- A
true改行3.141592653589793 - Bコンパイルエラー(
PI・sqrtはクラス名で修飾しないと使えない) - C
false改行3.141592653589793 - Dコンパイルエラー(
import staticは1ファイルにつき1つまでしか書けない)
正解・解説・誤答理由・ひっかけを見る▼ open
✓ 正解:AAI作成・独立検証済
解説
通常の
各誤答が違う理由import が「型(クラス/インタフェース)」を無修飾で使えるようにするのに対し、
import static は特定クラスの static メンバ(フィールドやメソッド)を、クラス名で修飾せず直接使えるようにする。
1行目 import static java.lang.Math.PI; により定数 Math.PI を単に PI と書ける。
2行目 import static java.lang.Math.sqrt; により Math.sqrt(...) を単に sqrt(...) と書ける。
PI は正の値であり、sqrt(PI)(平方根)は必ず0より大きいので sqrt(PI) > 0 は常に true。
Math.PI の値そのものは 3.141592653589793(double 定数)。
- B
import staticはまさに「クラス名修飾を省略して使う」ための機能。1〜2行目でその宣言がされているためコンパイルは通る。 - C
PI(正の定数)の平方根は正の値なのでsqrt(PI) > 0は常にtrue。falseにはならない。 - D
import static宣言は複数書ける(メンバごとに個別に列挙するのが一般的)。1ファイルにつき1つという制限は無い。
ひっかけ:
import static は「クラスをインポートする」のではなく「そのクラスの static メンバをインポートする」点に注意。PI や sqrt(...) という書き方だけを見て「未定義の変数/メソッドだからコンパイルエラー」と早合点しやすいが、1〜2行目の import static によって正当に解決される。コマンド例と想定される挙動(未実行)
出力: true 3.141592653589793
AIが作成し、独立した検証を経た解説です(有資格者による監修は経ていません)