ブログに書かれている内容は、リアルで喋っちゃ駄目だぞっ!
×
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
ポケモンの話を書いている場合じゃなかった。
そう、Javaの資格試験であるSJC-Pに受かったんです。
以前はさらりと書きましたが、結構苦労して合格したんですよ。
勉強を始めたのが去年の5月頃で、自宅・通勤時間・会社の勤務時間を合わせると500時間越えの勉強量です。
教科書と問題集を5冊も使ったのに2回落ちて、3回目でようやく合格しました。
ネットでSJC-Pの合格体験みたいな記事を見ると「1~2ヶ月の勉強で受かった」という人が沢山いますが、
試験に落ちた人の情報が少ないためか「俺でも大丈夫だろう」と根拠の無い自信がつきます。
が、実際に試験を受けたり問題集を解いたりして絶望します。
「駄目だ、こりゃ」ってね。
そう、Javaの資格試験であるSJC-Pに受かったんです。
以前はさらりと書きましたが、結構苦労して合格したんですよ。
勉強を始めたのが去年の5月頃で、自宅・通勤時間・会社の勤務時間を合わせると500時間越えの勉強量です。
教科書と問題集を5冊も使ったのに2回落ちて、3回目でようやく合格しました。
ネットでSJC-Pの合格体験みたいな記事を見ると「1~2ヶ月の勉強で受かった」という人が沢山いますが、
試験に落ちた人の情報が少ないためか「俺でも大丈夫だろう」と根拠の無い自信がつきます。
が、実際に試験を受けたり問題集を解いたりして絶望します。
「駄目だ、こりゃ」ってね。
受かる人はすぐ受かるのですが、受からない人はとことん苦戦します。
SJC-Pの問題の何が難しいのか?
それはずばり、人間コンパイラにならなければいけない事です。
回答は選択式で、大半の選択肢はこうなります。
(A) ~が出力される。
(B) ~が出力される。
(C) ~が出力される。
(D) コンパイルエラーになる。
(E) 実行エラーが発生する。
例えばですけど、IF文の問題でこんなのがあります。
(A) 「flg = true」が出力される。
(B) 「flg = false」が出力される。
(C) 10行目でコンパイルエラーになる。
(D) 12行目でコンパイルエラーになる。
(E) 実行エラーが発生する。
どれが正解だと思います?
この問題で怪しい箇所は12行目のイコールが1個しか無い点です。
CやC#なんかだと「=が1つしかありません」とコンパイルエラーが表示されますが、
問題の性質上、「こんな書き方をしたらどうなるか」を知っていなければいけません。
コンパイルしてエラーが出たら直せば良いだろでは駄目です。
ちなみに正解は(A)で、変数flgにtrueを代入してその結果がtrueかfalseかを判断します。
この変数がboolean型でなくint型で数値を代入しようとする場合はコンパイルエラーになります。
Javaのif文では、イコールが2つあると左右の比較結果がtrueな場合に実行されるだけでなく
boolean型の変数代入ができます。
出題頻度は低いですが、こんなイジワル問題もあります。
(A) 「START」が出力される。
(B) 「Exception」が出力される。
(C) 「END」が出力される。
(D) コンパイルエラーになる。
(E) 実行エラーが発生する。
怪しいのは21行目のreturn文です。
プログラミング言語の勉強を最初にした頃、こんな事を学んだと思います。
return文で関数(メソッド)の戻り値を返し、その行で処理を終える。
そして、例外処理を学んだときは
try区とcatch区の後にfinally区がある場合、例外発生の有無にかかわらず必ずfinnaly区が実行される。
さて、上記の2つを踏まえた上で問題のソースを見てみると疑問点が浮かびます。
22行目の処理はどうなるのか?
・そもそもfinally区の途中にretun文がある事などありえない!! コンパイルエラーだ。
・いや、文法的には間違っていないけど、finally区の処理が途中で止まるのはおかしいから実行エラーだ。
・return文で関数の処理が終わるのは絶対だから、22行目は実行されない。 「START」だけ表示される。
・return文があろうと、finally区は必ず最後まで実行される。 だから「START」と「END」の両方が表示される。
さて、どれが正しいかというと、(A)(C)の両方表示されるのが正解です。
なかなか難しいでしょ。
知っていれば簡単ですが、知らないといざ出題された時に正解できません。
じゃあ、あまりイジワルでない問題で確実に点数を稼ぐにはどうしたら良いのかと言うと、以下の点を抑えて置くべきです。
1:継承と実装の違いは?
2:AクラスがBクラスを継承している場合、AからBへ・BからAへ直接代入した場合とキャストして代入した場合は?
(加えて、メソッドを実行した場合と変数(プロパティ値)を参照した場合では、AとBのどちらの物が対象か?)
3:スレッド処理を行う場合、Threadクラスを継承する方法とRunnableインターフェースを実装する方法の違いは?
(1の継承・実装の違いを理解している事が前提となる)
これ以外の部分は覚える事が大半だと思うので、理解すべき点は以上の1~3に集中します。
staticやコンストラクタについても、上で紹介した問題ぐらい細かく理解できていなければ
これらも理解を深めてください。
受かる人はすぐ受かりますが、受からない人は受かりません。
基本情報レベルだろ?と甘くみない事です。
僕の後輩は、僕よりほんの少し勉強時間が足りないくらいで3回試験に落ちています。
別の後輩は2ヶ月程度で一発合格しています。
僕は3回目で受かりましたが、時間がかかり過ぎました。
知識・経験もそうですが、本人の性格も合否に大きく影響していると思います。
そんなもんです。
SJC-Pの問題の何が難しいのか?
それはずばり、人間コンパイラにならなければいけない事です。
回答は選択式で、大半の選択肢はこうなります。
(A) ~が出力される。
(B) ~が出力される。
(C) ~が出力される。
(D) コンパイルエラーになる。
(E) 実行エラーが発生する。
例えばですけど、IF文の問題でこんなのがあります。
10 boolean flg = false; 11 12 if (flg = true) 13 { 14 System.out.println("flg = true"); 15 } 16 else 17 { 18 System.out.println("flg = false"); 19 } |
(A) 「flg = true」が出力される。
(B) 「flg = false」が出力される。
(C) 10行目でコンパイルエラーになる。
(D) 12行目でコンパイルエラーになる。
(E) 実行エラーが発生する。
どれが正解だと思います?
この問題で怪しい箇所は12行目のイコールが1個しか無い点です。
CやC#なんかだと「=が1つしかありません」とコンパイルエラーが表示されますが、
問題の性質上、「こんな書き方をしたらどうなるか」を知っていなければいけません。
コンパイルしてエラーが出たら直せば良いだろでは駄目です。
ちなみに正解は(A)で、変数flgにtrueを代入してその結果がtrueかfalseかを判断します。
この変数がboolean型でなくint型で数値を代入しようとする場合はコンパイルエラーになります。
Javaのif文では、イコールが2つあると左右の比較結果がtrueな場合に実行されるだけでなく
boolean型の変数代入ができます。
出題頻度は低いですが、こんなイジワル問題もあります。
10 public int test(){ 11 try 12 { 13 System.out.println("START"); 14 } 15 catch(Exception ex) 16 { 17 System.out.println("Exception"); 18 } 19 finally 20 { 21 return 1; 22 System.out.println("END"); 23 } 24 return 0: 25 } |
(A) 「START」が出力される。
(B) 「Exception」が出力される。
(C) 「END」が出力される。
(D) コンパイルエラーになる。
(E) 実行エラーが発生する。
怪しいのは21行目のreturn文です。
プログラミング言語の勉強を最初にした頃、こんな事を学んだと思います。
return文で関数(メソッド)の戻り値を返し、その行で処理を終える。
そして、例外処理を学んだときは
try区とcatch区の後にfinally区がある場合、例外発生の有無にかかわらず必ずfinnaly区が実行される。
さて、上記の2つを踏まえた上で問題のソースを見てみると疑問点が浮かびます。
22行目の処理はどうなるのか?
・そもそもfinally区の途中にretun文がある事などありえない!! コンパイルエラーだ。
・いや、文法的には間違っていないけど、finally区の処理が途中で止まるのはおかしいから実行エラーだ。
・return文で関数の処理が終わるのは絶対だから、22行目は実行されない。 「START」だけ表示される。
・return文があろうと、finally区は必ず最後まで実行される。 だから「START」と「END」の両方が表示される。
さて、どれが正しいかというと、(A)(C)の両方表示されるのが正解です。
なかなか難しいでしょ。
知っていれば簡単ですが、知らないといざ出題された時に正解できません。
じゃあ、あまりイジワルでない問題で確実に点数を稼ぐにはどうしたら良いのかと言うと、以下の点を抑えて置くべきです。
1:継承と実装の違いは?
2:AクラスがBクラスを継承している場合、AからBへ・BからAへ直接代入した場合とキャストして代入した場合は?
(加えて、メソッドを実行した場合と変数(プロパティ値)を参照した場合では、AとBのどちらの物が対象か?)
3:スレッド処理を行う場合、Threadクラスを継承する方法とRunnableインターフェースを実装する方法の違いは?
(1の継承・実装の違いを理解している事が前提となる)
これ以外の部分は覚える事が大半だと思うので、理解すべき点は以上の1~3に集中します。
staticやコンストラクタについても、上で紹介した問題ぐらい細かく理解できていなければ
これらも理解を深めてください。
受かる人はすぐ受かりますが、受からない人は受かりません。
基本情報レベルだろ?と甘くみない事です。
僕の後輩は、僕よりほんの少し勉強時間が足りないくらいで3回試験に落ちています。
別の後輩は2ヶ月程度で一発合格しています。
僕は3回目で受かりましたが、時間がかかり過ぎました。
知識・経験もそうですが、本人の性格も合否に大きく影響していると思います。
そんなもんです。
PR
この記事にコメントする
KKK(きっときっと楓ちゃん)
当ブログは、shuffle!に登場する楓ちゃんを応援しています。
ブログ内検索
アーカイブ
名雪かわいいよ、名雪