mk-toolブログ

エンジニアと家のことをごちゃごちゃと書いてます

【Java】JavaSilver1総合問題の復習

この本の総合問題に取り組んだわけですよ。。。

余裕だと思ってたのに、間違ったり明確にこれだって思えなかったりした部分も多かったからまとめる。(そうしないとまた同じことしちゃう)



問題1

バイトコード実行の説明に関してだけど、まずバイトコード=クラスファイルのこと。つまり、コンパイルしたファイルの実行に関してという問題に置き換わる。クラスファイルはどんなプラットフォームでもランタイムさえあれば実行できる。


問題3

int x = 1, y = 9, z = 10;
System.out.println((x = y + 1 / 5) + ":" + (z / 4));

というコードがあった時に、どう出力されるかという問題。
これ整数と整数の演算だから「1/5」の部分が0になるらしい。
同じく「z/4」の部分も整数と整数の演算だから2になるみたい。まぁ言われればそうか。。。


問題5

mainメソッドオーバーロードできるらしい。。。
知っている人にとっては「ふーん」だけど、マジでビックリした。
だってエントリポイントが複数あったら、って考えると変じゃん!
まぁこの問題で、自分は「クラス宣言時の修飾子はpublic,protected,privateが使用できる」って
のが正しいという解答をしたけど、privateなクラスなんて誰も参照できない!笑
って後で気づいたけど間違えてしまった。


問題6

これはマジックかよ。

int x = 97, y = 98;
System.out.println((char)x + " " + (char)y);

コイツどんなキャストしてんだよwって思ったけど、理解が足らなかった。。。
char型の10進数表現97はaで98はbらしい。
このキャストの使い道を教えてくれと思った。


問題7

問題5で(main関数はオーバーロードできる?ぷっw)といった私が通りますよ〜。
また来たかこれ。おそらく頻出なんだろうな。
main関数をオーバーロードしまくっても、結局エントリポイントとして採用されるのは
main(String args[])の引数がStringのだそうです。ふむふむ。


問題8

ここは2つツッコミを入れます。

String s2 = "TRUE";
boolean val2 = Boolean.parseBoolean(s2);

これ、大文字の「TRUE」って正しくキャストされるのかな。答えはちゃんと「true」(小文字)に変換されるみたい。

それと、

String s1 = "100";
String s2 = "TRUE";
int val3 = Integer.valueOf(s1);
boolean val4 = Boolean.valueOf(s2);

これ、valueOf関数なんて知らん!C#専門だもん!とグチりながらもこれも知っておかないと。。。
っていうか、参考書に載ってないぞ〜。
Java.lang.Boolean.valueOf() Method
これを読むと、Stringで文字列を受け取ってintやらboolean型に変換するそう。


と、まぁ次は問題11からスタートです。