static static Fantastic! vol.5
今朝投稿した記事だけど誰も釣られてくれないからプログラムを少し変更してみた。
jp\yucchi\static_sample_4\hoge.java |
1 2 3 4 5 6 7 8 9 10 11 12 |
package jp.yucchi.static_sample_4; public class hoge { static int VAL = 10000; static void calc(int i) { System.out.println("CALL hoge"); System.out.println("VAL = " + VAL); System.out.println(VAL + "* 2 = " + VAL * 2); } } |
jp\yucchi\static_sample_4\chage.java |
1 2 3 4 5 6 7 8 9 10 11 12 |
package jp.yucchi.static_sample_4; public class chage { static int VAL = 1; static void calc(int i) { System.out.println("CALL chage"); System.out.println("VAL = " + VAL); System.out.println(VAL + "* 2 = " + VAL * 2); } } |
jp\yucchi\static_sample_4\Static_sample_4.java |
1 2 3 4 5 6 7 8 9 10 11 12 13 |
package jp.yucchi.static_sample_4; import static jp.yucchi.static_sample_4.hoge.*; import static jp.yucchi.static_sample_4.chage.VAL; public class Static_sample_4 { public static void main(String[] args) { System.out.println("main() atart VAL = " + VAL); calc(VAL); System.out.println("main() end VAL = " + VAL); } } |
VAL の値を標準出力させてみました。
run:
main() atart VAL = 1
CALL hoge
VAL = 10000
10000* 2 = 20000
main() end VAL = 1
構築成功 (合計時間: 0 秒)
hoge クラスの calc() メソッドが呼ばれてます。
main() メソッドの中にある calc() メソッドの引数の値は1のようです。
そして、calc(VAL) メソッドでよばれるのが hoge クラスなのは何故?
その答えは単純です。
static import 文をよく見てください。
chage クラスは static 変数である VAL だけをインポートしています。
よって、chage クラスの calc(VAL) メソッドは呼ばれることは無いんです。
hoge クラスの calc(VAL) が呼ばれて hoge クラスの VAL の値で計算されてしまいます。
なかなか面白いことになってますね。
引数の値よりクラスの static 変数が優先されてしまう。
chage クラスの calc(VAL) メソッドを実行させたかったら
次のようにインポート文を変更したらいい。
1 2 3 4 5 |
package jp.yucchi.static_sample_4; import static jp.yucchi.static_sample_4.hoge.*; import static jp.yucchi.static_sample_4.chage.VAL; import static jp.yucchi.static_sample_4.chage.calc; |
っていうか・・・ hoge クラス使わなきゃいいじゃん(^_^;)
TAGS: Java | 2012年5月18日11:37 AM
Trackback URL