【Java】JavaSilver1総合問題の復習02
問題11
staticメソッドが自分以外のメソッドを呼び出す際には、
staticメソッドを呼びだす場合は、メソッド名()だけで呼び出せる。
対してstaticでないものはインスタンス名.メソッド名()で呼び出すことが可能。
非常に基礎的だけど間違ったからメモ(恥ずかしい)
必ずしもクラス名.メソッド名()での呼び出しを行う必要はないみたい。
問題13
int[][] ary = new int[4][2]; ary[0] = new int[]{10, 20, 30, 40}; ary[1] = new int[]{50, 60};
この文を見て、絶対にArrayなんとかExceptionでしょ!
と思ったが、実際は違った。おそらくエラーになる場合は、ary[0][2]みたいにして
配列として存在しない箇所に対するアクセスを行う場合にエラーになるものだと思う。
対して、今回はary[0]に対して新しく配列を生成している。
つまりary[0]の参照自体が変わる。こういう手法もありなんだなぁ。
問題19
自分の中では、booleanはtrueかfalseしかとらないよね、従ってnullを代入している部分がアウト!
という風に判断をしたけど、ラッパークラスのBooleanは参照型だからnullは入ってもいいみたい!
非常に紛らわしいけど、こういう出題もされるんだなぁ。
問題21
えっわからん
問題22
if文ってelse ifで終了してもいいのかな。なんか、else ifだとコンパイルできなかった記憶があるんだけど。。。
文句言ってもしょうがないか。
問題23
ローカル変数の使用の際に明示的な初期化を行わないと、変数を使用した箇所でコンパイルエラーになるみたい。
intは初期化しなくても0が代入されるものだと思っていたけど、ローカル変数はダメなんだって。
int x, y, z; if(x == 0){ //hogehoge }
みたいな使い方。また、
x = 10; y = x++; z = x + y;
みたいな文があったら結果はどうなるかわかるだろうか。
yにはインクリメント前のxの値が入る。
また、x++をしたら元のxの値も変化する。
(当然だけど、なんかxに再代入されていないからxの値は変わらない
という風な考えをしてしまった)
問題26
for(String s : ary){ switch(s) { case “A”: y -= 1; break; } case “B”: y += 1; break; } }
上記のコード中のbreak文はどこに対して効くのか。
答えはswitch文の中だけで、forは抜けない。
問題29 問題35(未)
StringBuilderのインスタンスってインスタンス名を呼び出すだけでToString()が呼び出されるらしいけど、
じゃあなんで標準出力をするときにToString()を呼び出してるわけ?
問題30 問題36
文字列の切り取りのsubstringの使い方をいまいちわかっていない。
文字列.substring(9,11)
というものになったら、9文字目から11文字目の1文字手前つまり9文字目と10文字目を切り取る
文字列.substring(9)
というものになったら9文字目以降を切り取るという操作になる
問題31
switch文を使う際にboolean型は使えない。
問題40
拡張for文の変数の初期化はできない。普通のfor文ならいいけど
//OK int a = -1 for(a = 0;a<c.length;a++){ //hogehoge } //NG char a = ‘’ for(a:c){ //for(char a:c)が正しいのもメモ //hogehoge }