mk-toolブログ

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

【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
}