おはようございます。
この時期の雨は電車の中が蒸し暑くなるのが嫌ですね。
さておき、今日はsaticフィールドの値の保持とstaticメソッドの呼び出しに関する問題をやっていきます。
問.次のコードをコンパイル、実行したときの結果として正しいものを選びなさい。(1つ選択)
public class Test{
private static int a;
private int b;
public static int countUpA(){
return ++a;
}
public int doMethod(){
return countUpA();
}
public static void main(String[] args){
Test test = new Test();
System.out.print(test.doMethod());
System.out.print(" " + test.coutUpA());
}
}
A.「0 1」と表示される
B.「1 2」と表示される
C. 9行目でコンパイルエラーになる
D. 15行目でコンパイルエラーになる
E. 実行時に例外が発生する
———————この先答え———————
答.B
この問題について考えるときに大切なことが2つあります。
1.インスタンスメソッドからstaticメソッドの呼び出しができる
2.staticメソッドからインスタンスメソッドは呼び出しはできない
インスタンスメソッドであるdoMethodから、staticメソッドcountUpAを呼び出すことはできます。
そしてインスタンスへの参照を保持した変数testを使ってstaticメソッドcountUpAを呼び出すことはできます。
なので選択肢「C」と「D」は間違いです。
設問コードの14行目でdoMethodを呼び出しています。
doMethodの処理(9行目)ではcountUpAメソッドを呼び出しています。
countUpAメソッドは変数aを前置インクリメントし、1を戻します。
その後15行目でcountUpAメソッドを呼び出しています。
同様に変数aを前置インクリメントし、2を戻します。
なので正解は B になります。
呼び出しに関する問題はJava SE 7/8 Bronzeでは結構出てきたような気がします。
中には考えるのに時間がかかりそうな問題もありますので時間効率を考えて確実に正解できる問題から解いていきましょう。
飛ばした問題も後から答えていけば見直す時間もたくさん余るくらい余裕ができると思います。
私は1回落ちてるのですがその時の敗因は完全に時間でした。。
問題が飛ばせるのもわからずに1問目から真っ向勝負を挑んだところ時間がかかりすぎてしまい、見直す時間がほとんどとれませんでした。
ひっかけ問題の多い試験なので見直しの時間はとても大切です。
重要なことなのでもう一度おさらいしますが
・試験の問題は飛ばせます
・答えたけど後で見直したい問題などにはチェックをつけると後でチェック項目だけ見れます
・なるべくすぐに答えられる問題から解いていくと時間効率が良く見直しがゆっくりできる
この3点を抑えておけば少なからず1問目から順番に解いていく人よりも見直しができる分正解率は格段に上がると思います。